for-each-ref: let upstream/push report the remote ref name
authorJ Wyman <jwyman@microsoft.com>
Tue, 7 Nov 2017 16:31:08 +0000 (17:31 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 8 Nov 2017 01:18:23 +0000 (10:18 +0900)
commit9700fae5ee93dd0928cb82afb7b2fd49295e28d2
tree388bac3ca43e4393b9b0dc5c3413b15e79f96377
parentcc72385fe350d4d7bc64f84e8817dbdfe27b04fe
for-each-ref: let upstream/push report the remote ref name

There are times when scripts want to know not only the name of the
push branch on the remote, but also the name of the branch as known
by the remote repository.

An example of this is when a tool wants to push to the very same branch
from which it would pull automatically, i.e. the `<remote>` and the `<to>`
in `git push <remote> <from>:<to>` would be provided by
`%(upstream:remotename)` and `%(upstream:remoteref)`, respectively.

This patch offers the new suffix :remoteref for the `upstream` and `push`
atoms, allowing to show exactly that. Example:

$ cat .git/config
...
[remote "origin"]
url = https://where.do.we.come/from
fetch = refs/heads/*:refs/remote/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "develop/with/topics"]
remote = origin
merge = refs/heads/develop/with/topics
...

$ git for-each-ref \
--format='%(push) %(push:remoteref)' \
refs/heads
refs/remotes/origin/master refs/heads/master
refs/remotes/origin/develop/with/topics refs/heads/develop/with/topics

Signed-off-by: J Wyman <jwyman@microsoft.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-for-each-ref.txt
ref-filter.c
remote.c
remote.h