Git Mailing List Archive on lore.kernel.org
 help / color / Atom feed
From: Jeff King <peff@peff.net>
To: "Σταύρος Ντέντος" <stdedos@gmail.com>
Cc: git <git@vger.kernel.org>
Subject: Re: Git alias syntax help
Date: Wed, 15 Jan 2020 13:13:51 -0500
Message-ID: <20200115181351.GB4081287@coredump.intra.peff.net> (raw)
In-Reply-To: <CAHMHMxVajKxjBweG=mps0gLwE1o8M69DvPb1iUQYgLXx0VO5AA@mail.gmail.com>

On Wed, Jan 15, 2020 at 01:13:17AM +0200, Σταύρος Ντέντος wrote:

> > > new = "!f() { : git log ; git log \"${1}@{1}..${1}@{0}\" \"$@\" ; } ; f"
> > > new = !f() { : git log ; git log "${1}@{1}..${1}@{0}" "$@" ; } ; f
> >
> > Only the first one is correct. In addition to the quotes in the second
> > one being eaten by the config parser, the unquoted semicolon starts a
> > comment.
> 
> Could somehow the latter "become" the correct option?

Unfortunately not without breaking compatibility of existing config
files.

> Especially in the case of `!sh`:
> 1) You need to quote everything after `=` sign ("forced" double quotes), then
> 2) `sh -c` needs another set (singles are most safe here, I think), and
> 3) If, for some reason, you need to quote further ("$@" would be a
> common suspect usually)

Yes, the quoting can get pretty hairy. If your command is complicated, I
suggest writing it as a separate script and dropping it into your $PATH
as git-new. Then "git new" will run it automatically (and it's not even
any less efficient; it still ends up with a single shell invocation).

> Thank you very much for a complete explaination of all of this .
> 
> Can some of this be documented somewhere?
> Are they somewhere and I missed them?

I think the config syntax around quoting is described in "git help
config" (see the section Syntax). The shell parts seem out of scope for
Git's manpages themselves, though it sounds like maybe some examples you
found could stand to be fixed (and/or to call out the subtlety).

> If nothing more, a link to this e-mail chain either on the wiki (if
> https://git.wiki.kernel.org/index.php/Aliases is an official page) or
> on git-alias help (here
> https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases or in some
> "advanced" section, which I cannot find)
> 
> If https://git.wiki.kernel.org/index.php/Aliases is an official page,
> then: was this written for an earlier version?
> Could it also be updated?

I think both of the issues you mentioned have always been true. That
wiki is open to editing by the world, so it's possible that somebody
just added bad examples (and fixes would be welcome).

I don't know the book content very well. Looking at the page you
linked, I don't think it says anything _wrong_, but it definitely
doesn't discuss more advanced alias usage. I suspect that would be a
welcome addition; they take contributions at
https://github.com/progit/progit2.

-Peff

  reply index

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-14 15:21 Σταύρος Ντέντος
2020-01-14 22:28 ` Jeff King
2020-01-14 23:13   ` Σταύρος Ντέντος
2020-01-15 18:13     ` Jeff King [this message]
2020-03-28 17:05       ` Philip Oakley

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=20200115181351.GB4081287@coredump.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=stdedos@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

Git Mailing List Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/git/0 git/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 git git/ https://lore.kernel.org/git \
		git@vger.kernel.org
	public-inbox-index git

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.git


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git