cec595b267a0dae66dab498417df29b3bb8b60d0
braney
  Wed Sep 2 10:21:29 2026 -0700
trackDb: rsync to the destination string as it stands, refs #35489 #38211

Code review noted that "${dest%%:*}:${dest#*:}/" is hard to read.  It is also
a no-op.  It takes the machine:path string apart at the first colon and puts
it back together with a colon, which is the same string as "$dest/".

diff --git src/hg/makeDb/trackDb/buildTrix src/hg/makeDb/trackDb/buildTrix
index 3fb75ece067..acd2e9c416f 100755
--- src/hg/makeDb/trackDb/buildTrix
+++ src/hg/makeDb/trackDb/buildTrix
@@ -1,80 +1,80 @@
 #!/bin/bash -e
 usage='buildTrix [options] trixName metaDbName path_to_cv.ra outputMachine outputPath ${DBS}
 
 options:
    -alsoTo=machine:path -- copy the same files to another machine and path as well.
                            May be given more than once.  Using this instead of a second
                            invocation avoids rebuilding the index from scratch.'
 
 dests=()
 while [[ $1 == -* ]] ; do
     case $1 in
         -alsoTo=*)
             dests+=("${1#-alsoTo=}") ;;
         *)
             echo "invalid option: $1" >&2
             exit 1 ;;
     esac
     shift
 done
 
 if [ $# -lt 6 ] ; then
     echo "wrong # args: $usage" >&2
     exit 1
 fi
 
 trixName="$1"; shift
 metaDbName="$1" ; shift
 cvRaPath="$1" ; shift
 outMachine="$1" ; shift
 outPath="$1" ; shift
 dbs="$@"
 
 dests=("$outMachine:$outPath" "${dests[@]}")
 
 # check if a database exists, print note and return non-zero if it doesn't
 dbExists() {
     local db="$1"
     local dbChk=$(/cluster/bin/x86_64/hgsql -Ne 'show databases like "'$db'"')
     if [ -z "$dbChk" ] ; then
         echo "Note: database $db does not exist, skipping"
         return 1
     else
         return 0
     fi
 }
 
 buildDbTrix() {
     local db="$1"
     local trixName="$2"
     local metaDbName="$3"
     local cvRaPath="$4"
     # Build into a temporary directory using the final file names, so that each
     # destination takes one rsync instead of one per file.  That is five fewer ssh
     # connections per destination, which matters when this make runs in parallel.
     local tmpDir=`mktemp -d`;
     local base="$tmpDir/${db}_${trixName}"
     /cluster/bin/x86_64/makeTrackIndex $db $metaDbName $cvRaPath > $base.txt;
     if test -s $base.txt; then
         /cluster/bin/x86_64/ixIxx -maxWordLength=64 $base.txt $base.ix $base.ixx
         # trixContextIndex makes the $db_$trixName.offsets and $db_$trixName.offsets.ixx files:
         /cluster/bin/x86_64/trixContextIndex $base.txt $base
         chmod 664 $base.txt $base.ix $base.ixx $base.offsets $base.offsets.ixx
         # the .txt, .offsets and .offsets.ixx files are for snippets on search pages:
         # Name the files explicitly rather than rsyncing $tmpDir/ itself.  With a
         # directory as the source, rsync also applies -a to the destination
         # directory, and setting its times fails unless we own it.
         local dest
         for dest in "${dests[@]}"; do
             rsync -a $base.txt $base.ix $base.ixx $base.offsets $base.offsets.ixx \
-                "${dest%%:*}:${dest#*:}/"
+                "$dest/"
         done
     fi
     rm -rf $tmpDir
 }
 
 for db in $dbs ; do
     if dbExists $db ; then
         buildDbTrix $db $trixName $metaDbName $cvRaPath
     fi
 done