advice: don't pointlessly suggest --convert-graft-file
diff mbox series

Message ID 20181127201255.3529-1-avarab@gmail.com
State New
Headers show
Series
  • advice: don't pointlessly suggest --convert-graft-file
Related show

Commit Message

Ævar Arnfjörð Bjarmason Nov. 27, 2018, 8:12 p.m. UTC
The advice to run 'git replace --convert-graft-file' added in
f9f99b3f7d ("Deprecate support for .git/info/grafts", 2018-04-29)
didn't add an exception for the 'git replace --convert-graft-file'
codepath itself.

As a result we'd suggest running --convert-graft-file while the user
was running --convert-graft-file, which makes no sense. Before:

    $ git replace --convert-graft-file
    hint: Support for <GIT_DIR>/info/grafts is deprecated
    hint: and will be removed in a future Git version.
    hint:
    hint: Please use "git replace --convert-graft-file"
    hint: to convert the grafts into replace refs.
    hint:
    hint: Turn this message off by running
    hint: "git config advice.graftFileDeprecated false"

Add a check for that case and skip printing the advice while the user
is busy following our advice.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 builtin/replace.c  | 1 +
 t/t6050-replace.sh | 5 ++++-
 2 files changed, 5 insertions(+), 1 deletion(-)

Comments

Junio C Hamano Nov. 28, 2018, 6:34 a.m. UTC | #1
Ævar Arnfjörð Bjarmason  <avarab@gmail.com> writes:

> The advice to run 'git replace --convert-graft-file' added in
> f9f99b3f7d ("Deprecate support for .git/info/grafts", 2018-04-29)
> didn't add an exception for the 'git replace --convert-graft-file'
> codepath itself.
>
> As a result we'd suggest running --convert-graft-file while the user
> was running --convert-graft-file, which makes no sense. Before:
>
>     $ git replace --convert-graft-file
>     hint: Support for <GIT_DIR>/info/grafts is deprecated
>     hint: and will be removed in a future Git version.
>     hint:
>     hint: Please use "git replace --convert-graft-file"
>     hint: to convert the grafts into replace refs.
>     hint:
>     hint: Turn this message off by running
>     hint: "git config advice.graftFileDeprecated false"

That's a good one.  The glitch is real, the improvement is obvious,
and the implementation seems to be straight-forward and sensible.

How did you find one, is the real question ;-)
Johannes Schindelin Nov. 28, 2018, 9:03 a.m. UTC | #2
Hi Ævar,

On Tue, 27 Nov 2018, Ævar Arnfjörð Bjarmason wrote:

> The advice to run 'git replace --convert-graft-file' added in
> f9f99b3f7d ("Deprecate support for .git/info/grafts", 2018-04-29)
> didn't add an exception for the 'git replace --convert-graft-file'
> codepath itself.
> 
> As a result we'd suggest running --convert-graft-file while the user
> was running --convert-graft-file, which makes no sense. Before:
> 
>     $ git replace --convert-graft-file
>     hint: Support for <GIT_DIR>/info/grafts is deprecated
>     hint: and will be removed in a future Git version.
>     hint:
>     hint: Please use "git replace --convert-graft-file"
>     hint: to convert the grafts into replace refs.
>     hint:
>     hint: Turn this message off by running
>     hint: "git config advice.graftFileDeprecated false"
> 
> Add a check for that case and skip printing the advice while the user
> is busy following our advice.
> 
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
>  builtin/replace.c  | 1 +
>  t/t6050-replace.sh | 5 ++++-
>  2 files changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/builtin/replace.c b/builtin/replace.c
> index a58b9c6d13..affcdfb416 100644
> --- a/builtin/replace.c
> +++ b/builtin/replace.c
> @@ -495,6 +495,7 @@ static int convert_graft_file(int force)
>  	if (!fp)
>  		return -1;
>  
> +	advice_graft_file_deprecated = 0;
>  	while (strbuf_getline(&buf, fp) != EOF) {
>  		if (*buf.buf == '#')
>  			continue;

As long as we keep this code in the one-shot code path, it is probably
okay. Otherwise we'd have to save the original value and restoring it
before returning from this function.

But then, we might never move `convert_graft_file()` into `libgit.a`.

Thanks,
Dscho

> diff --git a/t/t6050-replace.sh b/t/t6050-replace.sh
> index 86374a9c52..5d6d3184ac 100755
> --- a/t/t6050-replace.sh
> +++ b/t/t6050-replace.sh
> @@ -461,7 +461,10 @@ test_expect_success '--convert-graft-file' '
>  	printf "%s\n%s %s\n\n# comment\n%s\n" \
>  		$(git rev-parse HEAD^^ HEAD^ HEAD^^ HEAD^2) \
>  		>.git/info/grafts &&
> -	git replace --convert-graft-file &&
> +	git status 2>stderr &&
> +	test_i18ngrep "hint:.*grafts is deprecated" stderr &&
> +	git replace --convert-graft-file 2>stderr &&
> +	test_i18ngrep ! "hint:.*grafts is deprecated" stderr &&
>  	test_path_is_missing .git/info/grafts &&
>  
>  	: verify that the history is now "grafted" &&
> -- 
> 2.20.0.rc1.379.g1dd7ef354c
> 
>

Patch
diff mbox series

diff --git a/builtin/replace.c b/builtin/replace.c
index a58b9c6d13..affcdfb416 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -495,6 +495,7 @@  static int convert_graft_file(int force)
 	if (!fp)
 		return -1;
 
+	advice_graft_file_deprecated = 0;
 	while (strbuf_getline(&buf, fp) != EOF) {
 		if (*buf.buf == '#')
 			continue;
diff --git a/t/t6050-replace.sh b/t/t6050-replace.sh
index 86374a9c52..5d6d3184ac 100755
--- a/t/t6050-replace.sh
+++ b/t/t6050-replace.sh
@@ -461,7 +461,10 @@  test_expect_success '--convert-graft-file' '
 	printf "%s\n%s %s\n\n# comment\n%s\n" \
 		$(git rev-parse HEAD^^ HEAD^ HEAD^^ HEAD^2) \
 		>.git/info/grafts &&
-	git replace --convert-graft-file &&
+	git status 2>stderr &&
+	test_i18ngrep "hint:.*grafts is deprecated" stderr &&
+	git replace --convert-graft-file 2>stderr &&
+	test_i18ngrep ! "hint:.*grafts is deprecated" stderr &&
 	test_path_is_missing .git/info/grafts &&
 
 	: verify that the history is now "grafted" &&