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 */