diff mbox series

object-name: fix quiet @{u} parsing

Message ID 20230316171514.23741-1-felipe.contreras@gmail.com (mailing list archive)
State Accepted
Commit dfbfdc521daece092a599959da79c3c134f26b3c
Headers show
Series object-name: fix quiet @{u} parsing | expand

Commit Message

Felipe Contreras March 16, 2023, 5:15 p.m. UTC
Currently `git rev-parse --quiet @{u}` is not actually quiet when
upstream isn't configured:

  fatal: no upstream configured for branch 'foo'

Make it so.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 object-name.c                 | 5 +++--
 t/t1507-rev-parse-upstream.sh | 5 +++++
 2 files changed, 8 insertions(+), 2 deletions(-)

Comments

Junio C Hamano March 16, 2023, 5:43 p.m. UTC | #1
Felipe Contreras <felipe.contreras@gmail.com> writes:

> Currently `git rev-parse --quiet @{u}` is not actually quiet when
> upstream isn't configured:
>
>   fatal: no upstream configured for branch 'foo'
>
> Make it so.
>
> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
> ---
>  object-name.c                 | 5 +++--
>  t/t1507-rev-parse-upstream.sh | 5 +++++
>  2 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/object-name.c b/object-name.c
> index 2dd1a0f56e..d9f3a176d8 100644
> --- a/object-name.c
> +++ b/object-name.c
> @@ -898,6 +898,7 @@ static int get_oid_basic(struct repository *r, const char *str, int len,
>  	char *real_ref = NULL;
>  	int refs_found = 0;
>  	int at, reflog_len, nth_prior = 0;
> +	int fatal = !(flags & GET_OID_QUIETLY);
>  
>  	if (len == r->hash_algo->hexsz && !get_oid_hex(str, oid)) {
>  		if (warn_ambiguous_refs && warn_on_object_refname_ambiguity) {
> @@ -952,11 +953,11 @@ static int get_oid_basic(struct repository *r, const char *str, int len,
>  
>  	if (!len && reflog_len)
>  		/* allow "@{...}" to mean the current branch reflog */
> -		refs_found = repo_dwim_ref(r, "HEAD", 4, oid, &real_ref, 0);
> +		refs_found = repo_dwim_ref(r, "HEAD", 4, oid, &real_ref, !fatal);
>  	else if (reflog_len)
>  		refs_found = repo_dwim_log(r, str, len, oid, &real_ref);
>  	else
> -		refs_found = repo_dwim_ref(r, str, len, oid, &real_ref, 0);
> +		refs_found = repo_dwim_ref(r, str, len, oid, &real_ref, !fatal);
>  
>  	if (!refs_found)
>  		return -1;

All of the above look sensible.

> diff --git a/t/t1507-rev-parse-upstream.sh b/t/t1507-rev-parse-upstream.sh
> index c34714ffe3..549eb315a9 100755
> --- a/t/t1507-rev-parse-upstream.sh
> +++ b/t/t1507-rev-parse-upstream.sh
> @@ -183,6 +183,11 @@ test_expect_success '@{u} error message when no upstream' '
>  	test_cmp expect actual
>  '
>  
> +test_expect_success '@{u} silent error when no upstream' '
> +	test_must_fail git rev-parse --verify --quiet @{u} 2>actual &&
> +	test_must_be_empty actual
> +'

OK.  This does not check what comes out to the standard output
stream at all, and only cares that the standard error stream emits
nothing.  Which is absolutely the right thing to do.  When a command
exits non-zero, we do not guarantee what output it emits, and the
invoker is expected to check the exit status.

Will queue.  Thanks.
diff mbox series

Patch

diff --git a/object-name.c b/object-name.c
index 2dd1a0f56e..d9f3a176d8 100644
--- a/object-name.c
+++ b/object-name.c
@@ -898,6 +898,7 @@  static int get_oid_basic(struct repository *r, const char *str, int len,
 	char *real_ref = NULL;
 	int refs_found = 0;
 	int at, reflog_len, nth_prior = 0;
+	int fatal = !(flags & GET_OID_QUIETLY);
 
 	if (len == r->hash_algo->hexsz && !get_oid_hex(str, oid)) {
 		if (warn_ambiguous_refs && warn_on_object_refname_ambiguity) {
@@ -952,11 +953,11 @@  static int get_oid_basic(struct repository *r, const char *str, int len,
 
 	if (!len && reflog_len)
 		/* allow "@{...}" to mean the current branch reflog */
-		refs_found = repo_dwim_ref(r, "HEAD", 4, oid, &real_ref, 0);
+		refs_found = repo_dwim_ref(r, "HEAD", 4, oid, &real_ref, !fatal);
 	else if (reflog_len)
 		refs_found = repo_dwim_log(r, str, len, oid, &real_ref);
 	else
-		refs_found = repo_dwim_ref(r, str, len, oid, &real_ref, 0);
+		refs_found = repo_dwim_ref(r, str, len, oid, &real_ref, !fatal);
 
 	if (!refs_found)
 		return -1;
diff --git a/t/t1507-rev-parse-upstream.sh b/t/t1507-rev-parse-upstream.sh
index c34714ffe3..549eb315a9 100755
--- a/t/t1507-rev-parse-upstream.sh
+++ b/t/t1507-rev-parse-upstream.sh
@@ -183,6 +183,11 @@  test_expect_success '@{u} error message when no upstream' '
 	test_cmp expect actual
 '
 
+test_expect_success '@{u} silent error when no upstream' '
+	test_must_fail git rev-parse --verify --quiet @{u} 2>actual &&
+	test_must_be_empty actual
+'
+
 test_expect_success 'branch@{u} error message with misspelt branch' '
 	cat >expect <<-EOF &&
 	fatal: no such branch: ${SQ}no-such-branch${SQ}