f085e6dea6ee997ae266900fa6706b23f8c0415c
tdreszer
  Fri Sep 16 16:55:32 2011 -0700
Fixed bai matching to second md5sum.  Switched objStatus filtering to wildcard matching.
diff --git src/hg/lib/fileUi.c src/hg/lib/fileUi.c
index 952608e..56d68c3 100644
--- src/hg/lib/fileUi.c
+++ src/hg/lib/fileUi.c
@@ -697,61 +697,43 @@
     char *composite = mdbObjFindValue(mdbFile,MDB_VAR_COMPOSITE);
     if (composite == NULL)
         {
         mdbObjsFree(&mdbFile);
         continue;
         }
 
     // First for FileName
     char *fileName = mdbObjFindValue(mdbFile,MDB_VAR_FILENAME);
     if (fileName == NULL)
         {
         mdbObjsFree(&mdbFile);
         continue;
         }
 
-//#define NO_FILENAME_LISTS
-#ifdef NO_FILENAME_LISTS
-    oneFile = fileDbGet(db, ENCODE_DCC_DOWNLOADS, composite, fileName);
-    if (oneFile == NULL)
-        {
-        mdbObjsFree(&mdbFile);
-        continue;
-        }
-
-    //warn("%s == %s",fileType,oneFile->fileType);
-    if (isEmpty(fileType) || sameWord(fileType,"Any")
-    || (oneFile->fileType && sameWord(fileType,oneFile->fileType)))
-        {
-        slAddHead(&fileList,oneFile);
-        oneFile->mdb = mdbFile;
-        slAddHead(&mdbFiles,oneFile->mdb);
-        found = TRUE;
-        fileCount++;
-        if (limit > 0 && fileCount >= limit)
-            break;
-        }
-    else
-        fileDbFree(&oneFile);
-
-#else///ifndef NO_FILENAME_LISTS
-
     struct slName *fileSet = slNameListFromComma(fileName);
     struct slName *md5Set = NULL;
     char *md5sums = mdbObjFindValue(mdbFile,MDB_VAR_MD5SUM);
     if (md5sums != NULL)
         md5Set = slNameListFromComma(md5sums);
+
+    // Could be that "bai" is implicit with "bam"
+    if ((slCount(fileSet) == 1) && endsWith(fileSet->name,".bam"))
+    {
+    char buf[512];
+    safef(buf,sizeof(buf),"%s.bai",fileSet->name);
+    slNameAddTail(&fileSet, buf);
+    }
     while (fileSet != NULL)
         {
         struct slName *file = slPopHead(&fileSet);
         struct slName *md5 = NULL;
         if (md5Set)
             md5 = slPopHead(&md5Set);
         oneFile = fileDbGet(db, ENCODE_DCC_DOWNLOADS, composite, file->name);
         if (oneFile == NULL)
             {
             slNameFree(&file);
             if (md5)
                 slNameFree(&md5);
             continue;
             }
 
@@ -774,73 +756,63 @@
             if (limit > 0 && fileCount >= limit)
                 {
                 slNameFreeList(&fileSet);
                 if (md5Set)
                     slNameFreeList(&md5Set);
                 break;
                 }
             }
         else
             fileDbFree(&oneFile);
 
         slNameFree(&file);
         if (md5)
             slNameFree(&md5);
         }
-#endif///ndef NO_FILENAME_LISTS
 
-    // FIXME: This support of fileIndex and implicit bam.bai's should be removed when mdb is cleaned up.
+    // FIXME: This support of fileIndex should be removed when mdb is cleaned up.
     // Now for FileIndexes
     if (limit == 0 || fileCount < limit)
         {
-        char buf[512];
-        if (strchr(fileName,',') == NULL && endsWith(fileName,".bam")) // Special to fill in missing .bam.bai's
-            {
-            safef(buf,sizeof(buf),"%s.bai",fileName);
-            fileName = buf;
-            }
-        else
-            {
             fileName = mdbObjFindValue(mdbFile,MDB_VAR_FILEINDEX);   // This mdb var should be going away.
             if (fileName == NULL)
                 continue;
-            }
 
         // Verify existance first
         oneFile = fileDbGet(db, ENCODE_DCC_DOWNLOADS, composite, fileName);  // NOTE: won't be found if already found in comma delimited fileName!
         if (oneFile == NULL)
             continue;
 
-        //warn("%s == %s",fileType,oneFile->fileType);
         if (isEmpty(fileType) || sameWord(fileType,"Any")
         || (oneFile->fileType && sameWord(fileType,oneFile->fileType))
         || (oneFile->fileType && sameWord(fileType,"bam") && sameWord("bam.bai",oneFile->fileType))) // TODO: put fileType matching into search.c lib code to segregate index logic.
             {
             slAddHead(&fileList,oneFile);
             if (found) // if already found then need two mdbObjs (assertable but then this is metadata)
                 oneFile->mdb = mdbObjClone(mdbFile);
             else
                 oneFile->mdb = mdbFile;
             mdbObjRemoveVars(oneFile->mdb,MDB_VAR_MD5SUM);
             slAddHead(&mdbFiles,oneFile->mdb);
             fileCount++;
             found = TRUE;
             continue;
             }
         else
             fileDbFree(&oneFile);
         }
+    // FIXME: This support of fileIndex should be removed when mdb is cleaned up.
 
     if (!found)
         mdbObjsFree(&mdbFile);
     }
 *pmdbFiles = mdbFiles;
 *pFileList = fileList;
 if (exceededLimit != NULL)
     *exceededLimit = FALSE;
 if (mdbList != NULL)
     {
     if (exceededLimit != NULL)
         *exceededLimit = TRUE;
     mdbObjsFree(&mdbList);
     }
 return fileCount;
@@ -861,34 +833,31 @@
 
 // Get an mdbObj list of all that belong to this track and have a fileName
 char buf[256];
 safef(buf,sizeof(buf),"%s=%s %s=?",MDB_VAR_COMPOSITE,tdb->track,MDB_VAR_FILENAME);
 struct mdbByVar *mdbVars = mdbByVarsLineParse(buf);
 struct mdbObj *mdbList = mdbObjsQueryByVars(conn,mdbTable,mdbVars);
 
 // Now get Indexes  But be sure not to duplicate entries in the list!!!
 safef(buf,sizeof(buf),"%s=%s %s= %s!=",MDB_VAR_COMPOSITE,tdb->track,MDB_VAR_FILEINDEX,MDB_VAR_FILENAME);
 mdbVars = mdbByVarsLineParse(buf);
 mdbList = slCat(mdbList, mdbObjsQueryByVars(conn,mdbTable,mdbVars));
 mdbObjRemoveHiddenVars(mdbList);
 hFreeConn(&conn);
 
 if (mdbList)
-    {
-    (void)mdbObjsFilter(&mdbList,"objStatus","revoked",TRUE);
-    (void)mdbObjsFilter(&mdbList,"objStatus","replaced",TRUE);
-    }
+    (void)mdbObjsFilter(&mdbList,"objStatus","re*",TRUE); // revoked, replaced, renamed
 
 if (slCount(mdbList) == 0)
     {
     warn("No files specified in metadata for: %s\n%s",tdb->track,tdb->longLabel);
     return;
     }
 
 // Verify file existance and make fileList of those found
 struct fileDb *fileList = NULL; // Will contain found files
 
 int fileCount = filesFindInDir(db, &mdbList, &fileList, NULL, 0, NULL);
 assert(fileCount == slCount(fileList));
 
 if (fileCount == 0)
     {
@@ -934,34 +903,31 @@
 //fileDbFree(&fileList); // Why bother on this very long running cgi?
 //mdbObjsFree(&mdbList);
 }
 
 int fileSearchResults(char *db, struct sqlConnection *conn, struct slPair *varValPairs, char *fileType)
 // Prints list of files in downloads directories matching mdb search terms. Returns count
 {
 struct sqlConnection *connLocal = conn;
 if (conn == NULL)
     connLocal = hAllocConn(db);
 struct mdbObj *mdbList = mdbObjRepeatedSearch(connLocal,varValPairs,FALSE,TRUE);
 if (conn == NULL)
     hFreeConn(&connLocal);
 
 if (mdbList)
-    {
-    (void)mdbObjsFilter(&mdbList,"objStatus","revoked",TRUE);
-    (void)mdbObjsFilter(&mdbList,"objStatus","replaced",TRUE);
-    }
+    (void)mdbObjsFilter(&mdbList,"objStatus","re*",TRUE); // revoked, replaced, renamed
 
 if (slCount(mdbList) == 0)
     {
     printf("<DIV id='filesFound'><BR>No files found.<BR></DIV><BR>\n");
     return 0;
     }
 
 // Now sort mdbObjs so that composites will stay together and lookup of files will be most efficient
 mdbObjsSortOnVars(&mdbList, MDB_VAR_COMPOSITE);
 mdbObjRemoveHiddenVars(mdbList);
 
 #define FOUND_FILE_LIMIT 1000
 struct fileDb *fileList = NULL; // Will contain found files
 int filesExpected = slCount(mdbList);
 boolean exceededLimit = FALSE;