Git development
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "Dana How" <danahow@gmail.com>
Cc: "Eric Raible" <raible@gmail.com>,
	"Junio C Hamano" <gitster@pobox.com>,
	git@vger.kernel.org, Johannes.Schindelin@gmx.de
Subject: Re: ':/<oneline prefix>' notation doesn't support full file syntax
Date: Thu, 03 Jul 2008 14:26:50 -0700	[thread overview]
Message-ID: <7v7ic2zmjp.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: 56b7f5510807031127j10e33f3bl516180f7a9b5b5db@mail.gmail.com

"Dana How" <danahow@gmail.com> writes:

> I was surprised to see Dscho advocating removing this feature altogether.
> Others proposed other command sequences which avoided :/ .
> If :/ is now going to be extended and thus perhaps more likely to
> appear in scripts,
> is now the time to change it to ? which has no other special meaning to git?

There are number of problems with ":/" notation, but my biggest gripe is
that it is only slightly better than "give back a random commit".  You
cannot even tell it to "dig from these branch tips, look for the first one
that talks about this text".

As Dscho mentioned, --grep works much better and instead of saying:

    $ git diff ':/send-email' HEAD

we can say:

    $ git diff \
      $(git log --pretty=format:%H -1 --grep=send-email master next) HEAD

The error behaviour is somewhat different between the two, though.  When
you misspell what to grep, the command substitution will give empty and
you would get an unexpected result.  Being built-in, ':/' syntax can say
"I do not find anything that match" fairly easily, and the command
substitution version has to say something ugly like:

    $ git diff \
        $(
            x=$(git log --pretty=format:%H -1 --grep=send-email master next)
            case "$x" in
            ('') echo 0000000000000000000000000000000000000000 ;;
            (?) echo $x ;; esac
        ) HEAD

to get a similar effect.

But the point is that you can extend it easily with the :path suffix if
you wanted to:

    $ git show \
        $(git log --pretty=format:%H -1 --grep=send-email):git-send-email.perl

You can even alias "log --pretty=format:%H -1" if you wanted to, and use
revision limiter other than --grep, like this:

    (in .git/config)

	[alias]
        	pick = log --pretty=format:%H -1

    $ git diff --stat $(git pick -- Documentation)^
    $ git blame $(git pick pu -- remote.c) remote.c

So in short, ':/' is limited (cannot be suffixed with :path, cannot be
told to dig down from named revs, etc.) but you can do what ':/' cannot do
fairly easily with command substitution.

However, $(git pick --all --grep=something), without suffixed modifiers
such as ~$N and :$path, may still be common enough that it might deserve a
short-hand ':/' (and that is why we have it).

If people do not find that short-hand useful, I am not strongly opposed to
the idea of dropping it.  I personally find the notation not very useful
cute hack anyway ;-).

  reply	other threads:[~2008-07-03 21:28 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-03  5:42 ':/<oneline prefix>' notation doesn't support full file syntax Eric Raible
2008-07-03  8:34 ` Junio C Hamano
2008-07-03  8:50   ` Eric Raible
2008-07-03 12:38     ` Johannes Schindelin
2008-07-03 18:27     ` Dana How
2008-07-03 21:26       ` Junio C Hamano [this message]
2008-07-04  0:14         ` Johannes Schindelin
2008-07-04  0:33       ` Johannes Schindelin
2008-07-03 10:47 ` Jeff King

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7v7ic2zmjp.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=danahow@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=raible@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox