From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>, "Jeff King" <peff@peff.net>,
"Jiang Xin" <zhiyou.jx@alibaba-inc.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH 4/4] pack-objects.c: make use of REV_INFO_STDIN_LINE_PROCESS
Date: Tue, 8 Jun 2021 14:16:30 +0200 [thread overview]
Message-ID: <patch-4.4-15a3a5d047-20210608T121008Z-avarab@gmail.com> (raw)
In-Reply-To: <cover-0.4-0000000000-20210608T121008Z-avarab@gmail.com>
Continue the work started in the preceding commit of porting
pack-objects.c over to the new handle_stdin_line callback pattern. The
common case for the users of this API is to do some of their own
parsing or munging, and then have handle_revision_arg() handle the
rest.
The existing users of the --stdin parsing always wanted a flag of "0"
to be passed to handle_revision_arg(), but pack-objects.c wants to set
custom flags. Let's support this common case by having a
"revarg_flags" member in the "rev_info" struct.
This allows us to return REV_INFO_STDIN_LINE_PROCESS in the new
get_object_list_handle_stdin_line() instead of
REV_INFO_STDIN_LINE_CONTINUE, as read_revisions_from_stdin() will now
pass down the right flag for us.
This also means that we can make the handle_revision_arg() function
static. Now that the only external user of the API has been migrated
over to the callback mechanism nothing external to revision.c needs to
call handle_revision_arg() anymore.
That handle_revision_arg() function was made public in a combination
of 5d6f0935e6d (revision.c: allow injecting revision parameters after
setup_revisions()., 2006-09-05) and b5d97e6b0a0 (pack-objects: run
rev-list equivalent internally., 2006-09-04).
This change leaves the briefly-used in preceding commits
"void *stdin_line_priv" without any in-tree user, as
builtin/pack-objects.c could be ported over to our new "revarg_flags"
common case.
I'm leaving that "void *stdin_line_priv" in place anyway for two
reasons:
1. It's a common pattern to allow such a "void *" to be used for
callback data, so we might as well follow that pattern here in
anticipation of a future in-tree user.
2. I have patches for such an in-tree user already in a series
that'll be submitted after this one.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
builtin/pack-objects.c | 9 ++-------
revision.c | 4 ++--
revision.h | 6 ++++--
3 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index cbb01f2b2d..0ab2d10853 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -3748,7 +3748,6 @@ static void mark_bitmap_preferred_tips(void)
static enum rev_info_stdin_line get_object_list_handle_stdin_line(
struct rev_info *revs, struct strbuf *line_sb, void *stdin_line_priv)
{
- int *flags = stdin_line_priv;
char *line = line_sb->buf;
size_t len = line_sb->len;
@@ -3756,7 +3755,7 @@ static enum rev_info_stdin_line get_object_list_handle_stdin_line(
return REV_INFO_STDIN_LINE_BREAK;
if (*line == '-') {
if (!strcmp(line, "--not")) {
- *flags ^= UNINTERESTING;
+ revs->revarg_flags ^= UNINTERESTING;
write_bitmap_index = 0;
return REV_INFO_STDIN_LINE_CONTINUE;
}
@@ -3770,9 +3769,7 @@ static enum rev_info_stdin_line get_object_list_handle_stdin_line(
}
die(_("not a rev '%s'"), line);
}
- if (handle_revision_arg(line, revs, *flags, REVARG_CANNOT_BE_FILENAME))
- die(_("bad revision '%s'"), line);
- return REV_INFO_STDIN_LINE_CONTINUE;
+ return REV_INFO_STDIN_LINE_PROCESS;
}
static void get_object_list(int ac, const char **av)
@@ -3781,7 +3778,6 @@ static void get_object_list(int ac, const char **av)
struct setup_revision_opt s_r_opt = {
.allow_exclude_promisor_objects = 1,
};
- int flags = 0;
repo_init_revisions(the_repository, &revs, NULL);
save_commit_buffer = 0;
@@ -3791,7 +3787,6 @@ static void get_object_list(int ac, const char **av)
revs.stdin_handling = REV_INFO_STDIN_ALWAYS_READ;
revs.handle_stdin_line = get_object_list_handle_stdin_line;
- revs.stdin_line_priv = &flags;
setup_revisions(ac, av, &revs, &s_r_opt);
if (use_bitmap_index && !get_object_list_from_bitmap(&revs))
diff --git a/revision.c b/revision.c
index 878eb51032..8054a9d037 100644
--- a/revision.c
+++ b/revision.c
@@ -2089,7 +2089,7 @@ static int handle_revision_arg_1(const char *arg_, struct rev_info *revs, int fl
return 0;
}
-int handle_revision_arg(const char *arg, struct rev_info *revs, int flags, unsigned revarg_opt)
+static int handle_revision_arg(const char *arg, struct rev_info *revs, int flags, unsigned revarg_opt)
{
int ret = handle_revision_arg_1(arg, revs, flags, revarg_opt);
if (!ret)
@@ -2145,7 +2145,7 @@ static void read_revisions_from_stdin(struct rev_info *revs,
}
die("options not supported in --stdin mode");
}
- if (handle_revision_arg(sb.buf, revs, 0,
+ if (handle_revision_arg(sb.buf, revs, revs->revarg_flags,
REVARG_CANNOT_BE_FILENAME))
die("bad revision '%s'", sb.buf);
}
diff --git a/revision.h b/revision.h
index 9d977cd3cc..c55147e7f2 100644
--- a/revision.h
+++ b/revision.h
@@ -156,6 +156,9 @@ struct rev_info {
* - Return 0 to continue revision.c's normal processing of the
* line (after possibly munging the provided strbuf).
*
+ * Change "revarg_flags" to affect the subsequent handling
+ * in handle_revision_arg()
+ *
* - Return 1 to indicate that the line is fully processed,
* moving onto the next line (if any)
*
@@ -165,6 +168,7 @@ struct rev_info {
* around.
*/
rev_info_stdin_line_func handle_stdin_line;
+ int revarg_flags;
void *stdin_line_priv;
/* topo-sort */
@@ -422,8 +426,6 @@ void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,
const char * const usagestr[]);
#define REVARG_CANNOT_BE_FILENAME 01
#define REVARG_COMMITTISH 02
-int handle_revision_arg(const char *arg, struct rev_info *revs,
- int flags, unsigned revarg_opt);
/**
* Reset the flags used by the revision walking api. You can use this to do
--
2.32.0.rc3.434.gd8aed1f08a7
next prev parent reply other threads:[~2021-06-08 12:17 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-08 12:16 [PATCH 0/4] pack-objects: use revision.c's --stdin parsing Ævar Arnfjörð Bjarmason
2021-06-08 12:16 ` [PATCH 1/4] upload-pack: run is_repository_shallow() before setup_revisions() Ævar Arnfjörð Bjarmason
2021-06-08 12:16 ` [PATCH 2/4] revision.h: unify "disable_stdin" and "read_from_stdin" Ævar Arnfjörð Bjarmason
2021-06-08 12:16 ` [PATCH 3/4] pack-objects.c: do stdin parsing via revision.c's API Ævar Arnfjörð Bjarmason
2021-06-09 8:10 ` Junio C Hamano
2021-06-08 12:16 ` Ævar Arnfjörð Bjarmason [this message]
2021-06-17 10:57 ` [PATCH v2 0/4] pack-objects: use revision.c's --stdin parsing Ævar Arnfjörð Bjarmason
2021-06-17 10:57 ` [PATCH v2 1/4] upload-pack: run is_repository_shallow() before setup_revisions() Ævar Arnfjörð Bjarmason
2021-06-17 10:57 ` [PATCH v2 2/4] revision.h: unify "disable_stdin" and "read_from_stdin" Ævar Arnfjörð Bjarmason
2021-06-17 23:44 ` Emily Shaffer
2021-06-18 17:54 ` Jonathan Tan
2021-06-17 10:57 ` [PATCH v2 3/4] pack-objects.c: do stdin parsing via revision.c's API Ævar Arnfjörð Bjarmason
2021-06-18 18:57 ` Jonathan Tan
2021-06-17 10:57 ` [PATCH v2 4/4] pack-objects.c: make use of REV_INFO_STDIN_LINE_PROCESS Ævar Arnfjörð Bjarmason
2021-06-21 15:10 ` [PATCH v3 0/4] pack-objects: use revision.c's --stdin parsing Ævar Arnfjörð Bjarmason
2021-06-21 15:10 ` [PATCH v3 1/4] upload-pack: run is_repository_shallow() before setup_revisions() Ævar Arnfjörð Bjarmason
2021-06-21 15:10 ` [PATCH v3 2/4] revision.h: refactor "disable_stdin" and "read_from_stdin" Ævar Arnfjörð Bjarmason
2021-07-08 22:10 ` Junio C Hamano
2021-06-21 15:10 ` [PATCH v3 3/4] pack-objects.c: do stdin parsing via revision.c's API Ævar Arnfjörð Bjarmason
2021-07-08 22:21 ` Junio C Hamano
2021-06-21 15:10 ` [PATCH v3 4/4] pack-objects.c: make use of REV_INFO_STDIN_LINE_PROCESS Ævar Arnfjörð Bjarmason
2021-07-08 22:21 ` Junio C Hamano
2021-07-09 11:06 ` [PATCH v4 0/5] revision.[ch]: add --stdin parsing API, use in pack-objects Ævar Arnfjörð Bjarmason
2021-07-09 11:06 ` [PATCH v4 1/5] upload-pack: run is_repository_shallow() before setup_revisions() Ævar Arnfjörð Bjarmason
2021-07-09 11:06 ` [PATCH v4 2/5] revision.h: refactor "disable_stdin" and "read_from_stdin" Ævar Arnfjörð Bjarmason
2021-07-09 20:17 ` Junio C Hamano
2021-07-09 11:06 ` [PATCH v4 3/5] revision.[ch]: add a "handle_stdin_line" API Ævar Arnfjörð Bjarmason
2021-07-09 11:06 ` [PATCH v4 4/5] pack-objects.c: do stdin parsing via revision.c's API Ævar Arnfjörð Bjarmason
2021-07-09 11:06 ` [PATCH v4 5/5] pack-objects.c: make use of REV_INFO_STDIN_LINE_PROCESS Ævar Arnfjörð Bjarmason
2021-07-26 12:46 ` [PATCH v5 0/5] add --stdin parsing API, use in pack-objects Ævar Arnfjörð Bjarmason
2021-07-26 12:46 ` [PATCH v5 1/5] upload-pack: run is_repository_shallow() before setup_revisions() Ævar Arnfjörð Bjarmason
2021-07-26 12:46 ` [PATCH v5 2/5] revision.h: refactor "disable_stdin" and "read_from_stdin" Ævar Arnfjörð Bjarmason
2021-07-26 12:46 ` [PATCH v5 3/5] revision.[ch]: add a "handle_stdin_line" API Ævar Arnfjörð Bjarmason
2021-07-26 12:46 ` [PATCH v5 4/5] pack-objects.c: do stdin parsing via revision.c's API Ævar Arnfjörð Bjarmason
2021-07-26 12:46 ` [PATCH v5 5/5] pack-objects.c: make use of REV_INFO_STDIN_LINE_PROCESS Ævar Arnfjörð Bjarmason
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=patch-4.4-15a3a5d047-20210608T121008Z-avarab@gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=zhiyou.jx@alibaba-inc.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.