ec2f9cd20b7c6d615c233ab4f16be579b9c85ae0
braney
  Tue Nov 15 15:48:41 2022 -0800
put track duplication under hg.conf control

diff --git src/hg/lib/dupTrack.c src/hg/lib/dupTrack.c
index a5004e5..e858793 100644
--- src/hg/lib/dupTrack.c
+++ src/hg/lib/dupTrack.c
@@ -1,25 +1,26 @@
 /* Stuff to help handle a track that is a duplicate of a another - sharing data
  * and type, but having it's own cart settings. */
 
 #include "common.h"
 #include "hash.h"
 #include "cart.h"
 #include "dupTrack.h"
 #include "ra.h"
 #include "portable.h"
 #include "trashDir.h"
+#include "hgConfig.h"
 
 boolean isDupTrack(char *track)
 /* determine if track name refers to a custom track */
 {
 return (startsWith(DUP_TRACK_PREFIX, track));
 }
 
 char *dupTrackSkipToSourceName(char *dupeTrackName)
 /* If it looks like it's a dupe track then skip over duppy part 
  * in particular skip over dup_N_ form prefix for numerical N. */
 {
 char *name = dupeTrackName;
 if (startsWith(DUP_TRACK_PREFIX, name))
     {
     char *s = name + strlen(DUP_TRACK_PREFIX);
@@ -237,15 +238,21 @@
        break;
 return dup;
 }
 
 struct trackDb *dupTdbFrom(struct trackDb *sourceTdb, struct dupTrack *dup)
 /* Generate a duplicate trackDb */
 {
 /* Start with a basic shallow clone */
 struct trackDb *tdb = CloneVar(sourceTdb);
 tdb->next = NULL;
 tdb->track = cloneString(dup->name);
 dupTrackAddInfoToTdb(dup, tdb);
 return tdb;
 }
 
+boolean dupTrackEnabled()
+/* Return true if we allow tracks to be duped. */
+{
+return  cfgOptionBooleanDefault("canDupTracks", FALSE);
+}
+