dc5b5de8b09d0cd08c953805e29601860bbbd2ad chmalee Mon Jul 27 11:44:51 2026 -0700 allow '>' one-way and '~' bidirectional relatedTracks entries, refs #37390 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> diff --git src/hg/makeDb/trackDb/buildRelatedTracks src/hg/makeDb/trackDb/buildRelatedTracks index 6609b400e1c..3aa0eac29a2 100755 --- src/hg/makeDb/trackDb/buildRelatedTracks +++ src/hg/makeDb/trackDb/buildRelatedTracks @@ -11,28 +11,35 @@ if [ $# -lt 2 ] ; then echo "wrong # args" >&2 usage >&2 exit 1 fi tbl="$1"; shift; for db in $*; do set +e grep -wq "^$db" relatedTracks.ra &> /dev/null if [ $? -eq 0 ] then set -e - # enfore two lines per relationship: - uniqTables=$(comm -3 <(grep -w "^$db" relatedTracks.ra | cut -d' ' -f2 | sort) <(grep -w "^$db" relatedTracks.ra | cut -d' ' -f3 | sort) | wc -l) + # enfore two lines per relationship, skipping the '>' and '~' entries + # that state their own direction: + recip=$(grep -w "^$db" relatedTracks.ra | grep -v "^[^ ]* [>~]" || true) + uniqTables=$(comm -3 <(echo "$recip" | cut -d' ' -f2 | sort) <(echo "$recip" | cut -d' ' -f3 | sort) | wc -l) if [ $uniqTables -gt 0 ]; then printf "ERROR: mismatched primary and secondary related tracks for '%s'\n" "$db" - echo "Tracks:" $(comm -3 <(grep -w "^$db" relatedTracks.ra | cut -d' ' -f2 | sort) <(grep -w "^$db" relatedTracks.ra | cut -d' ' -f3 | sort)) + echo "Tracks:" $(comm -3 <(echo "$recip" | cut -d' ' -f2 | sort) <(echo "$recip" | cut -d' ' -f3 | sort)) exit 255 fi + # '>track1' is one way, so just drop the marker. '~track1' is bidirectional, + # so emit the line as written and again with the two tracks swapped. In that + # second expression \1 is track1, \2 is track2 and \3 is the reason text. grep -w "^$db" relatedTracks.ra | cut -d' ' -f2- \ + | sed -e 's/^>//' \ + -e 's/^~\([^ ]*\) \([^ ]*\) \(.*\)/\1 \2 \3\n\2 \1 \3/' \ | sed -e 's/ /\t/' -e 's/ /\t/' | sort -k1 -k2 \ | /cluster/bin/x86_64/hgLoadSqlTab "$db" "$tbl" ~/kent/src/hg/lib/relatedTrack.sql stdin printf "done building relatedTrack table for %s\n" "$db" fi done