src/hg/makeDb/hgTrackDb/hgTrackDb.c 1.64
1.64 2010/03/01 01:04:54 braney
allow release tags to be comma separated lists with alpha, beta, and public
Index: src/hg/makeDb/hgTrackDb/hgTrackDb.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/makeDb/hgTrackDb/hgTrackDb.c,v
retrieving revision 1.63
retrieving revision 1.64
diff -b -B -U 4 -r1.63 -r1.64
--- src/hg/makeDb/hgTrackDb/hgTrackDb.c 17 Feb 2010 03:08:39 -0000 1.63
+++ src/hg/makeDb/hgTrackDb/hgTrackDb.c 1 Mar 2010 01:04:54 -0000 1.64
@@ -39,9 +39,9 @@
" -hideFirst - Before applying vis.ra, set all visibilities to hide.\n"
" -strict - only include tables that exist (and complain about missing html files).\n"
" -raName=trackDb.ra - Specify a file name to use other than trackDb.ra\n"
" for the ra files.\n"
- " -release=alpha|beta - Include trackDb entries with this release only.\n"
+ " -release=alpha|beta|public - Include trackDb entries with this release tag only.\n"
" -settings - for trackDb scanning, output table name, type line,\n"
" - and settings hash to stderr while loading everything\n"
);
}
@@ -57,9 +57,16 @@
{NULL, 0}
};
static char *raName = "trackDb.ra";
+
static char *release = "alpha";
+
+#define RELEASE_ALPHA (1 << 0)
+#define RELEASE_BETA (1 << 1)
+#define RELEASE_PUBLIC (1 << 2)
+unsigned releaseBit = RELEASE_ALPHA;
+
static bool showSettings = FALSE;
static boolean hasNonAsciiChars(char *text)
/* Check if text has any non-printing or non-ascii characters */
@@ -141,8 +148,39 @@
slReverse(&newList);
return newList;
}
+unsigned buildReleaseBits(struct trackDb *tdb, char *rel)
+/* unpack the comma separated list of possible release tags */
+{
+
+if (rel == NULL)
+ return RELEASE_ALPHA | RELEASE_BETA | RELEASE_PUBLIC;
+
+unsigned bits = 0;
+while(rel)
+ {
+ char *end = strchr(rel, ',');
+
+ if (end)
+ *end++ = 0;
+ rel = trimSpaces(rel);
+
+ if (sameString(rel, "alpha"))
+ bits |= RELEASE_ALPHA;
+ else if (sameString(rel, "beta"))
+ bits |= RELEASE_BETA;
+ else if (sameString(rel, "public"))
+ bits |= RELEASE_PUBLIC;
+ else
+ errAbort("tracks must have a release combination of alpha, beta, and public");
+
+ rel = end;
+ }
+
+return bits;
+}
+
static struct trackDb * pruneRelease(struct trackDb *tdbList)
/* Prune out alternate track entries for another release */
{
/* Build up list that only includes things in this release. Release
@@ -153,11 +191,13 @@
while ((tdb = slPopHead(&tdbList)) != NULL)
{
char *rel = trackDbSetting(tdb, "release");
- if (rel == NULL || sameString(rel, release))
+ unsigned trackRelBits = buildReleaseBits(tdb, rel);
+
+ if (trackRelBits & releaseBit)
{
- /* Remove release tags in remaining tracks, since its purpose is served. */
+ /* we want to include this track, check to see if we already have it */
struct hashEl *hel;
if ((hel = hashLookup(haveHash, tdb->tableName)) != NULL)
errAbort("found two copies of table %s: one with release %s, the other %s\n",
tdb->tableName, (char *)hel->val, release);
@@ -790,8 +831,25 @@
verbose(1, "Loaded database %s\n", database);
}
}
+unsigned getReleaseBit(char *release)
+/* make sure that the tag is a legal release */
+{
+if (sameString(release, "alpha"))
+ return RELEASE_ALPHA;
+
+if (sameString(release, "beta"))
+ return RELEASE_BETA;
+
+if (sameString(release, "public"))
+ return RELEASE_PUBLIC;
+
+errAbort("release must be alpha, beta, or public");
+
+return 0; /* make compiler happy */
+}
+
int main(int argc, char *argv[])
/* Process command line. */
{
optionInit(&argc, argv, optionSpecs);
@@ -801,8 +859,9 @@
showSettings = optionExists("settings");
if (strchr(raName, '/') != NULL)
errAbort("-raName value should be a file name without directories");
release = optionVal("release", release);
+releaseBit = getReleaseBit(release);
hgTrackDb(argv[1], argv[2], argv[3], argv[4], argv[5],
optionVal("visibility", NULL), optionVal("priority", NULL),
optionExists("strict"));