Re: [PATCH] filter-branch: add passed/remaining seconds on progress
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Sep 7, 2015, 20:54 UTC
- Message-ID
- <CAPig+cRRMUhWwxAgVHKpMMne7XiOuYGTi_zgQMB=A+XNGUzLqQ@mail.gmail.com>
- In-Reply-To
- <1441633928-18035-1-git-send-email-bernat@primeranks.net>
On Mon, Sep 7, 2015 at 9:52 AM, Gábor Bernát <bernat@primeranks.net> wrote:
Show 19 quoted lines
> From: Gabor Bernat <gabor.bernat@gravityrd.com>
>
> 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>
> ---
> diff --git a/git-filter-branch.sh b/git-filter-branch.sh
> index 5b3f63d..565144a 100755
> --- a/git-filter-branch.sh
> +++ b/git-filter-branch.sh
> @@ -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"
> +thenIndent code within the function...
Show 15 quoted lines
> + if 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 > +fi > +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? While it's true that elapsed seconds will increase, estimated seconds may jump around, requiring different numbers of digits to display. This may leave "garbage" digits at the end of line from previous iterations, can't it?
Show 22 quoted lines
> +} > > 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 > "") > -- > 2.6.0.rc0.3.gb3280a4