Gábor Bernát <[email protected]> writes:
> +if date '+%s' 2>/dev/null | grep -q '^[0-9][0-9]*$'
> +then
> + show_seconds=t
> +else
> + show_seconds=
> +fi
> +
> +case "$show_seconds" in
> +t)
> + start_timestamp=$(date +%s)
> + next_sample_at=0
> + ;;
> +'')
> + progress=""
> + ;;
> +esac
Why the case statement here?
For that matter, you probably do not need $show_seconds and use the
fact that start_timestamp and progress are only set to a non-empty
string when we measure progress, i.e. making all of the above
something more like this:
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
If you are more efficiency-minded, I think you could even do with a
single call to /bin/date, perhaps like so:
next_sample_at= progress=
start_timestamp=$(date '+%s' 2>/dev/null)
case "$start_timestamp" in
*[!0-9]* | "")
# not a "digit only" output
;;
?*)
progress="dummy to ensure this is not empty"
next_sample_at=0
;;
esac
but I suspect that may be going a bit too far ;-).
> 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)"
> +
> + case "$show_seconds" in
> + t)
> + 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
> + ;;
> + '')
> + progress=""
> + ;;
> + esac
> +
> + printf "\rRewrite $commit
> ($git_filter_branch__commit_count/$commits)$progress"
>
> case "$filter_subdir" in
> "")
It would be easier to follow the logic of this loop whose _primary_
point is to rewrite one commit if you moved this part into a helper
function. As written above, the deeply nested case statement whose
purpose is only to show the progress is very distracting.
Then the loop would read like:
while read commit parents
do
: $(( $git_filter_branch__commit_count++ ))
report_progress
case "$filter_subdir" in
...
# all the work that is about rewriting this commit
# comes here.
done
which would be much less noisy and helpful to people who are
interested in learning what it is doing.
As I said earlier in this message, the report_progress helper
function can use the fact that $progress or $start_timestamp are
non-empty if and only if you need to compute and tack $progress at
the end of the output, i.e.
report_progress ()
{
if test -n "$progress"
then
... do rate computation here ...
progress=" ($elapsed_seconds seconds passed,..."
fi
printf "\rRewrite $commit (...)$progress"
}
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html