From: Junio C Hamano <gitster@pobox.com>
To: Christian Couder <christian.couder@gmail.com>
Cc: git@vger.kernel.org, John Cai <johncai86@gmail.com>,
Patrick Steinhardt <ps@pks.im>,
Christian Couder <chriscool@tuxfamily.org>
Subject: Re: [PATCH 1/4] rev-list: refactor --missing=<missing-action>
Date: Thu, 18 Apr 2024 14:39:03 -0700 [thread overview]
Message-ID: <xmqqplumpczs.fsf@gitster.g> (raw)
In-Reply-To: <20240418184043.2900955-2-christian.couder@gmail.com> (Christian Couder's message of "Thu, 18 Apr 2024 20:40:40 +0200")
Christian Couder <christian.couder@gmail.com> writes:
> Both `git rev-list` and `git pack-objects` support a
> `--missing=<missing-action>` feature, but they currently don't share
> any code for that.
So "git pack-objects" will still stay unaware of <missing.h> after
this step, which was a bit unexpected.
> For now, this refactoring is about moving code from
> "builtin/rev-list.c" into new "missing.{c,h}" files. But in a
> following commit, that refactored code will be used in
> `git pack-objects` too.
I think it is easier to grok if you said this in the second
paragraph, before mentioning "another command". The first paragraph
talks about rev-list and pack-objects logically but not phisically
sharing the feature, so with "For now, this refactoring is about
moving ... into" -> "Refactor the support for --missing in rev-list
into", it is enough to explain how this change is a first step to
make things better, without bringing the third thing into picture.
IOW ...
> In a following commit, we are going to add support for a similar
> 'missing-action' feature to another command. To avoid duplicating
> similar code, let's start refactoring the rev-list code for this
> feature into new "missing.{c,h}" files.
... this paragraph should have much lower weight in explaining this
commit.
> As `enum missing_action` and parse_missing_action_value() are moved to
> "missing.{c,h}", we need to modify the later a bit, so that it stops
"later" -> "latter"?
> updating a global variable, but instead returns either -1 on error or
> the parsed value otherwise.
OK. As a shared helper function, I agree that assignment to a global
should be outside of its responsibility. Which means that the caller
is now responsible for making that assignment.
> static int try_bitmap_count(struct rev_info *revs,
> int filter_provided_objects)
> {
> @@ -569,10 +536,14 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
> for (i = 1; i < argc; i++) {
> const char *arg = argv[i];
> if (skip_prefix(arg, "--missing=", &arg)) {
> + int res;
> if (revs.exclude_promisor_objects)
> die(_("options '%s' and '%s' cannot be used together"), "--exclude-promisor-objects", "--missing");
> - if (parse_missing_action_value(arg))
> + res = parse_missing_action_value(arg);
> + if (res >= 0) {
> + arg_missing_action = res;
> break;
> + }
... which seems to be missing from here.
> }
> }
>
> diff --git a/missing.c b/missing.c
> new file mode 100644
> index 0000000000..83e0c5e584
> --- /dev/null
> +++ b/missing.c
> @@ -0,0 +1,26 @@
> +#include "git-compat-util.h"
> +#include "missing.h"
> +#include "object-file.h"
> +
> +int parse_missing_action_value(const char *value)
> +{
> + if (!strcmp(value, "error"))
> + return MA_ERROR;
> +
> + if (!strcmp(value, "allow-any")) {
> + fetch_if_missing = 0;
> + return MA_ALLOW_ANY;
> + }
> +
> + if (!strcmp(value, "print")) {
> + fetch_if_missing = 0;
> + return MA_PRINT;
> + }
> +
> + if (!strcmp(value, "allow-promisor")) {
> + fetch_if_missing = 0;
> + return MA_ALLOW_PROMISOR;
> + }
... and this one still touches the global.
> + return -1;
> +}
> diff --git a/missing.h b/missing.h
> new file mode 100644
> index 0000000000..c8261dfe55
> --- /dev/null
> +++ b/missing.h
> @@ -0,0 +1,18 @@
> +#ifndef MISSING_H
> +#define MISSING_H
> +
> +enum missing_action {
> + MA_ERROR = 0, /* fail if any missing objects are encountered */
> + MA_ALLOW_ANY, /* silently allow ALL missing objects */
> + MA_PRINT, /* print ALL missing objects in special section */
> + MA_ALLOW_PROMISOR, /* silently allow all missing PROMISOR objects */
> +};
> +
> +/*
> + Return an `enum missing_action` in case parsing is successful or -1
> + if parsing failed. Also sets the fetch_if_missing global variable
> + from "object-file.h".
> + */
... and this also mentions the global.
> +int parse_missing_action_value(const char *value);
> +
> +#endif /* MISSING_H */
next prev parent reply other threads:[~2024-04-18 21:39 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-18 18:40 [PATCH 0/4] upload-pack: support a missing-action Christian Couder
2024-04-18 18:40 ` [PATCH 1/4] rev-list: refactor --missing=<missing-action> Christian Couder
2024-04-18 21:39 ` Junio C Hamano [this message]
2024-04-18 18:40 ` [PATCH 2/4] missing: support rejecting --missing=print Christian Couder
2024-04-18 21:47 ` Junio C Hamano
2024-04-18 18:40 ` [PATCH 3/4] pack-objects: use the missing action API Christian Couder
2024-04-18 18:40 ` [PATCH 4/4] upload-pack: allow configuring a missing-action Christian Couder
2024-04-18 19:21 ` [PATCH 0/4] upload-pack: support " Junio C Hamano
2024-05-24 16:39 ` [PATCH v3 0/3] " Christian Couder
2024-05-24 16:39 ` [PATCH v3 1/3] rev-list: refactor --missing=<missing-action> Christian Couder
2024-05-24 16:39 ` [PATCH v3 2/3] pack-objects: use the missing action API Christian Couder
2024-05-24 16:39 ` [PATCH v3 3/3] upload-pack: allow configuring a missing-action Christian Couder
2024-05-24 18:25 ` [PATCH v3 0/3] upload-pack: support " Junio C Hamano
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=xmqqplumpczs.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=chriscool@tuxfamily.org \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=johncai86@gmail.com \
--cc=ps@pks.im \
/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.