84688c95e385ee526a59d7dac8f6ff644781361b
braney
  Sat Aug 2 11:11:57 2025 -0700
ongoing work on quickLift.   Made saved sessions work a little more
rationally

diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c
index 78860aebf2f..d4767d51191 100644
--- src/hg/lib/trackHub.c
+++ src/hg/lib/trackHub.c
@@ -1495,44 +1495,41 @@
 useOneFile on\n\
 email genome-www@soe.ucsc.edu\n\n", db, db, db);
 fprintf(f,"genome %s\n\n", db);
 }
 
 static char *getHubName(struct cart *cart, char *db)
 // get the name of the hub to use for quickLifted tracks
 {
 struct tempName hubTn;
 char buffer[4096];
 #define quickLiftCartName     "hubQuickLift"
 safef(buffer, sizeof buffer, "%s-%s", quickLiftCartName, db);
 char *hubName = cartOptionalString(cart, buffer);
 int fd = -1;
 
+// we don't reuse userdata paths since they are in save sessions
+if ((hubName != NULL) && strstr(hubName, "userdata"))
+    hubName = NULL;
+
 if ((hubName == NULL) || ((fd = open(hubName, 0)) < 0))
     {
     trashDirDateFile(&hubTn, "quickLift", "hub", ".txt");
     hubName = cloneString(hubTn.forCgi);
     cartSetString(cart, buffer, hubName);
     }
 
-FILE *f = mustOpen(hubName, "w");
-outHubHeader(f, db);
-fclose(f);
-
-if (fd >= 0)
-    close(fd);
-
 return hubName;
 }
 
 static char *vettedTracks[] =
 /* tracks that have been tested with quickLift */
 {
 "decipherContainer",
 "decipherSnvs",
 "omimLocation",
 "omimAvSnp",
 "ncbiRefSeq",
 "clinvar",
 "clinvarSubLolly",
 "pubsBlat",
 "pubsMarkerBand",
@@ -1884,32 +1881,33 @@
 
 struct hash *groupHash = newHash(0);
 struct grp *grp;
 for(grp = grpList; grp; grp = grp->next)
     hashAdd(groupHash, grp->name, grp);
 
 for(tdb = tdbList; tdb; tdb = tdb->next)
     {
     grp = hashFindVal(groupHash, tdb->grp);
     tdb->groupPriority = grp->priority;
     }
 slSort(&tdbList, cmpPriority);
 
 char *filename = getHubName(cart, db);
 
-FILE *f = mustOpen(filename, "a");
+FILE *f = mustOpen(filename, "w");
 chmod(filename, 0666);
+outHubHeader(f, db);
 
 walkTree(f, db, cart, tdbList, visDy, badList);
 fclose(f);
 
 return cloneString(filename);
 }
 
 struct grp *trackHubGetGrps()
 /* Get the groups defined by attached track hubs. */
 {
 return trackHubGrps;
 }
 
 struct trackDb *trackHubAddTracksGenome(struct trackHubGenome *hubGenome)
 /* Load up stuff from data hub and return list. */