diff mbox series

git-jump: pass "merge" arguments to ls-files

Message ID YYqjY/zcBWyqY8/5@coredump.intra.peff.net (mailing list archive)
State Accepted
Commit 67ba13e5a4b27785391a0e1673d71e506edae13b
Headers show
Series git-jump: pass "merge" arguments to ls-files | expand

Commit Message

Jeff King Nov. 9, 2021, 4:35 p.m. UTC
We currently throw away any arguments given to "git jump merge". We
should instead pass them along to ls-files, since they're likely to be
pathspecs. This matches the behavior of "git jump diff", etc.

Signed-off-by: Jeff King <peff@peff.net>
---
Just a little wart I noticed while doing a really tricky merge today.

 contrib/git-jump/README   | 3 +++
 contrib/git-jump/git-jump | 2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)

Comments

Taylor Blau Nov. 9, 2021, 4:46 p.m. UTC | #1
On Tue, Nov 09, 2021 at 11:35:47AM -0500, Jeff King wrote:
> We currently throw away any arguments given to "git jump merge". We
> should instead pass them along to ls-files, since they're likely to be
> pathspecs. This matches the behavior of "git jump diff", etc.
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> Just a little wart I noticed while doing a really tricky merge today.

This is hilarious to me, because I wrote the exact same patch to skip
some conflicts while resolving what I can only assume is the same merge.

> diff --git a/contrib/git-jump/git-jump b/contrib/git-jump/git-jump
> index 931b0fe3a9..92dbd4cde1 100755
> --- a/contrib/git-jump/git-jump
> +++ b/contrib/git-jump/git-jump
> @@ -39,7 +39,7 @@ mode_diff() {
>  }
>
>  mode_merge() {
> -	git ls-files -u |
> +	git ls-files -u "$@" |

It's kind of unfortunate (maybe not?) that a caller could now run:

    git jump merge --no-unmerged

and get the same results albeit *much* slower. We could limit ourselves
to only accepting pathspecs (by writing `git ls-files -u -- "$@"`), but
that feels overly restrictive. We could also say `"$@" -u`, but that
breaks if the caller writes `--` or `--end-of-options`.

So I think that what you and I both wrote is least bad, but it does make
me cringe a little bit at being able to pass `--no-unmerged` to `git
jump merge`.

Anyway, I know that it's late in the -rc cycle, but I'd be happy to see
something like this get picked up once Junio tags 2.34 and we have
stabilized a little bit.

Thanks,
Taylor
Jeff King Nov. 9, 2021, 5:27 p.m. UTC | #2
On Tue, Nov 09, 2021 at 11:46:26AM -0500, Taylor Blau wrote:

> On Tue, Nov 09, 2021 at 11:35:47AM -0500, Jeff King wrote:
> > We currently throw away any arguments given to "git jump merge". We
> > should instead pass them along to ls-files, since they're likely to be
> > pathspecs. This matches the behavior of "git jump diff", etc.
> >
> > Signed-off-by: Jeff King <peff@peff.net>
> > ---
> > Just a little wart I noticed while doing a really tricky merge today.
> 
> This is hilarious to me, because I wrote the exact same patch to skip
> some conflicts while resolving what I can only assume is the same merge.

It's possible. :)

> >  mode_merge() {
> > -	git ls-files -u |
> > +	git ls-files -u "$@" |
> 
> It's kind of unfortunate (maybe not?) that a caller could now run:
> 
>     git jump merge --no-unmerged
> 
> and get the same results albeit *much* slower. We could limit ourselves
> to only accepting pathspecs (by writing `git ls-files -u -- "$@"`), but
> that feels overly restrictive. We could also say `"$@" -u`, but that
> breaks if the caller writes `--` or `--end-of-options`.

Yeah. With "git jump diff" and "git jump grep", it's an explicit feature
that we allow extra arguments. That's less likely here, though you could
perhaps do something clever with --recurse-submodules, etc. And while
you could royally screw things up with "--no-unmerged", I think this is
a case of "if it hurts, don't do it".

> Anyway, I know that it's late in the -rc cycle, but I'd be happy to see
> something like this get picked up once Junio tags 2.34 and we have
> stabilized a little bit.

Yeah, obviously no rush at all on this.

-Peff
diff mbox series

Patch

diff --git a/contrib/git-jump/README b/contrib/git-jump/README
index 2f618a7f97..8bcace29d2 100644
--- a/contrib/git-jump/README
+++ b/contrib/git-jump/README
@@ -65,6 +65,9 @@  git jump diff --cached
 # jump to merge conflicts
 git jump merge
 
+# documentation conflicts are hard; skip past them for now
+git jump merge :^Documentation
+
 # jump to all instances of foo_bar
 git jump grep foo_bar
 
diff --git a/contrib/git-jump/git-jump b/contrib/git-jump/git-jump
index 931b0fe3a9..92dbd4cde1 100755
--- a/contrib/git-jump/git-jump
+++ b/contrib/git-jump/git-jump
@@ -39,7 +39,7 @@  mode_diff() {
 }
 
 mode_merge() {
-	git ls-files -u |
+	git ls-files -u "$@" |
 	perl -pe 's/^.*?\t//' |
 	sort -u |
 	while IFS= read fn; do