filter-branch: add passed/remaining seconds on progress
authorGabor Bernat <gabor.bernat@gravityrd.com>
Mon, 7 Sep 2015 13:52:08 +0000 (15:52 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 21 Sep 2015 22:19:06 +0000 (15:19 -0700)
adds seconds progress and estimated seconds time if getting the current
timestamp is supported by the date +%s command

Signed-off-by: Gabor Bernat <gabor.bernat@gravityrd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-filter-branch.sh
index 5b3f63d8bbc65e80d1f4278e1ec6e27df604dc9a..b7bad160061177dac9230d6dcbb8dde3fcfb6aaa 100755 (executable)
@@ -275,11 +275,39 @@ 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
+               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
+               then
+                       next_sample_at=$(( ($elapsed_seconds + 1) * $git_filter_branch__commit_count / $elapsed_seconds ))
+               else
+                       next_sample_at=$(($next_sample_at + 1))
+               fi
+               progress=" ($elapsed_seconds seconds passed, remaining $remaining_second predicted)"
+       fi
+       printf "\rRewrite $commit ($git_filter_branch__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
        "")