042acb30f02d050444afd846b3f026eb33c99ab1
max
  Wed Sep 9 08:38:02 2026 -0700
varChat otto: don't blank the track's version file when the fetch fails

/gbdb/hg38/bbi/varChatVersion.txt symlinks straight to
/hive/data/outside/otto/varChat/version.txt, so the browser reads that file
directly, and wget truncates its -O target before it has anything to write there.
A failed or partial fetch therefore left the track showing an empty version. By
that point the run has already done "mv varChat.hg38.latest.bb varChat.hg38.bb",
so the new data is live and only the version string is gone, and set -e aborting
afterwards does not undo it. VarChat only updates when upstream changes, and
upstream has been on v1.1 - 2025-11-07 for ten months, so a blank could sit there
that long.

Fetch to version.new.txt, require it to be non-empty, and only then move it into
place, keeping the old string with a warning otherwise. Same shape as
mitoMap/checkMitoMapUpdate.sh, which already does this.

Checked all three paths: the real upstream URL updates the file and leaves no temp
behind, an unreachable URL and a URL returning an empty body both keep the
previous string and warn. For contrast, the old one-liner against an unreachable
URL truncated version.txt to zero bytes.

Found while sweeping the otto updaters for the version-stamping problem behind
the uniprot outage. refs #38300

diff --git src/hg/utils/otto/varChat/varChatOtto.sh src/hg/utils/otto/varChat/varChatOtto.sh
index b8b3092825b..6d9e1b0db72 100755
--- src/hg/utils/otto/varChat/varChatOtto.sh
+++ src/hg/utils/otto/varChat/varChatOtto.sh
@@ -33,22 +33,33 @@
 absDiffHg19=$(echo "$diffHg19" | sed 's/-//')
 
 # Check if the absolute difference is greater than 20%
 if (( $(echo "$absDiffHg38 > 20" | bc -l) || $(echo "$absDiffHg19 > 20" | bc -l) )); then
     echo
     echo "Error: Difference in item count exceeds 20%."
     echo "Difference in hg38: $diffHg38%"
     echo "Difference in hg19: $diffHg19%"
     exit 1
 fi
 
 # If the difference is within the 20%, proceed
 mv varChat.hg38.latest.bb varChat.hg38.bb
 mv varChat.hg19.latest.bb varChat.hg19.bb
 
-wget -q https://ucsc-engenome-varchat.s3.eu-west-1.amazonaws.com/latest/version.txt -O version.txt
+# /gbdb/hg38/bbi/varChatVersion.txt symlinks straight to this file, so the browser reads
+# it directly, and wget truncates its -O target before it has anything to put there. Fetch
+# to a temp file and only replace the live one if something actually arrived: the bigBeds
+# above are already live by this point, so a failed fetch would otherwise leave the track
+# showing a blank version until the next upstream release, which can be many months away.
+# refs #38300
+if wget -q https://ucsc-engenome-varchat.s3.eu-west-1.amazonaws.com/latest/version.txt -O version.new.txt && [ -s version.new.txt ]; then
+    mv version.new.txt version.txt
+else
+    rm -f version.new.txt
+    echo "Warning: could not fetch the VarChat version file, keeping $(cat version.txt 2>/dev/null)"
+fi
 
 echo
 echo "Item counts for hg38 old vs. new bigBed. Old: $oldCountHg38 New: $newCountHg38"
 echo "Item counts for hg19 old vs. new bigBed. Old: $oldCountHg19 New: $newCountHg19"
 echo
 echo "VarChat track built successfully."