23b10b9fed9b850a60b7f601c6275811caa812e6 angie Mon Dec 3 11:43:50 2018 -0800 Don't reuse trash files where it can be avoided -- make new cart files when there are changes, so that we don't have to copy files every time we save or load a session. refs #22440 diff --git src/hg/lib/customTrack.c src/hg/lib/customTrack.c index f8cede6..1d4cdd4 100644 --- src/hg/lib/customTrack.c +++ src/hg/lib/customTrack.c @@ -554,72 +554,64 @@ { /* HACK ALERT - calling private method function in customFactory.c */ track->maxChromName = hGetMinIndexLength(genomeDb); /* for the loaders */ #ifdef PROGRESS_METER track->progressFile = 0; #endif wigLoaderEncoding(track, track->wigAscii, ctDbUseAll()); ctAddToSettings(track, "tdbType", track->tdb->type); ctAddToSettings(track, "wibFile", track->wibFile); } /* handle track description */ if (isNotEmpty(track->tdb->html)) { /* write doc file in trash and add reference to the track line*/ - if (!track->htmlFile) - { static struct tempName tn; trashDirFile(&tn, "ct", CT_PREFIX, ".html"); track->htmlFile = cloneString(tn.forCgi); - } writeGulp(track->htmlFile, track->tdb->html, strlen(track->tdb->html)); ctAddToSettings(track, "htmlFile", track->htmlFile); } else { track->htmlFile = NULL; ctRemoveFromSettings(track, "htmlFile"); } saveTdbLine(f, fileName, track->tdb); if (!track->dbTrack) { struct bed *bed; for (bed = track->bedList; bed != NULL; bed = bed->next) bedOutputN(bed, track->fieldCount, f, '\t', '\n'); } } dyStringFree(&ds); carefulClose(&f); } void customTracksSaveCart(char *genomeDb, struct cart *cart, struct customTrack *ctList) /* Save custom tracks to trash file for database in cart */ { -char *ctFileName = NULL; char *ctFileVar = customTrackFileVar(cartString(cart, "db")); if (ctList) { - if (!customTracksExist(cart, &ctFileName)) - { - /* expired custom tracks file */ static struct tempName tn; trashDirFile(&tn, "ct", CT_PREFIX, ".bed"); - ctFileName = tn.forCgi; + char *ctFileName = tn.forCgi; cartSetString(cart, ctFileVar, ctFileName); - } customTracksSaveFile(genomeDb, ctList, ctFileName); } else { /* no custom tracks remaining for this assembly */ cartRemove(cart, ctFileVar); cartRemovePrefix(cart, CT_PREFIX); } } boolean customTrackIsCompressed(char *fileName) /* test for file suffix indicating compression */ { char *fileNameDecoded = cloneString(fileName); cgiDecode(fileName, fileNameDecoded, strlen(fileName)); @@ -944,31 +936,34 @@ } } cartRemove(cart, CT_SELECTED_TABLE_VAR); } /* merge new and old tracks */ numAdded = slCount(newCts); ctList = customTrackAddToList(ctList, newCts, &replacedCts, FALSE); for (ct = ctList; ct != NULL; ct = ct->next) if (trackDbSetting(ct->tdb, CT_UNPARSED)) { ctRemoveFromSettings(ct, CT_UNPARSED); changedCt = TRUE; } if (newCts || removedCt || changedCt || ctConfigUpdate(ctFileName)) + { customTracksSaveCart(genomeDb, cart, ctList); + ctFileName = cartString(cart, customTrackFileVar(genomeDb)); + } if (cgiScriptName() && !endsWith(cgiScriptName(),"hgCustom")) { /* filter out cts that are unavailable remote resources */ ctList = customTrackRemoveUnavailableFromList(ctList); } cartRemove(cart, CT_CUSTOM_TEXT_ALT_VAR); cartRemove(cart, CT_CUSTOM_TEXT_VAR); cartRemove(cart, CT_CUSTOM_FILE_VAR); cartRemove(cart, CT_CUSTOM_FILE_NAME_VAR); cartRemove(cart, CT_CUSTOM_FILE_BIN_VAR); cartRemove(cart, CT_CUSTOM_DOC_FILE_BIN_VAR); if (retCtFileName)