Message ID | cd906f6d9818a36cbdee896c1ede44d6de3f8990.1668628303.git.gitgitgadget@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Bundle URIs IV: advertise over protocol v2 | expand |
Derrick Stolee via GitGitGadget wrote: > From: Derrick Stolee <derrickstolee@github.com> > > Implement the "bundle-uri" protocol v2 capability by populating the > key=value packet lines from the local Git config. The list of bundles is > provided from the keys beginning with "bundle.". > > In the future, we may want to filter this list to be more specific to > the exact known keys that the server intends to share, but for > flexibility at the moment we will assume that the config values are > well-formed. This patch looks good - the implementation is pretty straightforward ("send a config value if its key matches 'bundle.*'), and the tests cover both single and multiple bundle URIs returned by the server. > > Signed-off-by: Derrick Stolee <derrickstolee@github.com> > --- > bundle-uri.c | 16 +++++++++++- > t/lib-t5730-protocol-v2-bundle-uri.sh | 35 +++++++++++++++++++++++++++ > 2 files changed, 50 insertions(+), 1 deletion(-) > > diff --git a/t/lib-t5730-protocol-v2-bundle-uri.sh b/t/lib-t5730-protocol-v2-bundle-uri.sh > index c327544641b..000fcc5e20b 100644 > --- a/t/lib-t5730-protocol-v2-bundle-uri.sh > +++ b/t/lib-t5730-protocol-v2-bundle-uri.sh > @@ -158,6 +158,8 @@ test_expect_success "ls-remote with $T5730_PROTOCOL:// using protocol v2" ' > [bundle] > version = 1 > mode = all > + [bundle "only"] > + uri = $T5730_BUNDLE_URI_ESCAPED Ah, okay, this explains why the 'bundle.only.uri' config was added to the test in the last patch [1]. But, if the config is only being served in this patch, shouldn't that test change be moved to this patch? [1] https://lore.kernel.org/git/c3269a24b5780023cbb4d173cb9cfb10c5a4b0d8.1668628303.git.gitgitgadget@gmail.com/ > EOF > GIT_TRACE_PACKET="$PWD/log" \ > test-tool bundle-uri \
diff --git a/bundle-uri.c b/bundle-uri.c index 2201b604b11..3469f1aaa98 100644 --- a/bundle-uri.c +++ b/bundle-uri.c @@ -585,6 +585,16 @@ cached: return advertise_bundle_uri; } +static int config_to_packet_line(const char *key, const char *value, void *data) +{ + struct packet_reader *writer = data; + + if (!strncmp(key, "bundle.", 7)) + packet_write_fmt(writer->fd, "%s=%s", key, value); + + return 0; +} + int bundle_uri_command(struct repository *r, struct packet_reader *request) { @@ -596,7 +606,11 @@ int bundle_uri_command(struct repository *r, if (request->status != PACKET_READ_FLUSH) die(_("bundle-uri: expected flush after arguments")); - /* TODO: Implement the communication */ + /* + * Read all "bundle.*" config lines to the client as key=value + * packet lines. + */ + git_config(config_to_packet_line, &writer); packet_writer_flush(&writer); diff --git a/t/lib-t5730-protocol-v2-bundle-uri.sh b/t/lib-t5730-protocol-v2-bundle-uri.sh index c327544641b..000fcc5e20b 100644 --- a/t/lib-t5730-protocol-v2-bundle-uri.sh +++ b/t/lib-t5730-protocol-v2-bundle-uri.sh @@ -158,6 +158,8 @@ test_expect_success "ls-remote with $T5730_PROTOCOL:// using protocol v2" ' [bundle] version = 1 mode = all + [bundle "only"] + uri = $T5730_BUNDLE_URI_ESCAPED EOF GIT_TRACE_PACKET="$PWD/log" \ test-tool bundle-uri \ @@ -181,6 +183,39 @@ test_expect_success "ls-remote with $T5730_PROTOCOL:// using protocol v2 and ext [bundle] version = 1 mode = all + [bundle "only"] + uri = $T5730_BUNDLE_URI_ESCAPED + EOF + GIT_TRACE_PACKET="$PWD/log" \ + test-tool bundle-uri \ + ls-remote \ + "$T5730_URI" \ + >actual && + test_cmp_config_output expect actual +' + + +test_expect_success "ls-remote with $T5730_PROTOCOL:// using protocol v2 with list" ' + test_when_finished "rm -f log" && + + test_config -C "$T5730_PARENT" \ + bundle.bundle1.uri "$T5730_BUNDLE_URI_ESCAPED-1.bdl" && + test_config -C "$T5730_PARENT" \ + bundle.bundle2.uri "$T5730_BUNDLE_URI_ESCAPED-2.bdl" && + test_config -C "$T5730_PARENT" \ + bundle.bundle3.uri "$T5730_BUNDLE_URI_ESCAPED-3.bdl" && + + # All data about bundle URIs + cat >expect <<-EOF && + [bundle] + version = 1 + mode = all + [bundle "bundle1"] + uri = $T5730_BUNDLE_URI_ESCAPED-1.bdl + [bundle "bundle2"] + uri = $T5730_BUNDLE_URI_ESCAPED-2.bdl + [bundle "bundle3"] + uri = $T5730_BUNDLE_URI_ESCAPED-3.bdl EOF GIT_TRACE_PACKET="$PWD/log" \ test-tool bundle-uri \