From: Patrick Steinhardt <ps@pks.im>
To: git@vger.kernel.org
Cc: Taylor Blau <me@ttaylorr.com>, karthik nayak <karthik.188@gmail.com>
Subject: [PATCH v2 0/6] refs/reftable: wire up exclude patterns
Date: Mon, 16 Sep 2024 10:49:58 +0200 [thread overview]
Message-ID: <cover.1726476401.git.ps@pks.im> (raw)
In-Reply-To: <cover.1725881266.git.ps@pks.im>
Hi,
this is the second version of my patch series that fixes preexisting
bugs with exclude patterns and wires them up for the reftable backend.
Changes compared to v1:
- Some typo fixes in commit messages.
- Mention that the newly introduced function in patch 1 will be used
in patch 2, which is why it's declared in "refs.h".
- Use `check()` instead of `check_int(ret, ==, 0)`.
- Sort exclude patterns lexicographically. This fixes a bug where we
might not correctly skip over some refs when patterns are passed to
the reftable backend in non-lexicographic order. Add a test for
this.
Thanks!
Patrick
Patrick Steinhardt (6):
refs: properly apply exclude patterns to namespaced refs
builtin/receive-pack: fix exclude patterns when announcing refs
Makefile: stop listing test library objects twice
t/unit-tests: introduce reftable library
reftable/reader: make table iterator reseekable
refs/reftable: wire up support for exclude patterns
Makefile | 8 +-
builtin/receive-pack.c | 18 ++-
refs.c | 35 +++++-
refs.h | 9 ++
refs/reftable-backend.c | 133 ++++++++++++++++++++++-
reftable/reader.c | 1 +
t/t1419-exclude-refs.sh | 49 +++++++--
t/t5509-fetch-push-namespaces.sh | 9 ++
t/unit-tests/lib-reftable.c | 93 ++++++++++++++++
t/unit-tests/lib-reftable.h | 20 ++++
t/unit-tests/t-reftable-merged.c | 163 +++++++++++++++-------------
t/unit-tests/t-reftable-reader.c | 96 ++++++++++++++++
t/unit-tests/t-reftable-readwrite.c | 130 +++++++---------------
t/unit-tests/t-reftable-stack.c | 25 ++---
trace2.h | 1 +
trace2/tr2_ctr.c | 5 +
16 files changed, 594 insertions(+), 201 deletions(-)
create mode 100644 t/unit-tests/lib-reftable.c
create mode 100644 t/unit-tests/lib-reftable.h
create mode 100644 t/unit-tests/t-reftable-reader.c
Range-diff against v1:
1: 8d347bc5599 ! 1: 7497166422e refs: properly apply exclude patterns to namespaced refs
@@ Commit message
to the non-stripped ones that still have the namespace prefix. In fact,
the "transfer.hideRefs" machinery does the former and applies to the
stripped reference by default, but rules can have "^" prefixed to switch
- this behaviour to iinstead match against the rull reference name.
+ this behaviour to instead match against the full reference name.
Namespaces are exclusively handled at the generic "refs" layer, the
respective backends have no clue that such a thing even exists. This
@@ Commit message
refs in the tests, and then we indeed surface the breakage.
Fix this bug by prefixing exclude patterns with the namespace in the
- generic layer.
+ generic layer. The newly introduced function will be used outside of
+ "refs.c" in the next patch, so we add a declaration to "refs.h".
Signed-off-by: Patrick Steinhardt <ps@pks.im>
2: 0317a5a7ede = 2: 3dc6ae936c8 builtin/receive-pack: fix exclude patterns when announcing refs
3: 503c44e6cab = 3: 4ba503520e6 Makefile: stop listing test library objects twice
4: 3df4040dd3c = 4: 6747076420f t/unit-tests: introduce reftable library
5: a281f936a2b ! 5: 3278cdf92fe reftable/reader: make table iterator reseekable
@@ t/unit-tests/t-reftable-reader.c (new)
+ block_source_from_strbuf(&source, &buf);
+
+ ret = reftable_reader_new(&reader, &source, "name");
-+ check_int(ret, ==, 0);
++ check(!ret);
+
+ reftable_reader_init_ref_iterator(reader, &it);
+ ret = reftable_iterator_seek_ref(&it, "");
-+ check_int(ret, ==, 0);
++ check(!ret);
+ ret = reftable_iterator_next_ref(&it, &ref);
-+ check_int(ret, ==, 0);
++ check(!ret);
+
-+ ret = reftable_ref_record_equal(&ref, &records[0], 20);
++ ret = reftable_ref_record_equal(&ref, &records[0], GIT_SHA1_RAWSZ);
+ check_int(ret, ==, 1);
+
+ ret = reftable_iterator_next_ref(&it, &ref);
@@ t/unit-tests/t-reftable-reader.c (new)
+ block_source_from_strbuf(&source, &buf);
+
+ ret = reftable_reader_new(&reader, &source, "name");
-+ check_int(ret, ==, 0);
++ check(!ret);
+
+ reftable_reader_init_ref_iterator(reader, &it);
+
+ for (size_t i = 0; i < 5; i++) {
+ ret = reftable_iterator_seek_ref(&it, "");
-+ check_int(ret, ==, 0);
++ check(!ret);
+ ret = reftable_iterator_next_ref(&it, &ref);
-+ check_int(ret, ==, 0);
++ check(!ret);
+
+ ret = reftable_ref_record_equal(&ref, &records[0], GIT_SHA1_RAWSZ);
+ check_int(ret, ==, 1);
6: f3922b81db6 ! 6: 050f4906393 refs/reftable: wire up support for exclude patterns
@@ refs/reftable-backend.c: static struct ref_iterator_vtable reftable_ref_iterator
.abort = reftable_ref_iterator_abort
};
++static int qsort_strcmp(const void *va, const void *vb)
++{
++ const char *a = *(const char **)va;
++ const char *b = *(const char **)vb;
++ return strcmp(a, b);
++}
++
+static char **filter_exclude_patterns(const char **exclude_patterns)
+{
+ size_t filtered_size = 0, filtered_alloc = 0;
@@ refs/reftable-backend.c: static struct ref_iterator_vtable reftable_ref_iterator
+ }
+
+ if (filtered_size) {
++ QSORT(filtered, filtered_size, qsort_strcmp);
+ ALLOC_GROW(filtered, filtered_size + 1, filtered_alloc);
+ filtered[filtered_size++] = NULL;
+ }
@@ t/t1419-exclude-refs.sh: test_expect_success 'several overlapping excluded regio
+ assert_jumps 3 perf;;
+ *)
+ BUG "unhandled ref format $GIT_DEFAULT_REF_FORMAT";;
++ esac
++'
++
++test_expect_success 'unordered excludes' '
++ for_each_ref__exclude refs/heads \
++ refs/heads/foo refs/heads/baz >actual 2>perf &&
++ for_each_ref refs/heads/bar refs/heads/quux >expect &&
++
++ test_cmp expect actual &&
++ case "$GIT_DEFAULT_REF_FORMAT" in
++ files)
++ assert_jumps 1 perf;;
++ reftable)
++ assert_jumps 2 perf;;
++ *)
++ BUG "unhandled ref format $GIT_DEFAULT_REF_FORMAT";;
+ esac
'
--
2.46.0.551.gc5ee8f2d1c.dirty
next prev parent reply other threads:[~2024-09-16 8:50 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-09 11:31 [PATCH 0/6] refs/reftable: wire up exclude patterns Patrick Steinhardt
2024-09-09 11:31 ` [PATCH 1/6] refs: properly apply exclude patterns to namespaced refs Patrick Steinhardt
2024-09-13 11:35 ` karthik nayak
2024-09-16 6:56 ` Patrick Steinhardt
2024-09-09 11:31 ` [PATCH 2/6] builtin/receive-pack: fix exclude patterns when announcing refs Patrick Steinhardt
2024-09-13 11:50 ` karthik nayak
2024-09-09 11:31 ` [PATCH 3/6] Makefile: stop listing test library objects twice Patrick Steinhardt
2024-09-09 11:31 ` [PATCH 4/6] t/unit-tests: introduce reftable library Patrick Steinhardt
2024-09-09 11:31 ` [PATCH 5/6] reftable/reader: make table iterator reseekable Patrick Steinhardt
2024-09-13 12:11 ` karthik nayak
2024-09-16 6:56 ` Patrick Steinhardt
2024-09-17 16:44 ` karthik nayak
2024-09-09 11:31 ` [PATCH 6/6] refs/reftable: wire up support for exclude patterns Patrick Steinhardt
2024-09-13 12:47 ` karthik nayak
2024-09-16 6:56 ` Patrick Steinhardt
2024-09-17 17:31 ` karthik nayak
2024-09-13 12:48 ` [PATCH 0/6] refs/reftable: wire up " karthik nayak
2024-09-16 6:56 ` Patrick Steinhardt
2024-09-16 8:49 ` Patrick Steinhardt [this message]
2024-09-16 8:50 ` [PATCH v2 1/6] refs: properly apply exclude patterns to namespaced refs Patrick Steinhardt
2024-09-17 9:12 ` Taylor Blau
2024-09-17 9:33 ` Patrick Steinhardt
2024-09-17 9:38 ` Taylor Blau
2024-09-17 9:44 ` Patrick Steinhardt
2024-09-17 9:52 ` Taylor Blau
2024-09-17 9:55 ` Patrick Steinhardt
2024-09-16 8:50 ` [PATCH v2 2/6] builtin/receive-pack: fix exclude patterns when announcing refs Patrick Steinhardt
2024-09-17 9:16 ` Taylor Blau
2024-09-16 8:50 ` [PATCH v2 3/6] Makefile: stop listing test library objects twice Patrick Steinhardt
2024-09-16 8:50 ` [PATCH v2 4/6] t/unit-tests: introduce reftable library Patrick Steinhardt
2024-09-16 8:50 ` [PATCH v2 5/6] reftable/reader: make table iterator reseekable Patrick Steinhardt
2024-09-16 8:50 ` [PATCH v2 6/6] refs/reftable: wire up support for exclude patterns Patrick Steinhardt
2024-09-17 9:26 ` Taylor Blau
2024-09-17 9:39 ` Patrick Steinhardt
2024-09-17 9:53 ` Taylor Blau
2024-09-17 17:33 ` [PATCH v2 0/6] refs/reftable: wire up " karthik nayak
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.1726476401.git.ps@pks.im \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=karthik.188@gmail.com \
--cc=me@ttaylorr.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.
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 NNTP newsgroup(s).