f891a08d66364fcb08165a6e4a620670182effb4
tdreszer
  Mon Nov 14 15:26:55 2011 -0800
Redmine 5992.  Backing out previous fix in order to make a targeted fix for patching.  At this checkin, code should be back to 6f7dabcd1d87152560c0b66bb126bce0a0582415.
diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index 1d1c9d9..6230031 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -172,33 +172,32 @@
     else if (track->subtracks != NULL)
         {
         struct track *st = trackFindByName(track->subtracks, trackName);
         if (st != NULL)
             return st;
         }
     }
 return NULL;
 }
 
 int tgCmpPriority(const void *va, const void *vb)
 /* Compare to sort based on priority; use shortLabel as secondary sort key. */
 {
 const struct track *a = *((struct track **)va);
 const struct track *b = *((struct track **)vb);
-float dif = 0;
-if (a->group && b->group)
-    dif = a->group->priority - b->group->priority;
+float dif = a->group->priority - b->group->priority;
+
 if (dif == 0)
     dif = a->priority - b->priority;
 if (dif < 0)
    return -1;
 else if (dif == 0.0)
     /* secondary sort on label */
     return strcasecmp(a->shortLabel, b->shortLabel);
 else
    return 1;
 }
 
 int trackRefCmpPriority(const void *va, const void *vb)
 /* Compare based on priority. */
 {
 const struct trackRef *a = *((struct trackRef **)va);
@@ -3831,41 +3830,30 @@
 {
 if (!tdbIsSuper(tdb))
     return FALSE;
 return (tdb->visibility != tvHide);
 }
 
 int hubCmpAlpha(const void *va, const void *vb)
 /* Compare to sort hubs based on name */
 {
 const struct trackHub *a = *((struct trackHub **)va);
 const struct trackHub *b = *((struct trackHub **)vb);
 
 return strcmp(a->shortLabel, b->shortLabel);
 }
 
-static void rPropagateGroup(struct track *track, struct group *group)
-// group should spread to multiple levels of children.
-{
-struct track *subtrack = track->subtracks;
-for ( ;subtrack != NULL;subtrack = subtrack->next)
-    {
-    subtrack->group = group;
-    rPropagateGroup(subtrack, group);
-    }
-}
-
 static void groupTracks(struct trackHub *hubList, struct track **pTrackList,
 	struct group **pGroupList, int vis)
 /* Make up groups and assign tracks to groups.
  * If vis is -1, restore default groups to tracks. */
 {
 struct group *unknown = NULL;
 struct group *group, *list = NULL;
 struct hash *hash = newHash(8);
 struct track *track;
 struct trackRef *tr;
 struct grp* grps = hLoadGrps(database);
 struct grp *grp;
 float minPriority = 100000; // something really large
 
 /* build group objects from database. */
@@ -3987,31 +3975,30 @@
     else
 	group = hashFindVal(hash, track->groupName);
     if (group == NULL)
         {
 	if (unknown == NULL)
 	    {
 	    AllocVar(unknown);
 	    unknown->name = cloneString("other");
 	    unknown->label = cloneString("other");
 	    unknown->priority = 1000000;
 	    slAddHead(&list, unknown);
 	    }
 	group = unknown;
 	}
     track->group = group;
-    rPropagateGroup(track, group);
     }
 
 /* Sort tracks by combined group/track priority, and
  * then add references to track to group. */
 slSort(pTrackList, tgCmpPriority);
 for (track = *pTrackList; track != NULL; track = track->next)
     {
     AllocVar(tr);
     tr->track = track;
     slAddHead(&track->group->trackList, tr);
     }
 
 /* Straighten things out, clean up, and go home. */
 for (group = list; group != NULL; group = group->next)
     slReverse(&group->trackList);