Re: [PATCH v4 1/2] name-rev: deprecate --stdin in favor of --annotate-stdin
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Jan 5, 2022, 11:15 UTC
- Message-ID
- <16666d32-833a-f3d7-351a-eeef7f25b002@gmail.com>
- In-Reply-To
- <4e9200922a4c2c91e69e3b497fbf4c8702046a27.1641307776.git.gitgitgadget@gmail.com>
Hi John
On 04/01/2022 14:49, John Cai via GitGitGadget wrote:
Show 19 quoted lines
> From: John Cai <johncai86@gmail.com>
> [...]
> diff --git a/builtin/name-rev.c b/builtin/name-rev.c
> index 27f60153a6c..21370afdaf9 100644
> --- a/builtin/name-rev.c
> +++ b/builtin/name-rev.c
> @@ -527,7 +527,7 @@ static void name_rev_line(char *p, struct name_ref_data *data)
> int cmd_name_rev(int argc, const char **argv, const char *prefix)
> {
> struct object_array revs = OBJECT_ARRAY_INIT;
> - int all = 0, transform_stdin = 0, allow_undefined = 1, always = 0, peel_tag = 0;
> + int all = 0, annotate_stdin = 0, transform_stdin = 0, allow_undefined = 1, always = 0, peel_tag = 0;
> struct name_ref_data data = { 0, 0, STRING_LIST_INIT_NODUP, STRING_LIST_INIT_NODUP };
> struct option opts[] = {
> OPT_BOOL(0, "name-only", &data.name_only, N_("print only ref-based names (no object names)")),
> @@ -539,6 +539,7 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
> OPT_GROUP(""),
> OPT_BOOL(0, "all", &all, N_("list all commits reachable from all refs")),
> OPT_BOOL(0, "stdin", &transform_stdin, N_("read from stdin")),If the intention is to deprecate this option then it might be worth marking it as PARSE_OPT_HIDDEN so that it is not shown by 'git name-rev -h'. (You need to change OPT_BOOL to OPT_BOOL_F to pass the flag)
Show 34 quoted lines
> + OPT_BOOL(0, "annotate-stdin", &annotate_stdin, N_("annotate text from stdin")),
> OPT_BOOL(0, "undefined", &allow_undefined, N_("allow to print `undefined` names (default)")),
> OPT_BOOL(0, "always", &always,
> N_("show abbreviated commit object as fallback")),
> @@ -554,11 +555,19 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
> init_commit_rev_name(&rev_names);
> git_config(git_default_config, NULL);
> argc = parse_options(argc, argv, prefix, opts, name_rev_usage, 0);
> - if (all + transform_stdin + !!argc > 1) {
> +
> + if (transform_stdin) {
> + warning("--stdin is deprecated. Please use --annotate-stdin instead, "
> + "which is functionally equivalent.\n"
> + "This option will be removed in a future release.");
> + annotate_stdin = 1;
> + }
> +
> + if (all + annotate_stdin + !!argc > 1) {
> error("Specify either a list, or --all, not both!");
> usage_with_options(name_rev_usage, opts);
> }
> - if (all || transform_stdin)
> + if (all || annotate_stdin)
> cutoff = 0;
>
> for (; argc; argc--, argv++) {
> @@ -613,8 +622,8 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
> for_each_ref(name_ref, &data);
> name_tips();
>
> - if (transform_stdin) {
> - char buffer[2048];
> + if (annotate_stdin) {
> + struct strbuf sb = STRBUF_INIT;I think this hunk belongs in the next patch. Before posting a patch series I find it helpful to run
git rebase --keep-base -x'make -j4 git && cd t && prove -j4 <tests I think might fail> :: --root=/dev/shm'
to check that the individual patches compile and pass the relevant tests. I've never got round to trying it but git-test[1] also lets you test all the commits in a series
Best Wishes
Phillip
[1] https://github.com/mhagger/git-test
Show 204 quoted lines
> while (!feof(stdin)) {
> char *p = fgets(buffer, sizeof(buffer), stdin);
> diff --git a/t/t3412-rebase-root.sh b/t/t3412-rebase-root.sh
> index 19c6f4acbf6..1e9f7833dd6 100755
> --- a/t/t3412-rebase-root.sh
> +++ b/t/t3412-rebase-root.sh
> @@ -11,7 +11,7 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
>
> log_with_names () {
> git rev-list --topo-order --parents --pretty="tformat:%s" HEAD |
> - git name-rev --stdin --name-only --refs=refs/heads/$1
> + git name-rev --annotate-stdin --name-only --refs=refs/heads/$1
> }
>
>
> diff --git a/t/t4202-log.sh b/t/t4202-log.sh
> index 50495598619..dc884107de4 100755
> --- a/t/t4202-log.sh
> +++ b/t/t4202-log.sh
> @@ -659,7 +659,7 @@ EOF
>
> test_expect_success 'log --graph with full output' '
> git log --graph --date-order --pretty=short |
> - git name-rev --name-only --stdin |
> + git name-rev --name-only --annotate-stdin |
> sed "s/Merge:.*/Merge: A B/;s/ *\$//" >actual &&
> test_cmp expect actual
> '
> diff --git a/t/t6007-rev-list-cherry-pick-file.sh b/t/t6007-rev-list-cherry-pick-file.sh
> index aebe4b69e13..6f3e5439771 100755
> --- a/t/t6007-rev-list-cherry-pick-file.sh
> +++ b/t/t6007-rev-list-cherry-pick-file.sh
> @@ -58,7 +58,7 @@ EOF
>
> test_expect_success '--left-right' '
> git rev-list --left-right B...C > actual &&
> - git name-rev --stdin --name-only --refs="*tags/*" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/*" \
> < actual > actual.named &&
> test_cmp expect actual.named
> '
> @@ -78,14 +78,14 @@ EOF
>
> test_expect_success '--cherry-pick bar does not come up empty' '
> git rev-list --left-right --cherry-pick B...C -- bar > actual &&
> - git name-rev --stdin --name-only --refs="*tags/*" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/*" \
> < actual > actual.named &&
> test_cmp expect actual.named
> '
>
> test_expect_success 'bar does not come up empty' '
> git rev-list --left-right B...C -- bar > actual &&
> - git name-rev --stdin --name-only --refs="*tags/*" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/*" \
> < actual > actual.named &&
> test_cmp expect actual.named
> '
> @@ -97,14 +97,14 @@ EOF
>
> test_expect_success '--cherry-pick bar does not come up empty (II)' '
> git rev-list --left-right --cherry-pick F...E -- bar > actual &&
> - git name-rev --stdin --name-only --refs="*tags/*" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/*" \
> < actual > actual.named &&
> test_cmp expect actual.named
> '
>
> test_expect_success 'name-rev multiple --refs combine inclusive' '
> git rev-list --left-right --cherry-pick F...E -- bar >actual &&
> - git name-rev --stdin --name-only --refs="*tags/F" --refs="*tags/E" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/F" --refs="*tags/E" \
> <actual >actual.named &&
> test_cmp expect actual.named
> '
> @@ -116,7 +116,7 @@ EOF
> test_expect_success 'name-rev --refs excludes non-matched patterns' '
> git rev-list --left-right --right-only --cherry-pick F...E -- bar >>expect &&
> git rev-list --left-right --cherry-pick F...E -- bar >actual &&
> - git name-rev --stdin --name-only --refs="*tags/F" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/F" \
> <actual >actual.named &&
> test_cmp expect actual.named
> '
> @@ -128,14 +128,14 @@ EOF
> test_expect_success 'name-rev --exclude excludes matched patterns' '
> git rev-list --left-right --right-only --cherry-pick F...E -- bar >>expect &&
> git rev-list --left-right --cherry-pick F...E -- bar >actual &&
> - git name-rev --stdin --name-only --refs="*tags/*" --exclude="*E" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/*" --exclude="*E" \
> <actual >actual.named &&
> test_cmp expect actual.named
> '
>
> test_expect_success 'name-rev --no-refs clears the refs list' '
> git rev-list --left-right --cherry-pick F...E -- bar >expect &&
> - git name-rev --stdin --name-only --refs="*tags/F" --refs="*tags/E" --no-refs --refs="*tags/G" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/F" --refs="*tags/E" --no-refs --refs="*tags/G" \
> <expect >actual &&
> test_cmp expect actual
> '
> @@ -149,7 +149,7 @@ EOF
>
> test_expect_success '--cherry-mark' '
> git rev-list --cherry-mark F...E -- bar > actual &&
> - git name-rev --stdin --name-only --refs="*tags/*" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/*" \
> < actual > actual.named &&
> test_cmp expect actual.named
> '
> @@ -163,7 +163,7 @@ EOF
>
> test_expect_success '--cherry-mark --left-right' '
> git rev-list --cherry-mark --left-right F...E -- bar > actual &&
> - git name-rev --stdin --name-only --refs="*tags/*" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/*" \
> < actual > actual.named &&
> test_cmp expect actual.named
> '
> @@ -174,14 +174,14 @@ EOF
>
> test_expect_success '--cherry-pick --right-only' '
> git rev-list --cherry-pick --right-only F...E -- bar > actual &&
> - git name-rev --stdin --name-only --refs="*tags/*" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/*" \
> < actual > actual.named &&
> test_cmp expect actual.named
> '
>
> test_expect_success '--cherry-pick --left-only' '
> git rev-list --cherry-pick --left-only E...F -- bar > actual &&
> - git name-rev --stdin --name-only --refs="*tags/*" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/*" \
> < actual > actual.named &&
> test_cmp expect actual.named
> '
> @@ -193,7 +193,7 @@ EOF
>
> test_expect_success '--cherry' '
> git rev-list --cherry F...E -- bar > actual &&
> - git name-rev --stdin --name-only --refs="*tags/*" \
> + git name-rev --annotate-stdin --name-only --refs="*tags/*" \
> < actual > actual.named &&
> test_cmp expect actual.named
> '
> diff --git a/t/t6012-rev-list-simplify.sh b/t/t6012-rev-list-simplify.sh
> index 4f7fa8b6c03..4fedc614fa6 100755
> --- a/t/t6012-rev-list-simplify.sh
> +++ b/t/t6012-rev-list-simplify.sh
> @@ -12,7 +12,7 @@ note () {
> }
>
> unnote () {
> - git name-rev --tags --stdin | sed -e "s|$OID_REGEX (tags/\([^)]*\)) |\1 |g"
> + git name-rev --tags --annotate-stdin | sed -e "s|$OID_REGEX (tags/\([^)]*\)) |\1 |g"
> }
>
> #
> diff --git a/t/t6111-rev-list-treesame.sh b/t/t6111-rev-list-treesame.sh
> index e07b6070e0e..90ff1416400 100755
> --- a/t/t6111-rev-list-treesame.sh
> +++ b/t/t6111-rev-list-treesame.sh
> @@ -23,7 +23,8 @@ note () {
> }
>
> unnote () {
> - git name-rev --tags --stdin | sed -e "s|$OID_REGEX (tags/\([^)]*\))\([ ]\)|\1\2|g"
> + git name-rev --tags --annotate-stdin | \
> + sed -e "s|$OID_REGEX (tags/\([^)]*\))\([ ]\)|\1\2|g"
> }
>
> test_expect_success setup '
> diff --git a/t/t6120-describe.sh b/t/t6120-describe.sh
> index d8af2bb9d2b..9781b92aedd 100755
> --- a/t/t6120-describe.sh
> +++ b/t/t6120-describe.sh
> @@ -270,7 +270,7 @@ test_expect_success 'name-rev --all' '
> test_cmp expect actual
> '
>
> -test_expect_success 'name-rev --stdin' '
> +test_expect_success 'name-rev --annotate-stdin' '
> >expect.unsorted &&
> for rev in $(git rev-list --all)
> do
> @@ -278,11 +278,16 @@ test_expect_success 'name-rev --stdin' '
> echo "$rev ($name)" >>expect.unsorted || return 1
> done &&
> sort <expect.unsorted >expect &&
> - git rev-list --all | git name-rev --stdin >actual.unsorted &&
> + git rev-list --all | git name-rev --annotate-stdin >actual.unsorted &&
> sort <actual.unsorted >actual &&
> test_cmp expect actual
> '
>
> +test_expect_success 'name-rev --stdin deprecated' "
> + git rev-list --all | git name-rev --stdin 2>actual &&
> + grep -E 'warning: --stdin is deprecated' actual
> +"
> +
> test_expect_success 'describe --contains with the exact tags' '
> echo "A^0" >expect &&
> tag_object=$(git rev-parse refs/tags/A) &&
>