update.sh: correct .refs-before and .refs-after sort order
authorKyle J. McKay <mackyle@gmail.com>
Fri, 12 Jul 2013 17:05:01 +0000 (12 10:05 -0700)
committerKyle J. McKay <mackyle@gmail.com>
Fri, 12 Jul 2013 17:05:01 +0000 (12 10:05 -0700)
Using join requires the input to be in "sort -k1b,1" order.  In
some cases the output of "git for-each-ref %(refname) %(objectname)"
is not in the correct order.

Pipe the output through "sort -k1b,1" when creating .refs-before
and .refs-after to avoid this problem.

jobd/update.sh

index 32fee92..9219050 100755 (executable)
@@ -2,6 +2,9 @@
 
 . @basedir@/shlib.sh
 
+LC_ALL=C
+export LC_ALL
+
 # date -R is linux-only, POSIX equivalent is '+%a, %d %b %Y %T %z'
 datefmt='+%a, %d %b %Y %T %z'
 
@@ -47,7 +50,7 @@ mailaddrs=''
 [ -z "$cfg_admincc" -o "$cfg_admincc" = "0" -o -z "$cfg_admin" ] ||
 if [ -z "$mailaddrs" ]; then mailaddrs="$cfg_admin"; else mailaddrs="$mailaddrs,$cfg_admin"; fi
 
-show_progress=1 bang git for-each-ref --format '%(refname)     %(objectname)' >.refs-before
+show_progress=1 bang git for-each-ref --format '%(refname)     %(objectname)' | sort -k1b,1 >.refs-before
 
 case "$url" in
        svn://* | svn+http://* | svn+https://*)
@@ -93,7 +96,7 @@ bang git update-server-info
 bang config_set lastrefresh "$(date "$datefmt")"
 
 # Look at which refs changed and trigger ref-change for these
-show_progress=1 bang git for-each-ref --format '%(refname)     %(objectname)' >.refs-after
+show_progress=1 bang git for-each-ref --format '%(refname)     %(objectname)' | sort -k1b,1 >.refs-after
 sockpath="$cfg_chroot/etc/taskd.socket"
 if [ -S "$sockpath" ] && ! cmp -s .refs-before .refs-after; then
        join -j 1 .refs-before .refs-after |