From: Taylor Blau <me@ttaylorr.com>
To: git@vger.kernel.org
Cc: peff@peff.net, gitster@pobox.com, sunshine@sunshineco.com,
sbeller@google.com
Subject: [PATCH v4 0/4] Filter alternate references
Date: Mon, 1 Oct 2018 19:23:48 -0700 [thread overview]
Message-ID: <cover.1538446826.git.me@ttaylorr.com> (raw)
In-Reply-To: <cover.1537466087.git.me@ttaylorr.com>
Hi,
Attached is the fourth re-roll of a series to teach
'core.alternateRefsCommand' and 'core.alternateRefsPrefixes' to filter
refs from an alternate from being visible to the fork. This is done in
order to optimize a case described in patch [3/4].
As always, a range-diff is included below, showing that not much has
changed of significance since last round. I mostly focused my efforts on
taking Peff's suggestion towards a more straightforward implementation
of the test setup.
Some extra documentation was written and a couple of commit messages
amended, but no C code has changed since the v2.
Thanks again for all of your review.
Thanks,
Taylor
Jeff King (1):
transport: drop refnames from for_each_alternate_ref
Taylor Blau (3):
transport.c: extract 'fill_alternate_refs_command'
transport.c: introduce core.alternateRefsCommand
transport.c: introduce core.alternateRefsPrefixes
Documentation/config.txt | 23 +++++++++++++++++
builtin/receive-pack.c | 3 +--
fetch-pack.c | 3 +--
t/t5410-receive-pack-alternates.sh | 41 ++++++++++++++++++++++++++++++
transport.c | 38 +++++++++++++++++++++------
transport.h | 2 +-
6 files changed, 97 insertions(+), 13 deletions(-)
create mode 100755 t/t5410-receive-pack-alternates.sh
Range-diff against v3:
1: 037273dab0 ! 1: 491f258f50 transport: drop refnames from for_each_alternate_ref
@@ -14,6 +14,7 @@
bare minimum.
Signed-off-by: Jeff King <peff@peff.net>
+ Signed-off-by: Taylor Blau <me@ttaylorr.com>
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
--- a/builtin/receive-pack.c
2: 9479470cb1 = 2: 6119de15f2 transport.c: extract 'fill_alternate_refs_command'
3: 2dbcd54190 ! 3: aadb27c010 transport.c: introduce core.alternateRefsCommand
@@ -24,9 +24,7 @@
Let the repository that has alternates configure this command to avoid
trusting the alternate to provide us a safe command to run in the shell.
- To behave differently on each alternate (e.g., only list tags from
- alternate A, only heads from B) provide the path of the alternate as the
- first argument.
+ To find the alternate, pass its absolute path as the first argument.
Signed-off-by: Taylor Blau <me@ttaylorr.com>
@@ -40,51 +38,41 @@
+core.alternateRefsCommand::
+ When advertising tips of available history from an alternate, use the shell to
+ execute the specified command instead of linkgit:git-for-each-ref[1]. The
-+ first argument is the absolute path of the alternate. Output must be of the
-+ form: `%(objectname)`, where multiple tips are separated by newlines.
++ first argument is the absolute path of the alternate. Output must contain one
++ hex object id per line (i.e., the same as produce by `git for-each-ref
++ --format='%(objectname)'`).
++
+This is useful when a repository only wishes to advertise some of its
-+alternate's references as ".have"'s. For example, to only advertise branch
++alternate's references as `.have`'s. For example, to only advertise branch
+heads, configure `core.alternateRefsCommand` to the path of a script which runs
+`git --git-dir="$1" for-each-ref --format='%(objectname)' refs/heads`.
+++
++Note that the configured value is executed in a shell, and thus
++linkgit:git-for-each-ref[1] by itself does not work, as scripts have to handle
++the path argument specially.
+
core.bare::
If true this repository is assumed to be 'bare' and has no
working directory associated with it. If this is the case a
- diff --git a/t/t5410-receive-pack.sh b/t/t5410-receive-pack.sh
+ diff --git a/t/t5410-receive-pack-alternates.sh b/t/t5410-receive-pack-alternates.sh
new file mode 100755
--- /dev/null
- +++ b/t/t5410-receive-pack.sh
+ +++ b/t/t5410-receive-pack-alternates.sh
@@
+#!/bin/sh
+
-+test_description='git receive-pack test'
++test_description='git receive-pack with alternate ref filtering'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
-+ test_commit one &&
-+ git update-ref refs/heads/a HEAD &&
-+ test_commit two &&
-+ git update-ref refs/heads/b HEAD &&
-+ test_commit three &&
-+ git update-ref refs/heads/c HEAD &&
-+ git clone --bare . fork &&
-+ git clone fork pusher &&
-+ (
-+ cd fork &&
-+ git update-ref --stdin <<-\EOF &&
-+ delete refs/heads/a
-+ delete refs/heads/b
-+ delete refs/heads/c
-+ delete refs/heads/master
-+ delete refs/tags/one
-+ delete refs/tags/two
-+ delete refs/tags/three
-+ EOF
-+ echo "../../.git/objects" >objects/info/alternates
-+ )
++ test_commit base &&
++ git clone -s --bare . fork &&
++ git checkout -b public/branch master &&
++ test_commit public &&
++ git checkout -b private/branch master &&
++ test_commit private
+'
+
+extract_haves () {
@@ -95,11 +83,10 @@
+ write_script fork/alternate-refs <<-\EOF &&
+ git --git-dir="$1" for-each-ref \
+ --format="%(objectname)" \
-+ refs/heads/a \
-+ refs/heads/c
++ refs/heads/public/
+ EOF
+ test_config -C fork core.alternateRefsCommand alternate-refs &&
-+ git rev-parse a c >expect &&
++ git rev-parse public/branch >expect &&
+ printf "0000" | git receive-pack fork >actual &&
+ extract_haves <actual >actual.haves &&
+ test_cmp expect actual.haves
4: 48eb774c9e ! 4: 0d3521e92a transport.c: introduce core.alternateRefsPrefixes
@@ -12,7 +12,8 @@
'core.alternateRefsCommand' would have to do:
$ git config core.alternateRefsCommand ' \
- git -C "$1" for-each-ref refs/tags --format="%(objectname)"'
+ f() { git -C "$1" for-each-ref \
+ refs/tags --format="%(objectname)" }; f "$@"'
The above is cumbersome to write, so let's introduce a
"core.alternateRefsPrefixes" to address this common case. Instead, the
@@ -38,8 +39,8 @@
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@
- heads, configure `core.alternateRefsCommand` to the path of a script which runs
- `git --git-dir="$1" for-each-ref --format='%(objectname)' refs/heads`.
+ linkgit:git-for-each-ref[1] by itself does not work, as scripts have to handle
+ the path argument specially.
+core.alternateRefsPrefixes::
+ When listing references from an alternate, list only references that begin
@@ -52,16 +53,16 @@
If true this repository is assumed to be 'bare' and has no
working directory associated with it. If this is the case a
- diff --git a/t/t5410-receive-pack.sh b/t/t5410-receive-pack.sh
- --- a/t/t5410-receive-pack.sh
- +++ b/t/t5410-receive-pack.sh
+ diff --git a/t/t5410-receive-pack-alternates.sh b/t/t5410-receive-pack-alternates.sh
+ --- a/t/t5410-receive-pack-alternates.sh
+ +++ b/t/t5410-receive-pack-alternates.sh
@@
test_cmp expect actual.haves
'
+test_expect_success 'with core.alternateRefsPrefixes' '
-+ test_config -C fork core.alternateRefsPrefixes "refs/tags" &&
-+ git rev-parse one three two >expect &&
++ test_config -C fork core.alternateRefsPrefixes "refs/heads/private" &&
++ git rev-parse private/branch expect &&
+ printf "0000" | git receive-pack fork >actual &&
+ extract_haves <actual >actual.haves &&
+ test_cmp expect actual.haves
--
2.19.0.221.g150f307af
next prev parent reply other threads:[~2018-10-02 2:23 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-20 18:04 [PATCH 0/3] Filter alternate references Taylor Blau
2018-09-20 18:04 ` [PATCH 1/3] transport.c: extract 'fill_alternate_refs_command' Taylor Blau
2018-09-20 18:04 ` [PATCH 2/3] transport.c: introduce core.alternateRefsCommand Taylor Blau
2018-09-20 19:37 ` Jeff King
2018-09-20 20:00 ` Taylor Blau
2018-09-20 20:06 ` Jeff King
2018-09-21 16:39 ` Junio C Hamano
2018-09-21 17:48 ` Taylor Blau
2018-09-21 17:57 ` Taylor Blau
2018-09-21 19:59 ` Junio C Hamano
2018-09-26 0:56 ` Taylor Blau
2018-09-20 18:04 ` [PATCH 3/3] transport.c: introduce core.alternateRefsPrefixes Taylor Blau
2018-09-20 19:47 ` Jeff King
2018-09-20 20:12 ` Taylor Blau
2018-09-21 7:19 ` Eric Sunshine
2018-09-21 14:07 ` Taylor Blau
2018-09-21 16:45 ` Junio C Hamano
2018-09-21 17:49 ` Taylor Blau
2018-09-21 16:40 ` Junio C Hamano
2018-09-20 18:35 ` [PATCH 0/3] Filter alternate references Stefan Beller
2018-09-20 18:56 ` Taylor Blau
2018-09-20 19:27 ` Jeff King
2018-09-20 19:21 ` Jeff King
2018-09-21 18:47 ` [PATCH v2 " Taylor Blau
2018-09-21 18:47 ` [PATCH v2 1/3] transport.c: extract 'fill_alternate_refs_command' Taylor Blau
2018-09-21 18:47 ` [PATCH v2 2/3] transport.c: introduce core.alternateRefsCommand Taylor Blau
2018-09-21 20:18 ` Eric Sunshine
2018-09-26 0:59 ` Taylor Blau
2018-09-21 21:09 ` Junio C Hamano
2018-09-21 22:13 ` Jeff King
2018-09-21 22:23 ` Junio C Hamano
2018-09-21 22:27 ` Jeff King
2018-09-26 1:06 ` Taylor Blau
2018-09-26 3:21 ` Jeff King
2018-09-21 21:10 ` Eric Sunshine
2018-09-22 18:02 ` brian m. carlson
2018-09-22 19:52 ` Jeff King
2018-09-23 14:53 ` brian m. carlson
2018-09-26 1:09 ` Taylor Blau
2018-09-26 3:33 ` Jeff King
2018-09-26 13:39 ` Taylor Blau
2018-09-26 18:38 ` Jeff King
2018-09-28 2:39 ` Taylor Blau
2018-09-21 18:47 ` [PATCH v2 3/3] transport.c: introduce core.alternateRefsPrefixes Taylor Blau
2018-09-21 21:14 ` Junio C Hamano
2018-09-21 21:37 ` Jeff King
2018-09-21 22:06 ` Junio C Hamano
2018-09-21 22:18 ` Jeff King
2018-09-21 22:23 ` Stefan Beller
2018-09-24 15:17 ` Junio C Hamano
2018-09-24 18:10 ` Jeff King
2018-09-24 20:32 ` Junio C Hamano
2018-09-24 20:50 ` Jeff King
2018-09-24 21:01 ` Jeff King
2018-09-24 21:55 ` Junio C Hamano
2018-09-24 23:14 ` Jeff King
2018-09-25 17:41 ` Junio C Hamano
2018-09-25 22:46 ` Taylor Blau
2018-09-25 23:56 ` Junio C Hamano
2018-09-26 1:18 ` Taylor Blau
2018-09-26 3:16 ` Jeff King
2018-09-28 4:25 ` [PATCH v3 0/4] Filter alternate references Taylor Blau
2018-09-28 4:25 ` [PATCH v3 1/4] transport: drop refnames from for_each_alternate_ref Jeff King
2018-09-28 4:58 ` Jeff King
2018-09-28 14:21 ` Taylor Blau
2018-09-28 4:25 ` [PATCH v3 2/4] transport.c: extract 'fill_alternate_refs_command' Taylor Blau
2018-09-28 4:59 ` Jeff King
2018-09-28 4:25 ` [PATCH v3 3/4] transport.c: introduce core.alternateRefsCommand Taylor Blau
2018-09-28 5:26 ` Jeff King
2018-09-28 22:04 ` Taylor Blau
2018-09-29 7:31 ` Jeff King
2018-10-02 1:56 ` Taylor Blau
2018-09-28 4:25 ` [PATCH v3 4/4] transport.c: introduce core.alternateRefsPrefixes Taylor Blau
2018-09-28 5:30 ` Jeff King
2018-09-28 22:05 ` Taylor Blau
2018-09-29 7:34 ` Jeff King
2018-10-02 1:57 ` Taylor Blau
2018-10-02 2:00 ` Taylor Blau
2018-10-02 2:23 ` Taylor Blau [this message]
2018-10-02 2:23 ` [PATCH v4 1/4] transport: drop refnames from for_each_alternate_ref Taylor Blau
2018-10-02 2:23 ` [PATCH v4 2/4] transport.c: extract 'fill_alternate_refs_command' Taylor Blau
2018-10-02 2:23 ` [PATCH v4 3/4] transport.c: introduce core.alternateRefsCommand Taylor Blau
2018-10-02 23:40 ` Jeff King
2018-10-04 2:17 ` Taylor Blau
2018-10-02 2:24 ` [PATCH v4 4/4] transport.c: introduce core.alternateRefsPrefixes Taylor Blau
2018-10-02 15:13 ` Ramsay Jones
2018-10-02 23:28 ` Taylor Blau
2018-10-08 18:09 ` [PATCH v5 0/4] Filter alternate references Taylor Blau
2018-10-08 18:09 ` [PATCH v5 1/4] transport: drop refnames from for_each_alternate_ref Taylor Blau
2018-10-08 18:09 ` [PATCH v5 2/4] transport.c: extract 'fill_alternate_refs_command' Taylor Blau
2018-10-08 18:09 ` [PATCH v5 3/4] transport.c: introduce core.alternateRefsCommand Taylor Blau
2018-10-08 18:09 ` [PATCH v5 4/4] transport.c: introduce core.alternateRefsPrefixes Taylor Blau
2018-10-09 3:09 ` [PATCH v5 0/4] Filter alternate references Jeff King
2018-10-09 14:49 ` Taylor Blau
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1538446826.git.me@ttaylorr.com \
--to=me@ttaylorr.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=sbeller@google.com \
--cc=sunshine@sunshineco.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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).