e54c3b30f31688cffcf668d2ebacc9443f5e1743
kate
  Fri Jul 31 11:05:37 2020 -0700
Switch to per-assembly config files for recommended track sets. refs #25601

diff --git src/hg/hgTracks/recTrackSets.c src/hg/hgTracks/recTrackSets.c
index 6375560..c9d2680 100644
--- src/hg/hgTracks/recTrackSets.c
+++ src/hg/hgTracks/recTrackSets.c
@@ -4,84 +4,85 @@
 /* Copyright (C) 2020 The Regents of the University of California 
  * See README in this or parent directory for licensing information. */
 
 #include "common.h"
 #include "dystring.h"
 #include "hCommon.h"
 #include "htmshell.h"
 #include "hash.h"
 #include "web.h"
 #include "ra.h"
 #include "hgTracks.h"
 #include "hgFind.h"
 #include "obscure.h"
 #include "net.h"
 
-#define REC_TRACK_SETS_FILE  "inc/recommendedTrackSets.tab"
 
 /* Recommended track sets are Special 'curated' sessions, created by browser team, e.g. for clinical users
  *      This is expected to be a very limited number (under 10 ?)
  *      The list references sessions in namedSessionDb table, by userName and sessionName
  *      (unfortunately not required to be unique, so depending on curator to 
  *      just make one (code willl pick the first one)
  */      
 struct recTrackSet
     {
     struct recTrackSet *next;
     char *label;        // short label for display on browser and dialogs
-    char *db;           // should match db in settings field of named sessions table
     char *userName;     // field in named sessions table
     char *sessionName;  // field in named sessions table (CGI encoded)
     char *description;  // descriptive phrase or sentence.  Display uses this
                                 // instead of description in session settings to allow
                                 // updating by other than session author (e.g. QA)
     };
 
+#define REC_TRACK_SETS_FILE  "recTrackSets"
+#define REC_TRACK_SETS_DIR  "inc"
+#define REC_TRACK_SETS_EXT  "tab"
+
 char *recTrackSetsFile()
-/* Generate path to file specifying menu of recommended track sets */
+/* Generate path to file specifying menu of recommended track sets.
+ *      eg, DOCUMENT_ROOT/inc/recTrackSets.hg19.tab */
 {
 char *root = hDocumentRoot();
 char buf[200];
-safef(buf, sizeof(buf), "%s/%s", root, REC_TRACK_SETS_FILE);
+safef(buf, sizeof buf, "%s/%s/%s.%s.%s", 
+        root, REC_TRACK_SETS_DIR, REC_TRACK_SETS_FILE, database, REC_TRACK_SETS_EXT);
 return cloneString(buf);
 }
 
 boolean recTrackSetsEnabled()
 /* Return TRUE if feature is available */
 {
 return fileExists(recTrackSetsFile());
 }
 
 struct recTrackSet *loadRecTrackSets()
-/* Read from tab-sep file.  Return list */
+/* Read from tab-sep file.  Return list or NULL if no track sets for this database */
 {
 struct recTrackSet *recTrackSet, *recTrackSets = NULL;
 struct lineFile *lf = lineFileOpen(recTrackSetsFile(), TRUE);
-#define cols 5
+if (!lf)
+    return NULL;
+#define cols 4
 char *row[cols];
 while (lineFileNextRowTab(lf, row, cols))
     {
-    char *db = row[1];
-    // limit to sessions in current database
-    if (differentString(db, database))
-        continue;
     AllocVar(recTrackSet);
     recTrackSet->label = cloneString(row[0]);
-    recTrackSet->db = cloneString(row[1]);
-    recTrackSet->userName = cloneString(row[2]);
-    recTrackSet->sessionName = cloneString(row[3]);
-    recTrackSet->description = cloneString(row[4]);
+    recTrackSet->userName = cloneString(row[1]);
+    recTrackSet->sessionName = cloneString(row[2]);
+    recTrackSet->description = cloneString(row[3]);
     slAddHead(&recTrackSets, recTrackSet);
     }
 slReverse(&recTrackSets);
 lineFileClose(&lf);
 return recTrackSets;
 }
 
 int recTrackSetsForDb()
 /* Return number of recommended track sets for this database */
 {
 return slCount(loadRecTrackSets());
 }
 
 void printRecTrackSets()
 /* Create dialog with list of recommended track sets */