Code

Added check to order of processed commits.
authorJesse Greenwald <jesse.greenwald@gmail.com>
Wed, 10 Nov 2010 04:18:36 +0000 (22:18 -0600)
committerAvery Pennarun <apenwarr@gmail.com>
Wed, 10 Nov 2010 05:20:48 +0000 (21:20 -0800)
With debug messages enabled, "incorrect order" will be output whenever a
commit is processed before its parents have been processed.  This can be
determined by checking to see if a parent isn't mapped to a new commit, but
it has been processed.

git-subtree.sh

index 390c0fc57499bb434eee4ac747119fb01f8d9d30..cf50de150cf4796eea87bfb6341bb3ddc1372535 100755 (executable)
@@ -138,6 +138,7 @@ cache_setup()
        cachedir="$GIT_DIR/subtree-cache/$$"
        rm -rf "$cachedir" || die "Can't delete old cachedir: $cachedir"
        mkdir -p "$cachedir" || die "Can't create new cachedir: $cachedir"
+       mkdir -p "$cachedir/notree" || die "Can't create new cachedir: $cachedir/notree"
        debug "Using cachedir: $cachedir" >&2
 }
 
@@ -151,6 +152,30 @@ cache_get()
        done
 }
 
+cache_miss()
+{
+       for oldrev in $*; do
+               if [ ! -r "$cachedir/$oldrev" ]; then
+                       echo $oldrev
+               fi
+       done
+}
+
+check_parents()
+{
+       missed=$(cache_miss $*)
+       for miss in $missed; do
+               if [ ! -r "$cachedir/notree/$miss" ]; then
+                       debug "  incorrect order: $miss"
+               fi
+       done
+}
+
+set_notree()
+{
+       echo "1" > "$cachedir/notree/$1"
+}
+
 cache_set()
 {
        oldrev="$1"
@@ -568,10 +593,13 @@ cmd_split()
                
                tree=$(subtree_for_commit $rev "$dir")
                debug "  tree is: $tree"
+
+               check_parents $parents
                
                # ugly.  is there no better way to tell if this is a subtree
                # vs. a mainline commit?  Does it matter?
                if [ -z $tree ]; then
+                       set_notree $rev
                        if [ -n "$newparents" ]; then
                                cache_set $rev $rev
                        fi