zsh-workers
 help / color / mirror / code / Atom feed
* [PATCH] Improve vcs_info example for ahead/behind git commits
@ 2021-03-28 21:36 Tim Lee
  2021-03-29  7:06 ` Daniel Shahaf
  0 siblings, 1 reply; 12+ messages in thread
From: Tim Lee @ 2021-03-28 21:36 UTC (permalink / raw)
  To: zsh-workers

This patch improves the example hook that shows +N/-N when the
local git branch is ahead-of or behind the remote HEAD.

Improvements:

* Use git-rev-list's `--count` option instead of piping to `wc -l`.
  `--count` has been available since git 1.7.2
  (https://github.com/git/git/commit/f69c501832ecd6880602c55565508e70c3a013d5)
* Remove unnecessary use of `${hook_com[branch]}` because `@{upstream}`
  defaults to the current branch when no branch name is provided.
  `@{upstream}` was introduced in git 1.7.0
  (https://github.com/git/git/commit/28fb84382b0eb728534dbe2972bbfec3f3d83dd9)


diff --git a/Misc/vcs_info-examples b/Misc/vcs_info-examples
index 94b8a7b5e..36d4d3bf8 100644
--- a/Misc/vcs_info-examples
+++ b/Misc/vcs_info-examples
@@ -179,14 +179,18 @@ function +vi-git-st() {
     local ahead behind
     local -a gitstatus

-    # for git prior to 1.7
+    # for git prior to 1.7.0
     # ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
-    ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l)
+    # for git 1.7.0 and 1.7.1
+    # ahead=$(git rev-list @{upstream}..HEAD 2>/dev/null | wc -l)
+    ahead=$(git rev-list --count @{upstream}..HEAD 2>/dev/null)
     (( $ahead )) && gitstatus+=( "+${ahead}" )

-    # for git prior to 1.7
+    # for git prior to 1.7.0
     # behind=$(git rev-list HEAD..origin/${hook_com[branch]} | wc -l)
-    behind=$(git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l)
+    # for git 1.7.0 and 1.7.1
+    # behind=$(git rev-list HEAD..@{upstream} 2>/dev/null | wc -l)
+    behind=$(git rev-list --count HEAD..@{upstream} 2>/dev/null)
     (( $behind )) && gitstatus+=( "-${behind}" )

     hook_com[misc]+=${(j:/:)gitstatus}


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] Improve vcs_info example for ahead/behind git commits
  2021-03-28 21:36 [PATCH] Improve vcs_info example for ahead/behind git commits Tim Lee
@ 2021-03-29  7:06 ` Daniel Shahaf
  2021-03-29  9:30   ` Tim Lee
  0 siblings, 1 reply; 12+ messages in thread
From: Daniel Shahaf @ 2021-03-29  7:06 UTC (permalink / raw)
  To: Tim Lee; +Cc: zsh-workers

Tim Lee wrote on Mon, Mar 29, 2021 at 05:36:28 +0800:
> This patch improves the example hook that shows +N/-N when the
> local git branch is ahead-of or behind the remote HEAD.

Thanks.  Review:

> Improvements:
> 
> * Use git-rev-list's `--count` option instead of piping to `wc -l`.
>   `--count` has been available since git 1.7.2
>   (https://github.com/git/git/commit/f69c501832ecd6880602c55565508e70c3a013d5)

Sure.

> * Remove unnecessary use of `${hook_com[branch]}` because `@{upstream}`
>   defaults to the current branch when no branch name is provided.
>   `@{upstream}` was introduced in git 1.7.0
>   (https://github.com/git/git/commit/28fb84382b0eb728534dbe2972bbfec3f3d83dd9)

I'm not sure that's unnecessary, for two reasons:

1. hook_com[branch], as opposed to hook_com[branch_orig], may have been
changed by a previous hook.

2. There may be educational value to demonstrating a use of
hook_com[branch], even if it's implied.

WDYT?

> 
> diff --git a/Misc/vcs_info-examples b/Misc/vcs_info-examples
> index 94b8a7b5e..36d4d3bf8 100644
> --- a/Misc/vcs_info-examples
> +++ b/Misc/vcs_info-examples
> @@ -179,14 +179,18 @@ function +vi-git-st() {
>      local ahead behind
>      local -a gitstatus
> 
> -    # for git prior to 1.7
> +    # for git prior to 1.7.0
>      # ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
> -    ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l)
> +    # for git 1.7.0 and 1.7.1
> +    # ahead=$(git rev-list @{upstream}..HEAD 2>/dev/null | wc -l)
> +    ahead=$(git rev-list --count @{upstream}..HEAD 2>/dev/null)
>      (( $ahead )) && gitstatus+=( "+${ahead}" )

The version of this function in my zshrc starts like this:
.
    git rev-parse @{upstream} >/dev/null 2>&1 || return 0
    local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} ) )

The first line is to handle a detached HEAD, I think, and should
presumably be added?

The second line saves a fork(), which is valuable on some platforms.

(I actually posted my function in users/21810, but didn't notice these
two issues back then.  Daniel Hahler posted his version too in
users/21813.)

Other than that, the patch LGTM.  Personally I might not have bothered
to add instructions for a 2010-vintage Git in 2021, though.

Cheers,

Daniel

> -    # for git prior to 1.7
> +    # for git prior to 1.7.0
>      # behind=$(git rev-list HEAD..origin/${hook_com[branch]} | wc -l)
> -    behind=$(git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l)
> +    # for git 1.7.0 and 1.7.1
> +    # behind=$(git rev-list HEAD..@{upstream} 2>/dev/null | wc -l)
> +    behind=$(git rev-list --count HEAD..@{upstream} 2>/dev/null)
>      (( $behind )) && gitstatus+=( "-${behind}" )
> 
>      hook_com[misc]+=${(j:/:)gitstatus}
> 


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] Improve vcs_info example for ahead/behind git commits
  2021-03-29  7:06 ` Daniel Shahaf
@ 2021-03-29  9:30   ` Tim Lee
  2021-03-29  9:52     ` Daniel Shahaf
  0 siblings, 1 reply; 12+ messages in thread
From: Tim Lee @ 2021-03-29  9:30 UTC (permalink / raw)
  To: Daniel Shahaf; +Cc: zsh-workers

> > * Remove unnecessary use of `${hook_com[branch]}` because `@{upstream}`
> >   defaults to the current branch when no branch name is provided.
> >   `@{upstream}` was introduced in git 1.7.0
> >   (https://github.com/git/git/commit/28fb84382b0eb728534dbe2972bbfec3f3d83dd9)
> 
> I'm not sure that's unnecessary, for two reasons:
> 
> 1. hook_com[branch], as opposed to hook_com[branch_orig], may have been
> changed by a previous hook.
> 
> 2. There may be educational value to demonstrating a use of
> hook_com[branch], even if it's implied.
> 
> WDYT?

Okay. I was not aware of these reasons. I am still very much a beginner
(both to zsh and to mailing lists ...).

> > diff --git a/Misc/vcs_info-examples b/Misc/vcs_info-examples
> > index 94b8a7b5e..36d4d3bf8 100644
> > --- a/Misc/vcs_info-examples
> > +++ b/Misc/vcs_info-examples
> > @@ -179,14 +179,18 @@ function +vi-git-st() {
> >      local ahead behind
> >      local -a gitstatus
> > 
> > -    # for git prior to 1.7
> > +    # for git prior to 1.7.0
> >      # ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
> > -    ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l)
> > +    # for git 1.7.0 and 1.7.1
> > +    # ahead=$(git rev-list @{upstream}..HEAD 2>/dev/null | wc -l)
> > +    ahead=$(git rev-list --count @{upstream}..HEAD 2>/dev/null)
> >      (( $ahead )) && gitstatus+=( "+${ahead}" )
> 
> The version of this function in my zshrc starts like this:
> .
>     git rev-parse @{upstream} >/dev/null 2>&1 || return 0
>     local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} ) )

The snippet below displays N/M. How would you make it display +N/-M
instead?

    git rev-parse @{upstream} >/dev/null 2>&1 || return 0
    local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} ) )
    hook_com[misc]="${(j:/:)x}"

> The first line is to handle a detached HEAD, I think, and should
> presumably be added?

Why not do this instead:

    local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} 2>/dev/null ) )


---
Note: when replying to my email, please ensure that my email address is
included in the 'To:' field, since I am not subscribed to the mailing
list.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] Improve vcs_info example for ahead/behind git commits
  2021-03-29  9:30   ` Tim Lee
@ 2021-03-29  9:52     ` Daniel Shahaf
  2021-03-29 10:39       ` Tim Lee
  2021-03-29 15:20       ` Lawrence Velázquez
  0 siblings, 2 replies; 12+ messages in thread
From: Daniel Shahaf @ 2021-03-29  9:52 UTC (permalink / raw)
  To: Tim Lee; +Cc: zsh-workers

Tim Lee wrote on Mon, 29 Mar 2021 09:30 +00:00:
> > > * Remove unnecessary use of `${hook_com[branch]}` because `@{upstream}`
> > >   defaults to the current branch when no branch name is provided.
> > >   `@{upstream}` was introduced in git 1.7.0
> > >   (https://github.com/git/git/commit/28fb84382b0eb728534dbe2972bbfec3f3d83dd9)
> > 
> > I'm not sure that's unnecessary, for two reasons:
> > 
> > 1. hook_com[branch], as opposed to hook_com[branch_orig], may have been
> > changed by a previous hook.
> > 
> > 2. There may be educational value to demonstrating a use of
> > hook_com[branch], even if it's implied.
> > 
> > WDYT?
> 
> Okay. I was not aware of these reasons. I am still very much a beginner
> (both to zsh and to mailing lists ...).
> 

I couldn't tell that from your original mail ☺

> > > diff --git a/Misc/vcs_info-examples b/Misc/vcs_info-examples
> > > index 94b8a7b5e..36d4d3bf8 100644
> > > --- a/Misc/vcs_info-examples
> > > +++ b/Misc/vcs_info-examples
> > > @@ -179,14 +179,18 @@ function +vi-git-st() {
> > >      local ahead behind
> > >      local -a gitstatus
> > > 
> > > -    # for git prior to 1.7
> > > +    # for git prior to 1.7.0
> > >      # ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
> > > -    ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l)
> > > +    # for git 1.7.0 and 1.7.1
> > > +    # ahead=$(git rev-list @{upstream}..HEAD 2>/dev/null | wc -l)
> > > +    ahead=$(git rev-list --count @{upstream}..HEAD 2>/dev/null)
> > >      (( $ahead )) && gitstatus+=( "+${ahead}" )
> > 
> > The version of this function in my zshrc starts like this:
> > .
> >     git rev-parse @{upstream} >/dev/null 2>&1 || return 0
> >     local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} ) )
> 
> The snippet below displays N/M. How would you make it display +N/-M
> instead?

Change the last line to hook_com[misc]="+${x[1]} -${x[2]}".

>     git rev-parse @{upstream} >/dev/null 2>&1 || return 0
>     local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} ) )
>     hook_com[misc]="${(j:/:)x}"
> 
> > The first line is to handle a detached HEAD, I think, and should
> > presumably be added?
> 
> Why not do this instead:
> 
>     local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} 2>/dev/null ) )

You mean, why not discard stderr?  Out of general principles ("Errors
shouldn't be silenced"), plus the fact that I've never had that line
generate an error that needed to be silenced — not with the «git
rev-parse … || return» right above it.

Or do you mean that line instead of the git-rev-parse(1) call too?
First, that would run the rest of the function even though $x might be
an empty array rather than a two-element one.  Two, suppose there is an
error after resolving «@{upstream}» to a commit but before rev-list
finishes (for instance, an error while walking the commits history).
With an explicit git-rev-parse(1) call that error would be reported, but
if the rev-parse and the history walking are lumped into one step any
failure from which is treated the same way, history walking failures
would be masked — even though they're probably interesting.

> ---
> Note: when replying to my email, please ensure that my email address is
> included in the 'To:' field, since I am not subscribed to the mailing
> list.

Ack, but for future reference, the customary signature delimiter is "-- "
(ASCII 0x2D 0x2D 0x20).  Many MUAs syntax-highlight that, for example.

Cheers,

Daniel


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] Improve vcs_info example for ahead/behind git commits
  2021-03-29  9:52     ` Daniel Shahaf
@ 2021-03-29 10:39       ` Tim Lee
  2021-03-29 11:50         ` Daniel Shahaf
  2021-03-29 15:20       ` Lawrence Velázquez
  1 sibling, 1 reply; 12+ messages in thread
From: Tim Lee @ 2021-03-29 10:39 UTC (permalink / raw)
  To: Daniel Shahaf; +Cc: zsh-workers

> > > > diff --git a/Misc/vcs_info-examples b/Misc/vcs_info-examples
> > > > index 94b8a7b5e..36d4d3bf8 100644
> > > > --- a/Misc/vcs_info-examples
> > > > +++ b/Misc/vcs_info-examples
> > > > @@ -179,14 +179,18 @@ function +vi-git-st() {
> > > >      local ahead behind
> > > >      local -a gitstatus
> > > > 
> > > > -    # for git prior to 1.7
> > > > +    # for git prior to 1.7.0
> > > >      # ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
> > > > -    ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l)
> > > > +    # for git 1.7.0 and 1.7.1
> > > > +    # ahead=$(git rev-list @{upstream}..HEAD 2>/dev/null | wc -l)
> > > > +    ahead=$(git rev-list --count @{upstream}..HEAD 2>/dev/null)
> > > >      (( $ahead )) && gitstatus+=( "+${ahead}" )
> > > 
> > > The version of this function in my zshrc starts like this:
> > > .
> > >     git rev-parse @{upstream} >/dev/null 2>&1 || return 0
> > >     local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} ) )
> > 
> > The snippet below displays N/M. How would you make it display +N/-M
> > instead?
> 
> Change the last line to hook_com[misc]="+${x[1]} -${x[2]}".

But hook_com[misc]="+${x[1]} -${x[2]}" would display a '+0' and/or '-0'
when the local git branch is not ahead-of or behind the remote branch.

The existing example does not display '+0' or '-0'.

> >     git rev-parse @{upstream} >/dev/null 2>&1 || return 0
> >     local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} ) )
> >     hook_com[misc]="${(j:/:)x}"
> > 
> > > The first line is to handle a detached HEAD, I think, and should
> > > presumably be added?
> > 
> > Why not do this instead:
> > 
> >     local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} 2>/dev/null ) )
> 
> You mean, why not discard stderr?  Out of general principles ("Errors
> shouldn't be silenced"), plus the fact that I've never had that line
> generate an error that needed to be silenced — not with the «git
> rev-parse … || return» right above it.
> 
> Or do you mean that line instead of the git-rev-parse(1) call too?

Yes, I mean: instead of this:

     git rev-parse @{upstream} >/dev/null 2>&1 || return 0
     local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} ) )

Replace both of the lines above with this:

     local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} 2>/dev/null ) )

> First, that would run the rest of the function even though $x might be
> an empty array rather than a two-element one.  Two, suppose there is an
> error after resolving «@{upstream}» to a commit but before rev-list
> finishes (for instance, an error while walking the commits history).
> With an explicit git-rev-parse(1) call that error would be reported, but
> if the rev-parse and the history walking are lumped into one step any
> failure from which is treated the same way, history walking failures
> would be masked — even though they're probably interesting.
> 
> > ---
> > Note: when replying to my email, please ensure that my email address is
> > included in the 'To:' field, since I am not subscribed to the mailing
> > list.
> 
> Ack, but for future reference, the customary signature delimiter is "-- "
> (ASCII 0x2D 0x2D 0x20).  Many MUAs syntax-highlight that, for example.

Thank you for all this information. I've learned so much today. :-)


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] Improve vcs_info example for ahead/behind git commits
  2021-03-29 10:39       ` Tim Lee
@ 2021-03-29 11:50         ` Daniel Shahaf
  2021-04-10 20:51           ` Lawrence Velázquez
  0 siblings, 1 reply; 12+ messages in thread
From: Daniel Shahaf @ 2021-03-29 11:50 UTC (permalink / raw)
  To: Tim Lee; +Cc: zsh-workers

Tim Lee wrote on Mon, 29 Mar 2021 10:39 +00:00:
> > > > > diff --git a/Misc/vcs_info-examples b/Misc/vcs_info-examples
> > > > > index 94b8a7b5e..36d4d3bf8 100644
> > > > > --- a/Misc/vcs_info-examples
> > > > > +++ b/Misc/vcs_info-examples
> > > > > @@ -179,14 +179,18 @@ function +vi-git-st() {
> > > > >      local ahead behind
> > > > >      local -a gitstatus
> > > > > 
> > > > > -    # for git prior to 1.7
> > > > > +    # for git prior to 1.7.0
> > > > >      # ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
> > > > > -    ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l)
> > > > > +    # for git 1.7.0 and 1.7.1
> > > > > +    # ahead=$(git rev-list @{upstream}..HEAD 2>/dev/null | wc -l)
> > > > > +    ahead=$(git rev-list --count @{upstream}..HEAD 2>/dev/null)
> > > > >      (( $ahead )) && gitstatus+=( "+${ahead}" )
> > > > 
> > > > The version of this function in my zshrc starts like this:
> > > > .
> > > >     git rev-parse @{upstream} >/dev/null 2>&1 || return 0
> > > >     local -a x=( $(git rev-list --left-right --count HEAD...@{upstream} ) )
> > > 
> > > The snippet below displays N/M. How would you make it display +N/-M
> > > instead?
> > 
> > Change the last line to hook_com[misc]="+${x[1]} -${x[2]}".
> 
> But hook_com[misc]="+${x[1]} -${x[2]}" would display a '+0' and/or '-0'
> when the local git branch is not ahead-of or behind the remote branch.
> 
> The existing example does not display '+0' or '-0'.

You didn't specify this when you asked.  Anyway, if you want not to show
+0 or -0, then add the appropriate logic — e.g., «if (( x[2] )); then».
We're on -workers@ so I thought that'd go without saying.

A bit further out along the "readable"–"line noise" spectrum there is
this alternative:

  hook_com[misc]="+$x[1]/-$x[2]"
  hook_com[misc]=${${hook_com[misc]#'+0/'}%'/-0'}

Cheers,

Daniel


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] Improve vcs_info example for ahead/behind git commits
  2021-03-29  9:52     ` Daniel Shahaf
  2021-03-29 10:39       ` Tim Lee
@ 2021-03-29 15:20       ` Lawrence Velázquez
  1 sibling, 0 replies; 12+ messages in thread
From: Lawrence Velázquez @ 2021-03-29 15:20 UTC (permalink / raw)
  To: Daniel Shahaf, Tim Lee; +Cc: zsh-workers

On Mon, Mar 29, 2021, at 5:52 AM, Daniel Shahaf wrote:
> Tim Lee wrote on Mon, 29 Mar 2021 09:30 +00:00:
> > ---
> > Note: when replying to my email, please ensure that my email address is
> > included in the 'To:' field, since I am not subscribed to the mailing
> > list.

what, too good for cc/bcc? ;)

> Ack, but for future reference, the customary signature delimiter is "-- "
> (ASCII 0x2D 0x2D 0x20).  Many MUAs syntax-highlight that, for example.

[whoa.gif]

vq


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] Improve vcs_info example for ahead/behind git commits
  2021-03-29 11:50         ` Daniel Shahaf
@ 2021-04-10 20:51           ` Lawrence Velázquez
  2021-04-13 11:34             ` Daniel Shahaf
  0 siblings, 1 reply; 12+ messages in thread
From: Lawrence Velázquez @ 2021-04-10 20:51 UTC (permalink / raw)
  To: Tim Lee; +Cc: Daniel Shahaf, zsh-workers

Anything else on this?

vq


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] Improve vcs_info example for ahead/behind git commits
  2021-04-10 20:51           ` Lawrence Velázquez
@ 2021-04-13 11:34             ` Daniel Shahaf
  2021-04-13 11:58               ` Tim Lee
  0 siblings, 1 reply; 12+ messages in thread
From: Daniel Shahaf @ 2021-04-13 11:34 UTC (permalink / raw)
  To: Tim Lee, Lawrence Velázquez; +Cc: zsh-workers

Lawrence Velázquez wrote on Sat, Apr 10, 2021 at 16:51:43 -0400:
> Anything else on this?

Tim: Would you have time to address the remaining points from the
original review, https://zsh.org/workers/48306, either by implementing
them and sending a revised patch, or by counterarguing them?

Cheers,

Daniel


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] Improve vcs_info example for ahead/behind git commits
  2021-04-13 11:34             ` Daniel Shahaf
@ 2021-04-13 11:58               ` Tim Lee
  2021-04-13 14:01                 ` Daniel Shahaf
  0 siblings, 1 reply; 12+ messages in thread
From: Tim Lee @ 2021-04-13 11:58 UTC (permalink / raw)
  To: Daniel Shahaf; +Cc: Lawrence Velázquez, zsh-workers

> Tim: Would you have time to address the remaining points from the
> original review, https://zsh.org/workers/48306, either by implementing
> them and sending a revised patch, or by counterarguing them?

I think I'll just porpose something simple, since I'm not very familiar
with ZSH.

Patch:

diff --git a/Misc/vcs_info-examples b/Misc/vcs_info-examples
index 94b8a7b5e..d33d0ceed 100644
--- a/Misc/vcs_info-examples
+++ b/Misc/vcs_info-examples
@@ -179,14 +179,10 @@ function +vi-git-st() {
     local ahead behind
     local -a gitstatus

-    # for git prior to 1.7
-    # ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
-    ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l)
+    ahead=$(git rev-list --count ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null)
     (( $ahead )) && gitstatus+=( "+${ahead}" )

-    # for git prior to 1.7
-    # behind=$(git rev-list HEAD..origin/${hook_com[branch]} | wc -l)
-    behind=$(git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l)
+    behind=$(git rev-list --count HEAD..${hook_com[branch]}@{upstream} 2>/dev/null)
     (( $behind )) && gitstatus+=( "-${behind}" )

     hook_com[misc]+=${(j:/:)gitstatus}


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] Improve vcs_info example for ahead/behind git commits
  2021-04-13 11:58               ` Tim Lee
@ 2021-04-13 14:01                 ` Daniel Shahaf
  2021-04-13 15:01                   ` Tim Lee
  0 siblings, 1 reply; 12+ messages in thread
From: Daniel Shahaf @ 2021-04-13 14:01 UTC (permalink / raw)
  To: Tim Lee; +Cc: Lawrence Velázquez, zsh-workers

[-- Attachment #1: Type: text/plain, Size: 559 bytes --]

Tim Lee wrote on Tue, Apr 13, 2021 at 19:58:30 +0800:
> > Tim: Would you have time to address the remaining points from the
> > original review, https://zsh.org/workers/48306, either by implementing
> > them and sending a revised patch, or by counterarguing them?
> 
> I think I'll just porpose something simple, since I'm not very familiar
> with ZSH.
> 
> Patch:

Thanks, applied, and here's a patch series for implementing the other
outstanding points.  Would you review it, please?  See anything that
could go wrong, or that's missing?

Cheers,

Daniel



[-- Attachment #2: 0001-vcs_info-git-docs-ahead-behind-commits-Don-t-run.patch.txt --]
[-- Type: text/plain, Size: 850 bytes --]

From 8a521515ce88802846df8884cabdd3966d0f32a8 Mon Sep 17 00:00:00 2001
From: Daniel Shahaf <d.s@daniel.shahaf.name>
Date: Tue, 13 Apr 2021 13:56:36 +0000
Subject: [PATCH 1/2] vcs_info git docs: ahead/behind commits: Don't run
 rev-list when that would fail

---
 Misc/vcs_info-examples | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Misc/vcs_info-examples b/Misc/vcs_info-examples
index d33d0ceed..065ea6cb3 100644
--- a/Misc/vcs_info-examples
+++ b/Misc/vcs_info-examples
@@ -179,6 +179,9 @@ function +vi-git-st() {
     local ahead behind
     local -a gitstatus
 
+    # Exit early in case the worktree is on a detached HEAD
+    git rev-parse ${hook_com[branch]}@{upstream} >/dev/null 2>&1 || return 0
+
     ahead=$(git rev-list --count ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null)
     (( $ahead )) && gitstatus+=( "+${ahead}" )
 

[-- Attachment #3: 0002-vcs_info-git-docs-ahead-behind-commits-Reduce-th.patch.txt --]
[-- Type: text/plain, Size: 1245 bytes --]

From d084af57318a98f5e3ff197e269f42611e5d2443 Mon Sep 17 00:00:00 2001
From: Daniel Shahaf <d.s@daniel.shahaf.name>
Date: Tue, 13 Apr 2021 13:56:31 +0000
Subject: [PATCH 2/2] vcs_info git docs: ahead/behind commits: Reduce the
 number of forks

---
 Misc/vcs_info-examples | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/Misc/vcs_info-examples b/Misc/vcs_info-examples
index 065ea6cb3..ba94cca29 100644
--- a/Misc/vcs_info-examples
+++ b/Misc/vcs_info-examples
@@ -182,10 +182,14 @@ function +vi-git-st() {
     # Exit early in case the worktree is on a detached HEAD
     git rev-parse ${hook_com[branch]}@{upstream} >/dev/null 2>&1 || return 0
 
-    ahead=$(git rev-list --count ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null)
-    (( $ahead )) && gitstatus+=( "+${ahead}" )
+    local -a ahead_and_behind=(
+        $(git rev-list --left-right --count HEAD...${hook_com[branch]}@{upstream} 2>/dev/null)
+    )
 
-    behind=$(git rev-list --count HEAD..${hook_com[branch]}@{upstream} 2>/dev/null)
+    ahead=${ahead_and_behind[1]}
+    behind=${ahead_and_behind[2]}
+
+    (( $ahead )) && gitstatus+=( "+${ahead}" )
     (( $behind )) && gitstatus+=( "-${behind}" )
 
     hook_com[misc]+=${(j:/:)gitstatus}

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] Improve vcs_info example for ahead/behind git commits
  2021-04-13 14:01                 ` Daniel Shahaf
@ 2021-04-13 15:01                   ` Tim Lee
  0 siblings, 0 replies; 12+ messages in thread
From: Tim Lee @ 2021-04-13 15:01 UTC (permalink / raw)
  To: Daniel Shahaf; +Cc: Lawrence Velázquez, zsh-workers

> Thanks, applied, and here's a patch series for implementing the other
> outstanding points.  Would you review it, please?  See anything that
> could go wrong, or that's missing?

Looks good to me. I would use this myself. However, you should take my
review with a grain of salt.


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2021-04-13 15:01 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-28 21:36 [PATCH] Improve vcs_info example for ahead/behind git commits Tim Lee
2021-03-29  7:06 ` Daniel Shahaf
2021-03-29  9:30   ` Tim Lee
2021-03-29  9:52     ` Daniel Shahaf
2021-03-29 10:39       ` Tim Lee
2021-03-29 11:50         ` Daniel Shahaf
2021-04-10 20:51           ` Lawrence Velázquez
2021-04-13 11:34             ` Daniel Shahaf
2021-04-13 11:58               ` Tim Lee
2021-04-13 14:01                 ` Daniel Shahaf
2021-04-13 15:01                   ` Tim Lee
2021-03-29 15:20       ` Lawrence Velázquez

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).