5ee15559749943e284aed0e62e22e24bbe3523e0
angie
  Tue Aug 1 10:11:36 2017 -0700
findSelectedTrack needs to return the top-level/composite track if it's given a subtrack name, so the returned track can be compared against top-level tracks in fullTrackList.  In hg19 refGene is a top-level track, but in hg38 refGene is a subtrack of refSeqComposite so findSelectedTrack needs to return refSeqComposite.  refs #19920.

diff --git src/hg/hgTables/hgTables.c src/hg/hgTables/hgTables.c
index 38aa368..3974c13 100644
--- src/hg/hgTables/hgTables.c
+++ src/hg/hgTables/hgTables.c
@@ -795,31 +795,33 @@
 /* Find named track that is in group (NULL for any group).
  * Return NULL if can't find it. */
 {
 struct trackDb *track;
 if (group != NULL && sameString(group->name, "all"))
     group = NULL;
 for (track = trackList; track != NULL; track = track->next)
     {
     if (sameString(name, track->track) &&
        (group == NULL || sameString(group->name, track->grp)))
        return track;
     if (track->subtracks)
         {
 	struct trackDb *subtrack = findTrackInGroup(name, track->subtracks, group);
 	if (subtrack != NULL)
-	    return subtrack;
+            // Return composite track if given a subtrack name (e.g. hg19 refGene track to
+            // hg38 refSeqComposite, #19920)
+	    return track;
 	}
     }
 return NULL;
 }
 
 struct trackDb *findTrack(char *name, struct trackDb *trackList)
 /* Find track, or return NULL if can't find it. */
 {
 return findTrackInGroup(name, trackList, NULL);
 }
 
 struct trackDb *mustFindTrack(char *name, struct trackDb *trackList)
 /* Find track or squawk and die. */
 {
 struct trackDb *track = findTrack(name, trackList);