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;