Merge branch 'ah/maint-grep-double-init' into maint
[gitweb.git] / contrib / diffall / git-diffall
index d706a6dee32839007f8fcfb32794b51a1e59765a..84f2b654d755cf4b55beb959491b46728f3c59b6 100755 (executable)
@@ -45,14 +45,11 @@ cd "$cdup" || {
        exit 1
 }
 
-# mktemp is not available on all platforms (missing from msysgit)
-# Use a hard-coded tmp dir if it is not available
-tmp="$(mktemp -d -t tmp.XXXXXX 2>/dev/null)" || {
-       tmp=/tmp/git-diffall-tmp.$$
-       mkdir "$tmp" || exit 1
-}
-
-trap 'rm -rf "$tmp" 2>/dev/null' EXIT
+# set up temp dir
+tmp=$(perl -e 'use File::Temp qw(tempdir);
+       $t=tempdir("/tmp/git-diffall.XXXXX") or exit(1);
+       print $t') || exit 1
+trap 'rm -rf "$tmp"' EXIT
 
 left=
 right=
@@ -182,34 +179,32 @@ fi
 mkdir -p "$tmp/$left_dir" "$tmp/$right_dir"
 
 # Populate the tmp/right_dir directory with the files to be compared
-if test -n "$right"
-then
-       while read name
-       do
+while read name
+do
+       if test -n "$right"
+       then
                ls_list=$(git ls-tree $right "$name")
                if test -n "$ls_list"
                then
                        mkdir -p "$tmp/$right_dir/$(dirname "$name")"
                        git show "$right":"$name" >"$tmp/$right_dir/$name" || true
                fi
-       done < "$tmp/filelist"
-elif test -n "$compare_staged"
-then
-       while read name
-       do
+       elif test -n "$compare_staged"
+       then
                ls_list=$(git ls-files -- "$name")
                if test -n "$ls_list"
                then
                        mkdir -p "$tmp/$right_dir/$(dirname "$name")"
                        git show :"$name" >"$tmp/$right_dir/$name"
                fi
-       done < "$tmp/filelist"
-else
-       # Mac users have gnutar rather than tar
-       (tar --ignore-failed-read -c -T "$tmp/filelist" | (cd "$tmp/$right_dir" && tar -x)) || {
-               gnutar --ignore-failed-read -c -T "$tmp/filelist" | (cd "$tmp/$right_dir" && gnutar -x)
-       }
-fi
+       else
+               if test -e "$name"
+               then
+                       mkdir -p "$tmp/$right_dir/$(dirname "$name")"
+                       cp "$name" "$tmp/$right_dir/$name"
+               fi
+       fi
+done < "$tmp/filelist"
 
 # Populate the tmp/left_dir directory with the files to be compared
 while read name
@@ -238,9 +233,8 @@ do
        fi
 done < "$tmp/filelist"
 
-cd "$tmp"
-LOCAL="$left_dir"
-REMOTE="$right_dir"
+LOCAL="$tmp/$left_dir"
+REMOTE="$tmp/$right_dir"
 
 if test -n "$diff_tool"
 then