Re: [PATCH] filter-branch: add passed/remaining seconds on progress
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Sep 8, 2015, 17:32 UTC
- Message-ID
- <xmqqsi6o95r7.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <CAPig+cRRMUhWwxAgVHKpMMne7XiOuYGTi_zgQMB=A+XNGUzLqQ@mail.gmail.com>
Eric Sunshine <sunshine@sunshineco.com> writes:
Show 9 quoted lines
> On Mon, Sep 7, 2015 at 9:52 AM, Gábor Bernát <bernat@primeranks.net> wrote:
>...
>> # Rewrite the commits
>> +report_progress ()
>> +{
>> +if test -n "$progress"
>> +then
>
> Indent code within the function...Also git_filter_branch__commit_count is now used only inside this function, so it is easier to follow to increment it here.
I suspect that the variable has this unwieldy name for historic reasons, perhaps an attempt to avoid name clashes with the end user script, but it has many variables (e.g. $commits, $ref, etc.) that are way too generic and that I can see no attempt of name clash avoidance, so renaming it to $total_commits or something _might_ make some sense.
Show 8 quoted lines
> ... >> +printf "\rRewrite $commit ($git_filter_branch__commit_count/$commits)$progress" > > The "\r" causes this status line to be overwritten each time through, > and since the processed commit count always increases, we know that > the original (without ETA) will never leave junk at the end of the > line. However, with estimated seconds also being displayed, does this > still hold?
Good point.
Perhaps like this squashed in?
git-filter-branch.sh | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh index 565144a..30ef513 100755 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh @@ -277,27 +277,28 @@ test $commits -eq 0 && die "Found nothing to rewrite" # Rewrite the commits report_progress () { -if test -n "$progress" -then - if test $git_filter_branch__commit_count -gt $next_sample_at + git_filter_branch__commit_count=$(($git_filter_branch__commit_count+1)) + + if test -n "$progress" 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 + if test "$git_filter_branch__commit_count" -gt "$next_sample_at" then - next_sample_at=$(( ($elapsed_seconds + 1) * $git_filter_branch__commit_count / $elapsed_seconds )) - else - next_sample_at=$(($next_sample_at + 1)) + 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 - progress=" ($elapsed_seconds seconds passed, remaining $remaining_second predicted)" fi -fi -printf "\rRewrite $commit ($git_filter_branch__commit_count/$commits)$progress" + 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 @@ -306,9 +307,8 @@ then start_timestamp=$(date '+%s') fi -while read commit parents; do - git_filter_branch__commit_count=$(($git_filter_branch__commit_count+1)) - +while read commit parents +do report_progress case "$filter_subdir" in