From: Johannes Schindelin <johannes.schindelin@gmx.de>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>, Kevin Daudt <me@ikke.info>
Subject: [PATCH v3 0/3] for-each-ref: add :remoteref and :remotename specifiers
Date: Tue, 7 Nov 2017 17:30:52 +0100 (CET) [thread overview]
Message-ID: <cover.1510072200.git.johannes.schindelin@gmx.de> (raw)
In-Reply-To: <cover.1507205895.git.johannes.schindelin@gmx.de>
This introduces support for
git for-each-ref \
--format="%(merge:remotename),%(merge:remoteref)"
git for-each-ref \
--format="%(push:remotename),%(push:remoteref)"
to figure out the remote nickname as well as the name of the corresponding
branch on the remote.
Note: the `%(push:remotename)` placeholder is only interpolated by the value
of `branch.<name>.pushRemote`; unlike `git push`, it does not fall back to
`branch.<name>.remote`. Likewise, `%(push:remoteref)` interpolates to the
empty string unless `remote.<nick>.pushRefs` is configured.
This is useful for third-party tools that need to know this type of information
for tons of branches.
Changes since v2:
- fixed the commit message of 1/3 to no longer talk about :remote.
- used the push atom in 2/3, made the code look more as suggested by Junio.
- fixed the oneline of 2/3 to use a verb ("report").
- butchered Junio's proposed documentation update for 2/3 to hopefully make
the description of :remotename and :remoteref a lot clearer.
J Wyman (1):
for-each-ref: let upstream/push report the remote ref name
Johannes Schindelin (2):
for-each-ref: let upstream/push optionally report the remote name
for-each-ref: test :remotename and :remoteref
Documentation/git-for-each-ref.txt | 23 +++++++++++-------
ref-filter.c | 48 ++++++++++++++++++++++++++++++++------
remote.c | 30 ++++++++++++++++++++++++
remote.h | 2 ++
t/t6300-for-each-ref.sh | 32 +++++++++++++++++++++++++
5 files changed, 120 insertions(+), 15 deletions(-)
base-commit: 7668cbc60578f99a4c048f8f8f38787930b8147b
Published-As: https://github.com/dscho/git/releases/tag/ref-filter-remote-name-v3
Fetch-It-Via: git fetch https://github.com/dscho/git ref-filter-remote-name-v3
Interdiff vs v2:
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index aff44c064a4..dffa14a7950 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -147,9 +147,12 @@ upstream::
encountered. Append `:track,nobracket` to show tracking
information without brackets (i.e "ahead N, behind M").
+
-Also respects `:remotename` to state the name of the *remote* instead
-of the ref, and `:remoteref` to state the name of the *reference* as
-locally known by the remote.
+For any remote-tracking branch `%(upstream)`, `%(upstream:remotename)`
+and `%(upstream:remoteref)` refer to the name of the remote and the
+name of the tracked remote ref, respectively. In other words, the
+remote-tracking branch can be updated explicitly and individually by
+using the refspec `%(upstream:remoteref):%(upstream)` to fetch from
+`%(upstream:remotename)`.
+
Has no effect if the ref does not have tracking information associated
with it. All the options apart from `nobracket` are mutually exclusive,
diff --git a/ref-filter.c b/ref-filter.c
index bf078657d91..3f9161707e6 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -1289,9 +1289,11 @@ static void fill_remote_ref_details(struct used_atom *atom, const char *refname,
else
*s = "";
} else if (atom->u.remote_ref.option == RR_REMOTE_REF) {
- int explicit, for_push = starts_with(atom->name, "push");
- const char *merge = remote_ref_for_branch(branch, for_push,
- &explicit);
+ int explicit;
+ const char *merge;
+
+ merge = remote_ref_for_branch(branch, atom->u.remote_ref.push,
+ &explicit);
if (explicit)
*s = xstrdup(merge);
else
--
2.15.0.windows.1
next prev parent reply other threads:[~2017-11-07 16:31 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-02 13:56 [PATCH 0/3] for-each-ref: add :remote-ref and :remote-name specifiers Johannes Schindelin
2017-10-02 13:56 ` [PATCH 1/3] for-each-ref: let upstream/push optionally report the remote name Johannes Schindelin
2017-10-04 7:14 ` Junio C Hamano
2017-10-04 9:08 ` Junio C Hamano
2017-10-05 12:20 ` Johannes Schindelin
2017-10-02 13:57 ` [PATCH 2/3] for-each-ref: let upstream/push optionally report merge name Johannes Schindelin
2017-10-04 9:12 ` Junio C Hamano
2017-10-04 11:41 ` Junio C Hamano
2017-10-05 9:14 ` Junio C Hamano
2017-10-02 13:57 ` [PATCH 3/3] for-each-ref: test :remote-name and :remote-ref Johannes Schindelin
2017-10-05 1:54 ` [PATCH 0/3] for-each-ref: add :remote-ref and :remote-name specifiers Junio C Hamano
2017-10-05 12:19 ` [PATCH v2 0/3] for-each-ref: add :remoteref and :remotename specifiers Johannes Schindelin
2017-10-05 12:19 ` [PATCH v2 1/3] for-each-ref: let upstream/push optionally report the remote name Johannes Schindelin
2017-10-10 9:35 ` Junio C Hamano
2017-10-11 2:07 ` Junio C Hamano
2017-10-05 12:19 ` [PATCH v2 2/3] for-each-ref: let upstream/push optionally remote ref name Johannes Schindelin
2017-10-06 5:10 ` Junio C Hamano
2017-10-11 5:58 ` Junio C Hamano
2017-10-12 19:13 ` Johannes Schindelin
2017-10-13 0:30 ` Junio C Hamano
2017-10-15 16:02 ` Johannes Schindelin
2017-10-13 16:39 ` Kevin Daudt
2017-10-14 2:08 ` Junio C Hamano
2017-10-15 16:05 ` Johannes Schindelin
2017-10-16 1:50 ` Junio C Hamano
2017-10-16 11:39 ` Johannes Schindelin
2017-10-05 12:19 ` [PATCH v2 3/3] for-each-ref: test :remotename and :remoteref Johannes Schindelin
2017-11-07 16:30 ` Johannes Schindelin [this message]
2017-11-07 16:30 ` [PATCH v3 1/3] for-each-ref: let upstream/push optionally report the remote name Johannes Schindelin
2017-11-07 16:31 ` [PATCH v3 2/3] for-each-ref: let upstream/push report the remote ref name Johannes Schindelin
2017-11-07 16:31 ` [PATCH v3 3/3] for-each-ref: test :remotename and :remoteref Johannes Schindelin
2017-11-08 1:36 ` [PATCH v3 0/3] for-each-ref: add :remoteref and :remotename specifiers Junio C Hamano
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=cover.1510072200.git.johannes.schindelin@gmx.de \
--to=johannes.schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=me@ikke.info \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.