48fb236e9a07a49585fd1ed15f4aaff24dbcf8a2
max
  Thu Oct 26 13:15:57 2017 -0700
fixing dataVersion for hgTrackUi by libifying printDataVersion and
expanding it to cover all possible track data version places that have
accumulated over time. refs #20419

diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c
index a887236..8940ada 100644
--- src/hg/hgc/hgc.c
+++ src/hg/hgc/hgc.c
@@ -3123,52 +3123,30 @@
     }
 }
 
 void printTrackUiLink(struct trackDb *tdb)
 /* Make link to hgTrackUi. */
 {
 char *trackName = getParentTrackName(tdb);
 struct trackDb *parentTdb = tdb;
 if (!sameString(trackName, tdb->track))
     parentTdb = hTrackDbForTrack(database, trackName);
 printf("<P><A HREF=\"%s?g=%s&%s\">"
        "Go to %s track controls</A></P>\n",
        hTrackUiForTrack(tdb->track), trackName, cartSidUrlString(cart), parentTdb->shortLabel);
 }
 
-static void printDataVersion(struct trackDb *tdb)
-/* If this annotation has a dataVersion trackDb setting, print it */
-{
-if (trackHubDatabase(database))
-    return;
-metadataForTable(database,tdb,NULL);
-const char *version = metadataFindValue(tdb,"dataVersion");
-if(version == NULL)
-    version = trackDbSetting(tdb,"dataVersion");
-if (version != NULL)
-    if (startsWith("/", version))
-        {
-        char *path = replaceInUrl((char *)version, "", cart, database, seqName, winStart, winEnd, tdb->track, FALSE);
-        struct lineFile* lf = lineFileOpen(path, TRUE);
-        if (lf)
-            version = lineFileReadAll(lf);
-        }
-
-if (version != NULL)
-    printf("<B>Data version:</B> %s <BR>\n", version);
-}
-
 void printDataRestrictionDate(struct trackDb *tdb)
 /* If this annotation has a dateUnrestricted trackDb setting, print it */
 {
 char *restrictionDate = encodeRestrictionDateDisplay(database,tdb);
 if (restrictionDate != NULL)
     {
     printf("<A HREF=\"/ENCODE/terms.html\" TARGET=_BLANK><B>Restricted until</A>:</B> %s <BR>\n",
                 restrictionDate);
     freeMem(restrictionDate);
     }
 }
 
 static void printOrigAssembly(struct trackDb *tdb)
 /* If this annotation has been lifted, print the original
  * freeze, as indicated by the "origAssembly" trackDb setting */
@@ -3184,40 +3162,32 @@
     if (tdb->html != NULL && tdb->html[0] != 0)
         return tdb->html;
     }
 return NULL;
 }
 
 void printTrackHtml(struct trackDb *tdb)
 /* If there's some html associated with track print it out. Also print
  * last update time for data table and make a link
  * to the TB table schema page for this table. */
 {
 if (!isCustomTrack(tdb->track))
     {
     extraUiLinks(database, tdb);
     printTrackUiLink(tdb);
-    struct trackVersion *trackVersion = getTrackVersion(database, tdb->track);
-    // also try the parent for composites/superTracks
-    if(trackVersion == NULL && (tdb->parent!=NULL))
-        trackVersion = getTrackVersion(database, tdb->parent->track);
-
-    if(trackVersion == NULL)
-        printDataVersion(tdb);
-    else
-        printf("<B>Data version:</B> %s <BR>\n", trackVersion->version);
     printOrigAssembly(tdb);
+    printDataVersion(database, tdb);
     printUpdateTime(database, tdb, NULL);
     printDataRestrictionDate(tdb);
     }
 char *html = getHtmlFromSelfOrParent(tdb);
 if (html != NULL && html[0] != 0)
     {
     htmlHorizontalLine();
 
     // Add pennantIcon
     printPennantIconNote(tdb);
 
     // Wrap description html in div with limited width, so when the page is very wide
     // due to long details, the user doesn't have to scroll right to read the description.
     puts("<div class='readableWidth'>");
     puts(html);
@@ -24123,33 +24093,35 @@
         hasAttr++;
         gvAttrStaticLoad(row, &attr);
         printGvAttrCatType(i); /* only print header, if data */
         /* print value */
         printf("%s<BR>", attr.attrVal);
         }
     sqlFreeResult(&sr);
     hasAttr += printGvLink(itemName, i);
     }
 if (hasAttr > 0)
     printf("</DD>");
 printf("</DL>\n");
 
 /* split code from printTrackHtml */
 printTBSchemaLink(tdb);
-printDataVersion(tdb);
+
 printOrigAssembly(tdb);
+printDataVersion(database, tdb);
 printUpdateTime(database, tdb, NULL);
+
 if (tdb->html != NULL && tdb->html[0] != 0)
     {
     htmlHorizontalLine();
     puts(tdb->html);
     }
 hPrintf("<BR>\n");
 
 gvPosFree(&mut);
 freeMem(gvPrevCat);
 freeMem(gvPrevType);
 //printTrackHtml(tdb);
 hFreeConn(&conn);
 }
 
 void doPgSnp(struct trackDb *tdb, char *itemName, struct customTrack *ct)