5cbd092e2deb2869385fc3203282ac6c91337048
chmalee
  Tue Apr 20 10:27:40 2021 -0700
Allow different messages for each side of a relationship in the relatedTracks section of hgc/hgTrackUi. Enforce two lines per relationship in relatedTracks.ra in order to allow this, refs #25721

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 5db371a..29bb8dd 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -9868,52 +9868,46 @@
 void printRelatedTracks(char *database, struct hash *trackHash, struct trackDb *tdb, struct cart *cart)
 /* Maybe print a "related track" section */
 {
 if (!cfgOption("db.relatedTrack") || trackHubDatabase(database))
     return;
 char *relatedTrackTable = cfgOptionDefault("db.relatedTrack","relatedTrack");
 struct sqlConnection *conn = hAllocConn(database);
 if (!sqlTableExists(conn, relatedTrackTable))
     {
     hFreeConn(&conn);
     return;
     }
 
 char query[256];
 sqlSafef(query, sizeof(query),
-    "select track1, track2, why from %s where track1='%s' or track2='%s'", relatedTrackTable, tdb->track, tdb->track);
+    "select track2, why from %s where track1='%s'", relatedTrackTable, tdb->track);
 
 char **row;
 struct sqlResult *sr;
 sr = sqlGetResult(conn, query);
 row = sqlNextRow(sr);
 if (row != NULL)
     {
     puts("<b>Related tracks</b>\n");
     puts("<ul>\n");
     struct hash *otherTracksAndDesc = hashNew(0);
-    char *track1, *track2, *why, *otherTrack;
+    char *why, *otherTrack;
     for (; row != NULL; row = sqlNextRow(sr))
         {
-        track1 = row[0];
-        track2 = row[1];
-        why    = row[2];
-
-        if (sameWord(track1, tdb->track))
-            otherTrack = track2;
-        else
-            otherTrack = track1;
+        otherTrack = row[0];
+        why = row[1];
         // hopefully relatedTracks.ra doesn't have dupes but hash them just in case
         hashReplace(otherTracksAndDesc, cloneString(otherTrack), cloneString(why));
         }
 
     struct hashEl *hel, *helList = hashElListHash(otherTracksAndDesc);
     for (hel = helList; hel != NULL; hel = hel->next)
         {
         char *otherTrack = (char *)hel->name;
         char *why = (char *)hel->val;
         struct trackDb *otherTdb = hashFindVal(trackHash, otherTrack);
         // super tracks are not in the hash:
         if (!otherTdb)
             otherTdb = tdbForTrack(database, otherTrack, NULL);
         if (otherTdb)
             {