src/hg/lib/customFactory.c 1.98

1.98 2009/07/30 22:21:18 galt
work-around for collision of two uses of dataUrl
Index: src/hg/lib/customFactory.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/customFactory.c,v
retrieving revision 1.97
retrieving revision 1.98
diff -b -B -U 4 -r1.97 -r1.98
--- src/hg/lib/customFactory.c	18 May 2009 21:36:41 -0000	1.97
+++ src/hg/lib/customFactory.c	30 Jul 2009 22:21:18 -0000	1.98
@@ -1943,9 +1943,8 @@
 char *line = NULL;
 struct hash *chromHash = newHash(8);
 float prio = 0.0;
 struct sqlConnection *ctConn = NULL;
-char *loadedFromUrl = NULL;
 boolean dbTrack = ctDbUseAll();
 if (dbTrack)
     ctConn = hAllocConn(CUSTOM_TRASH);
 
@@ -1962,9 +1961,8 @@
      * First time through make up track var from thin air
      * if no track line. Find out explicit type setting if any.
      * Also make sure settingsHash is set up. */
     lf = cpp->fileStack;
-    //char *type = NULL;
     if (startsWithWord("track", line))
         {
 	track = trackLineToTrack(genomeDb, line, cpp->fileStack->lineIx);
         }
@@ -2054,11 +2052,13 @@
 			type, lf->lineIx, lf->fileName);
 		}
 	    }
         char *dataUrl = NULL;
-        if (lf->fileName && 
-                (startsWith("http://", lf->fileName) || 
-                 startsWith("ftp://", lf->fileName)))
+        if (lf->fileName && (
+                startsWith("http://" , lf->fileName) || 
+                startsWith("https://", lf->fileName) || 
+                startsWith("ftp://"  , lf->fileName)
+                ))
             dataUrl = cloneString(lf->fileName);
 	oneList = fac->loader(fac, chromHash, cpp, track, dbTrack);
 	/* Save a few more settings. */
 	for (oneTrack = oneList; oneTrack != NULL; oneTrack = oneTrack->next)
@@ -2067,10 +2067,25 @@
 	    if (dbTrack && oneTrack->dbTrackType != NULL)
 		ctAddToSettings(track, "dbTrackType", oneTrack->dbTrackType);
             if (!trackDbSetting(track->tdb, "inputType"))
                 ctAddToSettings(track, "inputType", fac->name);
+            /* dataUrl is unfortunately being used in two ways, 
+             *  bigBed and bigWig should have used their own variable name
+             * try to prevent stomping on dataUrl for bigBed and bigWig */
             if (dataUrl)
+		{
+		boolean updateDataUrl = TRUE;
+		if ( startsWith("bigBed", track->tdb->type) ||
+		     startsWith("bigWig", track->tdb->type) )
+		    {
+		    // we do not want to lose this
+                    // see compensating hack in ctDataUrl()
+		    if (trackDbSetting(track->tdb, "dataUrl"))
+			updateDataUrl = FALSE;
+		    }
+		if (updateDataUrl)
                 ctAddToSettings(track, "dataUrl", dataUrl);
+		}
             if (!ctGenome(track) && ctDb)
                 ctAddToSettings(track, "db", ctDb);
 	    }
 	}
@@ -2089,10 +2104,8 @@
          {
 	 prio += 0.001;
 	 track->tdb->priority = prio;
 	 }
-    if (loadedFromUrl)
-        ctAddToSettings(track, "dataUrl", loadedFromUrl);
     if (initialPos)
         ctAddToSettings(track, "initialPos", initialPos);
     if (track->bedList)
         {
@@ -2324,8 +2337,15 @@
 
 char *ctDataUrl(struct customTrack *ct)
 /* return URL where data can be reloaded, if any */
 {
+// hack to compensate for miss-use of variable name "dataUrl" in
+//  a different way than the rest of the code.
+//  see customFactoryParseOptionalDb() below.
+if ( startsWith("bigBed", ct->tdb->type) ||
+     startsWith("bigWig", ct->tdb->type) )
+    return NULL;
+
 return trackDbSetting(ct->tdb, "dataUrl");
 }
 
 char *ctHtmlUrl(struct customTrack *ct)