From: "ZheNing Hu via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Christian Couder" <christian.couder@gmail.com>,
"Hariom Verma" <hariom18599@gmail.com>,
"Bagas Sanjaya" <bagasdotme@gmail.com>,
"Jeff King" <peff@peff.net>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Eric Sunshine" <sunshine@sunshineco.com>,
"Philip Oakley" <philipoakley@iee.email>,
"ZheNing Hu" <adlternative@gmail.com>
Subject: [PATCH v2 0/5] [GSOC] ref-filter: add %(raw) and %(rest) atoms
Date: Fri, 23 Jul 2021 09:03:58 +0000 [thread overview]
Message-ID: <pull.1000.v2.git.1627031043.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1000.git.1626939557.gitgitgadget@gmail.com>
This patch series is split from my main patch series zh/ref-filter-raw-data,
to make things easier for reviewers to read. It's last version is here:
https://lore.kernel.org/git/pull.993.v2.git.1626363626.gitgitgadget@gmail.com/
This patch series provided %(raw) and %(rest) for ref-filter, which will be
used by zh/cat-file-reuse-ref-filter-logic later.
Change from last version:
1. Define ATOM_VALUE_INIT used to initialize struct atom_value and delete
ATOM_VALUE_S_SIZE_INIT macro.
2. Provide more complete commit message.
ZheNing Hu (5):
[GSOC] ref-filter: add obj-type check in grab contents
[GSOC] ref-filter: add %(raw) atom
[GSOC] ref-filter: --format=%(raw) re-support --perl
[GSOC] ref-filter: use non-const ref_format in *_atom_parser()
[GSOC] ref-filter: add %(rest) atom
Documentation/git-for-each-ref.txt | 9 ++
builtin/tag.c | 2 +-
quote.c | 17 ++
quote.h | 1 +
ref-filter.c | 242 ++++++++++++++++++++++-------
ref-filter.h | 9 +-
t/t3203-branch-output.sh | 4 +
t/t6300-for-each-ref.sh | 235 ++++++++++++++++++++++++++++
t/t7004-tag.sh | 4 +
t/t7030-verify-tag.sh | 4 +
10 files changed, 464 insertions(+), 63 deletions(-)
base-commit: daab8a564f8bbac55f70f8bf86c070e001a9b006
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1000%2Fadlternative%2Fref-filter-raw-data-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1000/adlternative/ref-filter-raw-data-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1000
Range-diff vs v1:
1: a7b4e45f14a ! 1: d77268bb188 [GSOC] ref-filter: add obj-type check in grab contents
@@ Commit message
object contents in the current codebase. We want to teach the
function to also handle blobs and trees to get their raw data,
without parsing a blob (whose contents looks like a commit or a tag)
- incorrectly as a commit or a tag.
+ incorrectly as a commit or a tag. So it's needed to pass a
+ `struct expand_data *data` instread of only `void *buf` to both
+ `grab_sub_body_contents()` and `grab_values()` to be able to check
+ the object type.
Skip the block of code that is specific to handling commits and tags
early when the given object is of a wrong type to help later
2: ecd41b370e6 ! 2: eafb79bad62 [GSOC] ref-filter: add %(raw) atom
@@ ref-filter.c: struct ref_formatting_state {
struct used_atom *atom;
};
-+#define ATOM_VALUE_S_SIZE_INIT (-1)
++#define ATOM_VALUE_INIT { \
++ .s_size = -1 \
++}
+
/*
* Used to parse format string and sort specifiers
@@ ref-filter.c: static int parse_ref_filter_atom(const struct ref_format *format,
switch (quote_style) {
case QUOTE_NONE:
- strbuf_addstr(s, str);
-+ if (len != ATOM_VALUE_S_SIZE_INIT)
++ if (len != -1)
+ strbuf_add(s, str, len);
+ else
+ strbuf_addstr(s, str);
@@ ref-filter.c: static int append_atom(struct atom_value *v, struct ref_formatting
+ quote_formatting(&state->stack->output, v->s, v->s_size, state->quote_style);
else
- strbuf_addstr(&state->stack->output, v->s);
-+ if (v->s_size != ATOM_VALUE_S_SIZE_INIT)
++ if (v->s_size != -1)
+ strbuf_add(&state->stack->output, v->s, v->s_size);
+ else
+ strbuf_addstr(&state->stack->output, v->s);
@@ ref-filter.c: static int populate_value(struct ref_array_item *ref, struct strbu
const char *refname;
struct branch *branch = NULL;
-+ v->s_size = ATOM_VALUE_S_SIZE_INIT;
++ v->s_size = -1;
v->handler = append_atom;
v->atom = atom;
@@ ref-filter.c: static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array
- cmp_fn = s->sort_flags & REF_SORTING_ICASE
- ? strcasecmp : strcmp;
- cmp = cmp_fn(va->s, vb->s);
-+ if (va->s_size == ATOM_VALUE_S_SIZE_INIT &&
-+ vb->s_size == ATOM_VALUE_S_SIZE_INIT) {
++ if (va->s_size == -1 && vb->s_size == -1) {
+ int (*cmp_fn)(const char *, const char *);
+ cmp_fn = s->sort_flags & REF_SORTING_ICASE
+ ? strcasecmp : strcmp;
+ cmp = cmp_fn(va->s, vb->s);
+ } else {
-+ size_t a_size = va->s_size == ATOM_VALUE_S_SIZE_INIT ?
++ size_t a_size = va->s_size == -1 ?
+ strlen(va->s) : va->s_size;
-+ size_t b_size = vb->s_size == ATOM_VALUE_S_SIZE_INIT ?
++ size_t b_size = vb->s_size == -1 ?
+ strlen(vb->s) : vb->s_size;
+ int (*cmp_fn)(const void *, const void *, size_t);
+ cmp_fn = s->sort_flags & REF_SORTING_ICASE
@@ ref-filter.c: static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array
if (va->value < vb->value)
cmp = -1;
@@ ref-filter.c: int format_ref_array_item(struct ref_array_item *info,
+ append_literal(cp, sp, &state);
}
if (format->need_color_reset_at_eol) {
- struct atom_value resetv;
-+ resetv.s_size = ATOM_VALUE_S_SIZE_INIT;
+- struct atom_value resetv;
++ struct atom_value resetv = ATOM_VALUE_INIT;
resetv.s = GIT_COLOR_RESET;
if (append_atom(&resetv, &state, error_buf)) {
pop_stack_element(&state.stack);
3: b6438fd4308 ! 3: 00a29dd16d7 [GSOC] ref-filter: --format=%(raw) re-support --perl
@@ ref-filter.c: static void quote_formatting(struct strbuf *s, const char *str, si
break;
case QUOTE_PERL:
- perl_quote_buf(s, str);
-+ if (len != ATOM_VALUE_S_SIZE_INIT)
++ if (len != -1)
+ perl_quote_buf_with_len(s, str, len);
+ else
+ perl_quote_buf(s, str);
4: 33d332c664e = 4: 3a8173b42ed [GSOC] ref-filter: use non-const ref_format in *_atom_parser()
5: 75eb2f6740e = 5: 71249dfd4e0 [GSOC] ref-filter: add %(rest) atom
--
gitgitgadget
next prev parent reply other threads:[~2021-07-23 9:04 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-22 7:39 [PATCH 0/5] [GSOC] ref-filter: add %(raw) and %(rest) atoms ZheNing Hu via GitGitGadget
2021-07-22 7:39 ` [PATCH 1/5] [GSOC] ref-filter: add obj-type check in grab contents ZheNing Hu via GitGitGadget
2021-07-22 8:51 ` Christian Couder
2021-07-22 9:15 ` ZheNing Hu
2021-07-22 7:39 ` [PATCH 2/5] [GSOC] ref-filter: add %(raw) atom ZheNing Hu via GitGitGadget
2021-07-22 8:06 ` Ævar Arnfjörð Bjarmason
2021-07-22 8:31 ` ZheNing Hu
2021-07-22 7:39 ` [PATCH 3/5] [GSOC] ref-filter: --format=%(raw) re-support --perl ZheNing Hu via GitGitGadget
2021-07-22 7:39 ` [PATCH 4/5] [GSOC] ref-filter: use non-const ref_format in *_atom_parser() ZheNing Hu via GitGitGadget
2021-07-22 7:39 ` [PATCH 5/5] [GSOC] ref-filter: add %(rest) atom ZheNing Hu via GitGitGadget
2021-07-22 8:11 ` Ævar Arnfjörð Bjarmason
2021-07-22 9:10 ` ZheNing Hu
2021-07-23 9:09 ` Jacob Keller
2021-07-23 14:11 ` ZheNing Hu
2021-07-22 8:08 ` [PATCH 0/5] [GSOC] ref-filter: add %(raw) and %(rest) atoms Christian Couder
2021-07-22 8:22 ` ZheNing Hu
2021-07-23 9:03 ` ZheNing Hu via GitGitGadget [this message]
2021-07-23 9:03 ` [PATCH v2 1/5] [GSOC] ref-filter: add obj-type check in grab contents ZheNing Hu via GitGitGadget
2021-07-23 9:04 ` [PATCH v2 2/5] [GSOC] ref-filter: add %(raw) atom ZheNing Hu via GitGitGadget
2021-07-23 16:38 ` Junio C Hamano
2021-07-24 7:57 ` ZheNing Hu
2021-07-24 17:41 ` Junio C Hamano
2021-07-25 12:47 ` ZheNing Hu
2021-07-23 9:04 ` [PATCH v2 3/5] [GSOC] ref-filter: --format=%(raw) re-support --perl ZheNing Hu via GitGitGadget
2021-07-23 9:04 ` [PATCH v2 4/5] [GSOC] ref-filter: use non-const ref_format in *_atom_parser() ZheNing Hu via GitGitGadget
2021-07-23 9:04 ` [PATCH v2 5/5] [GSOC] ref-filter: add %(rest) atom ZheNing Hu via GitGitGadget
2021-07-24 14:14 ` [PATCH v3 0/5] [GSOC] ref-filter: add %(raw) and %(rest) atoms ZheNing Hu via GitGitGadget
2021-07-24 14:14 ` [PATCH v3 1/5] [GSOC] ref-filter: add obj-type check in grab contents ZheNing Hu via GitGitGadget
2021-07-25 8:22 ` Jacob Keller
2021-07-24 14:14 ` [PATCH v3 2/5] [GSOC] ref-filter: add %(raw) atom ZheNing Hu via GitGitGadget
2021-07-24 14:14 ` [PATCH v3 3/5] [GSOC] ref-filter: --format=%(raw) re-support --perl ZheNing Hu via GitGitGadget
2021-07-25 8:27 ` Jacob Keller
2021-07-25 13:18 ` ZheNing Hu
2021-07-24 14:14 ` [PATCH v3 4/5] [GSOC] ref-filter: use non-const ref_format in *_atom_parser() ZheNing Hu via GitGitGadget
2021-07-24 14:14 ` [PATCH v3 5/5] [GSOC] ref-filter: add %(rest) atom ZheNing Hu via GitGitGadget
2021-07-25 8:29 ` Jacob Keller
2021-07-26 17:34 ` Junio C Hamano
2021-07-26 3:26 ` [PATCH v4 0/5] [GSOC] ref-filter: add %(raw) and %(rest) atoms ZheNing Hu via GitGitGadget
2021-07-26 3:26 ` [PATCH v4 1/5] [GSOC] ref-filter: add obj-type check in grab contents ZheNing Hu via GitGitGadget
2021-07-26 19:15 ` Junio C Hamano
2021-07-27 1:41 ` ZheNing Hu
2021-07-26 3:26 ` [PATCH v4 2/5] [GSOC] ref-filter: add %(raw) atom ZheNing Hu via GitGitGadget
2021-07-26 3:26 ` [PATCH v4 3/5] [GSOC] ref-filter: --format=%(raw) support --perl ZheNing Hu via GitGitGadget
2021-07-26 3:26 ` [PATCH v4 4/5] [GSOC] ref-filter: use non-const ref_format in *_atom_parser() ZheNing Hu via GitGitGadget
2021-07-26 3:26 ` [PATCH v4 5/5] [GSOC] ref-filter: add %(rest) atom ZheNing Hu via GitGitGadget
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=pull.1000.v2.git.1627031043.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=adlternative@gmail.com \
--cc=avarab@gmail.com \
--cc=bagasdotme@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hariom18599@gmail.com \
--cc=peff@peff.net \
--cc=philipoakley@iee.email \
--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.
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.