t9108-git-svn-glob.sh: use the $( ... ) construct for command substitution
[gitweb.git] / git-filter-branch.sh
index b7bad160061177dac9230d6dcbb8dde3fcfb6aaa..98f1779cf3241fa12300fbf3dc0c4eff8ab10b61 100755 (executable)
@@ -280,18 +280,20 @@ report_progress ()
        if test -n "$progress" &&
                test $git_filter_branch__commit_count -gt $next_sample_at
        then
-               now_timestamp=$(date +%s)
-               elapsed_seconds=$(($now_timestamp - $start_timestamp))
-               remaining_second=$(( ($commits - $git_filter_branch__commit_count) * $elapsed_seconds / $git_filter_branch__commit_count ))
-               if test $elapsed_seconds -gt 0
+               count=$git_filter_branch__commit_count
+
+               now=$(date +%s)
+               elapsed=$(($now - $start_timestamp))
+               remaining=$(( ($commits - $count) * $elapsed / $count ))
+               if test $elapsed -gt 0
                then
-                       next_sample_at=$(( ($elapsed_seconds + 1) * $git_filter_branch__commit_count / $elapsed_seconds ))
+                       next_sample_at=$(( ($elapsed + 1) * $count / $elapsed ))
                else
                        next_sample_at=$(($next_sample_at + 1))
                fi
-               progress=" ($elapsed_seconds seconds passed, remaining $remaining_second predicted)"
+               progress=" ($elapsed seconds passed, remaining $remaining predicted)"
        fi
-       printf "\rRewrite $commit ($git_filter_branch__commit_count/$commits)$progress    "
+       printf "\rRewrite $commit ($count/$commits)$progress    "
 }
 
 git_filter_branch__commit_count=0
@@ -304,6 +306,15 @@ then
        start_timestamp=$(date '+%s')
 fi
 
+if test -n "$filter_index" ||
+   test -n "$filter_tree" ||
+   test -n "$filter_subdir"
+then
+       need_index=t
+else
+       need_index=
+fi
+
 while read commit parents; do
        git_filter_branch__commit_count=$(($git_filter_branch__commit_count+1))
 
@@ -311,7 +322,10 @@ while read commit parents; do
 
        case "$filter_subdir" in
        "")
-               GIT_ALLOW_NULL_SHA1=1 git read-tree -i -m $commit
+               if test -n "$need_index"
+               then
+                       GIT_ALLOW_NULL_SHA1=1 git read-tree -i -m $commit
+               fi
                ;;
        *)
                # The commit may not have the subdirectory at all
@@ -347,7 +361,7 @@ while read commit parents; do
                        die "tree filter failed: $filter_tree"
 
                (
-                       git diff-index -r --name-only --ignore-submodules $commit &&
+                       git diff-index -r --name-only --ignore-submodules $commit -- &&
                        git ls-files --others
                ) > "$tempdir"/tree-state || exit
                git update-index --add --replace --remove --stdin \
@@ -375,7 +389,7 @@ while read commit parents; do
        fi
 
        {
-               while read -r header_line && test -n "$header_line"
+               while IFS='' read -r header_line && test -n "$header_line"
                do
                        # skip header lines...
                        :;
@@ -385,8 +399,15 @@ while read commit parents; do
        } <../commit |
                eval "$filter_msg" > ../message ||
                        die "msg filter failed: $filter_msg"
+
+       if test -n "$need_index"
+       then
+               tree=$(git write-tree)
+       else
+               tree="$commit^{tree}"
+       fi
        workdir=$workdir @SHELL_PATH@ -c "$filter_commit" "git commit-tree" \
-               $(git write-tree) $parentstr < ../message > ../map/$commit ||
+               "$tree" $parentstr < ../message > ../map/$commit ||
                        die "could not write rewritten commit"
 done <../revs