Sixth batch for 2.7
[gitweb.git] / git-filter-branch.sh
index 5b3f63d8bbc65e80d1f4278e1ec6e27df604dc9a..27c9c54fbd24ef3a2995fd90b04911e5a1d8aed9 100755 (executable)
@@ -275,11 +275,41 @@ commits=$(wc -l <../revs | tr -d " ")
 test $commits -eq 0 && die "Found nothing to rewrite"
 
 # Rewrite the commits
+report_progress ()
+{
+       if test -n "$progress" &&
+               test $git_filter_branch__commit_count -gt $next_sample_at
+       then
+               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 + 1) * $count / $elapsed ))
+               else
+                       next_sample_at=$(($next_sample_at + 1))
+               fi
+               progress=" ($elapsed seconds passed, remaining $remaining predicted)"
+       fi
+       printf "\rRewrite $commit ($count/$commits)$progress    "
+}
 
 git_filter_branch__commit_count=0
+
+progress= start_timestamp=
+if date '+%s' 2>/dev/null | grep -q '^[0-9][0-9]*$'
+then
+       next_sample_at=0
+       progress="dummy to ensure this is not empty"
+       start_timestamp=$(date '+%s')
+fi
+
 while read commit parents; do
        git_filter_branch__commit_count=$(($git_filter_branch__commit_count+1))
-       printf "\rRewrite $commit ($git_filter_branch__commit_count/$commits)"
+
+       report_progress
 
        case "$filter_subdir" in
        "")
@@ -347,7 +377,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...
                        :;