5b204465085990ada8139c651688ac2bd215f4bf kent Mon Jul 12 15:13:27 2010 -0700 Taking some small steps towards implementing import of tracks from a data hub. Made trackDbFromRa take a url rather than a file as input by swapping in netLineFileOpen for lineFileOpen. Have a bunch of code that is compiled but not called (the call is ifdef'd out) that is starting to do some ofthe work, but that currently is crashing if ifdef'd back in. Just committing at this point so that I can do a git pull and grab everyone elses changes. I'm still learning how to work with half-baked things in git. ;-) diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index 8269327..62c0d75 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -2723,17 +2723,13 @@ } } -void loadFromTrackDb(struct track **pTrackList) -/* Load tracks from database, consulting handler list. */ +void addTdbListToTrackList(struct trackDb *tdbList, char *trackNameFilter, + struct track **pTrackList) +/* Convert a list of trackDb's to tracks, and append these to trackList. */ { -struct trackDb *tdb, *next, *tdbList = NULL; +struct trackDb *tdb, *next; struct track *track; TrackHandler handler; -char *trackNameFilter = cartOptionalString(cart, "hgt.trackNameFilter"); -if(trackNameFilter == NULL) - tdbList = hTrackDb(database, chromName); -else - tdbList = hTrackDbForTrack(database, trackNameFilter); tdbSortPrioritiesFromCart(cart, &tdbList); for (tdb = tdbList; tdb != NULL; tdb = next) { @@ -2768,6 +2764,18 @@ } } +void loadFromTrackDb(struct track **pTrackList) +/* Load tracks from database, consulting handler list. */ +{ +char *trackNameFilter = cartOptionalString(cart, "hgt.trackNameFilter"); +struct trackDb *tdbList; +if(trackNameFilter == NULL) + tdbList = hTrackDb(database, chromName); +else + tdbList = hTrackDbForTrack(database, trackNameFilter); +addTdbListToTrackList(tdbList, trackNameFilter, pTrackList); +} + static int getScoreFilter(char *trackName) /* check for score filter configuration setting */ { @@ -3257,7 +3265,7 @@ return pos; } -void loadCustomTracks(struct track **pGroupList) +void loadCustomTracks(struct track **pTrackList) /* Load up custom tracks and append to list. */ { struct customTrack *ct; @@ -3309,7 +3317,7 @@ char *s = words[i]; struct track *tg; boolean toAll = sameWord(s, "all"); - for (tg = *pGroupList; tg != NULL; tg = tg->next) + for (tg = *pTrackList; tg != NULL; tg = tg->next) { if (toAll || sameString(s, tg->track)) { @@ -3359,7 +3367,42 @@ { hasCustomTracks = TRUE; tg = newCustomTrack(ct); - slAddHead(pGroupList, tg); + slAddHead(pTrackList, tg); + } +} + +void addTracksFromDataHub(char *hubUrl, struct track **pTrackList) +/* Load up stuff from data hub and append to list. The hubUrl points to + * a trackDb.ra format file. */ +{ +/* Squirrel away hub directory for later. */ +char hubDir[PATH_LEN]; +splitPath(hubUrl, hubDir, NULL, NULL); + +/* Load trackDb.ra file and make it into proper trackDb tree */ +struct trackDb *tdb, *tdbList = trackDbFromRa(hubUrl); +for (tdb = tdbList; tdb != NULL; tdb = tdb->next) + { + trackDbFieldsFromSettings(tdb); + trackDbPolish(tdb); + } +trackDbLinkUpGenerations(tdbList); +addTdbListToTrackList(tdbList, NULL, pTrackList); +} + +void loadDataHubs(struct track **pTrackList) +/* Load up stuff from data hubs and append to list. */ +{ +char *dataHubs = cloneString(cartUsualString(cart, "dataHubs", NULL)); +if (dataHubs == NULL) + return; +int hubCount = chopByWhite(dataHubs, NULL, 10); +char *hubArrays[hubCount]; +chopByWhite(dataHubs, hubArrays, hubCount); +int i; +for (i = 0; i