All of lore.kernel.org
 help / color / mirror / Atom feed
From: ZheNing Hu <adlternative@gmail.com>
To: "René Scharfe" <l.s.r@web.de>
Cc: "Git List" <git@vger.kernel.org>,
	"Junio C Hamano" <gitster@pobox.com>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	"Jeff King" <peff@peff.net>
Subject: Re: [PATCH 1/3] diff: factor out add_diff_options()
Date: Thu, 1 Dec 2022 22:11:59 +0800	[thread overview]
Message-ID: <CAOLTT8SpF=i6Lwc28SWSDf2uOqoxLpMHiVS5GefwYcCHigL2NQ@mail.gmail.com> (raw)
In-Reply-To: <19be5afa-63e8-5f11-c5f4-6f391677e4c4@web.de>

Hi,

René Scharfe <l.s.r@web.de> 于2022年12月1日周四 02:13写道:
>
> Add a function for appending the parseopts member of struct diff_options
> to a struct option array.  Use it in two sites instead of accessing the
> parseopts member directly.  Decoupling callers from diff internals like
> that allows us to change the latter.
>
> Signed-off-by: René Scharfe <l.s.r@web.de>
> ---
>  builtin/range-diff.c | 2 +-
>  diff-no-index.c      | 3 +--
>  diff.c               | 6 ++++++
>  diff.h               | 1 +
>  4 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/builtin/range-diff.c b/builtin/range-diff.c
> index e2a74efb42..aecfae12d3 100644
> --- a/builtin/range-diff.c
> +++ b/builtin/range-diff.c
> @@ -47,7 +47,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
>
>         repo_diff_setup(the_repository, &diffopt);
>
> -       options = parse_options_concat(range_diff_options, diffopt.parseopts);
> +       options = add_diff_options(range_diff_options, &diffopt);
>         argc = parse_options(argc, argv, prefix, options,
>                              builtin_range_diff_usage, PARSE_OPT_KEEP_DASHDASH);
>
> diff --git a/diff-no-index.c b/diff-no-index.c
> index 18edbdf4b5..05fafd0019 100644
> --- a/diff-no-index.c
> +++ b/diff-no-index.c
> @@ -255,8 +255,7 @@ int diff_no_index(struct rev_info *revs,
>         };
>         struct option *options;
>
> -       options = parse_options_concat(no_index_options,
> -                                      revs->diffopt.parseopts);
> +       options = add_diff_options(no_index_options, &revs->diffopt);
>         argc = parse_options(argc, argv, revs->prefix, options,
>                              diff_no_index_usage, 0);
>         if (argc != 2) {
> diff --git a/diff.c b/diff.c
> index 1054a4b732..e01129f0ea 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -5693,6 +5693,12 @@ static void prep_parse_options(struct diff_options *options)
>         memcpy(options->parseopts, parseopts, sizeof(parseopts));
>  }
>
> +struct option *add_diff_options(const struct option *parseopts,
> +                               struct diff_options *options)
> +{
> +       return parse_options_concat(parseopts, options->parseopts);
> +}
> +

This idea is very good. I am implementing `--scope` for git diff
recently [1], but I
don’t want this option to be directly inherited by commands such as git log,
git format-patch, etc. It would be best if the option can be added
dynamically...
This patch looks like it can be used to do just that! :)

>  int diff_opt_parse(struct diff_options *options,
>                    const char **av, int ac, const char *prefix)
>  {
> diff --git a/diff.h b/diff.h
> index fd33caeb25..c20a1ad76d 100644
> --- a/diff.h
> +++ b/diff.h
> @@ -539,6 +539,7 @@ int git_diff_ui_config(const char *var, const char *value, void *cb);
>  #define diff_setup(diffopts) repo_diff_setup(the_repository, diffopts)
>  #endif
>  void repo_diff_setup(struct repository *, struct diff_options *);
> +struct option *add_diff_options(const struct option *, struct diff_options *);
>  int diff_opt_parse(struct diff_options *, const char **, int, const char *);
>  void diff_setup_done(struct diff_options *);
>  int git_config_rename(const char *var, const char *value);
> --
> 2.38.1

Thanks!

[1]: https://lore.kernel.org/git/pull.1398.v3.git.1669723221.gitgitgadget@gmail.com/

  reply	other threads:[~2022-12-01 14:12 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-30 18:01 [PATCH 0/3] diff: build parseopts array on demand René Scharfe
2022-11-30 18:03 ` [PATCH 1/3] diff: factor out add_diff_options() René Scharfe
2022-12-01 14:11   ` ZheNing Hu [this message]
2022-11-30 18:04 ` [PATCH 2/3] diff: let prep_parse_options() return parseopt array René Scharfe
2022-11-30 18:04 ` [PATCH 3/3] diff: remove parseopts member of struct diff_options René Scharfe
2022-12-01  1:25   ` Junio C Hamano
2022-12-01  7:52     ` René Scharfe
2022-12-01 21:56       ` Junio C Hamano
2022-12-01 22:45         ` René Scharfe
2022-12-01  1:02 ` [PATCH 0/3] diff: build parseopts array on demand Junio C Hamano
2022-12-01 13:39 ` [PATCH v2 " René Scharfe
2022-12-01 13:42   ` [PATCH v2 1/3] diff: factor out add_diff_options() René Scharfe
2022-12-01 13:43   ` [PATCH v2 2/3] diff: let prep_parse_options() return parseopt array René Scharfe
2022-12-01 13:44   ` [PATCH v2 3/3] diff: remove parseopts member from struct diff_options René Scharfe
2022-12-01 16:54   ` [PATCH v2 0/3] diff: build parseopts array on demand Ævar Arnfjörð Bjarmason
2022-12-01 19:01     ` René Scharfe
2022-12-01 19:19       ` Eric Sunshine
2022-12-01 19:43         ` René Scharfe
2022-12-01 23:00       ` Ævar Arnfjörð Bjarmason
2022-12-01 22:45 ` [PATCH v3 " René Scharfe
2022-12-01 22:49   ` [PATCH v3 1/3] diff: factor out add_diff_options() René Scharfe
2022-12-01 22:51   ` [PATCH v3 2/3] diff: use add_diff_options() in diff_opt_parse() René Scharfe
2022-12-01 22:53   ` [PATCH v3 3/3] diff: remove parseopts member from struct diff_options René Scharfe

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='CAOLTT8SpF=i6Lwc28SWSDf2uOqoxLpMHiVS5GefwYcCHigL2NQ@mail.gmail.com' \
    --to=adlternative@gmail.com \
    --cc=avarab@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=l.s.r@web.de \
    --cc=peff@peff.net \
    /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.