5c213974bb28e98d1b10ad9a86063101e684e5e3 braney Mon Oct 31 12:16:52 2022 -0700 add Jim's track duplication code diff --git src/hg/hgTables/hgTables.c src/hg/hgTables/hgTables.c index d27ce21..1417934 100644 --- src/hg/hgTables/hgTables.c +++ src/hg/hgTables/hgTables.c @@ -11,30 +11,31 @@ #include "htmshell.h" #include "cheapcgi.h" #include "cart.h" #include "cartTrackDb.h" #include "textOut.h" #include "jksql.h" #include "hdb.h" #include "web.h" #include "hui.h" #include "hCommon.h" #include "hgColors.h" #include "trackDb.h" #include "botDelay.h" #include "grp.h" #include "customTrack.h" +#include "dupTrack.h" #include "pipeline.h" #include "hgFind.h" #include "hgTables.h" #include "joiner.h" #include "bedCart.h" #include "hgMaf.h" #include "gvUi.h" #include "wikiTrack.h" #include "trackHub.h" #include "hubConnect.h" #include "hgConfig.h" #include "udc.h" #include "chromInfo.h" #include "knetUdc.h" #include "trashDir.h" @@ -760,36 +761,43 @@ /* Find track or squawk and die. */ { struct trackDb *track = findTrack(name, trackList); if (track == NULL) { if (isCustomTrack(name)) errAbort("Can't find custom track %s. " "If it's been 8 hours since you accessed this track you " "may just need to upload it again.", name); else errAbort("Track %s doesn't exist in database %s.", name, database); } return track; } +static char *undupedTrackName(struct cart *cart, char *varName) +/* Return cartString for varName after removing any dup_N_ prefixes */ +{ +char *s = cartString(cart, varName); +return dupTrackSkipToSourceName(s); +} + struct trackDb *findSelectedTrack(struct trackDb *trackList, struct grp *group, char *varName) /* Find selected track - from CGI variable if possible, else * via various defaults. */ { -char *name = cartOptionalString(cart, varName); +char *name = undupedTrackName(cart, varName); struct trackDb *track = NULL; if (name != NULL) { track = findTrackInGroup(name, trackList, group); } if (track == NULL) { if (group == NULL || sameString(group->name, "all")) track = trackList; else { for (track = trackList; track != NULL; track = track->next) if (sameString(track->grp, group->name)) break; @@ -1393,31 +1401,31 @@ } void dispatch(); void doTopSubmit(struct sqlConnection *conn) /* Respond to submit button on top level page. * This basically just dispatches based on output type. */ { char *output = cartString(cart, hgtaOutputType); char *trackName = NULL; char *table = cartString(cart, hgtaTable); struct trackDb *track = NULL; if (!sameString(curGroup->name, "allTables")) { - trackName = cartString(cart, hgtaTrack); + trackName = undupedTrackName(cart, hgtaTrack); track = mustFindTrack(trackName, fullTrackList); } else { struct trackDb *cTdb = NULL; track = hTrackDbForTrack(database, table); cTdb = hCompositeTrackDbForSubtrack(database, track); if (cTdb) track = cTdb; } checkNoGenomeDisabled(database, table); if (track != NULL) { if (sameString(track->table, "gvPos") && !cartVarExists(cart, "gvDisclaimer"))