git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] object-name: fix quiet @{u} parsing

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 16, 2023, 17:43 UTC
Message-ID
<xmqqfsa4lhgk.fsf@gitster.g>
In-Reply-To
<20230316171514.23741-1-felipe.contreras@gmail.com>
Felipe Contreras <felipe.contreras@gmail.com> writes:
Show 39 quoted lines
> 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.
Show 12 quoted lines
> 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.
Previous: Felipe Contreras
Message 2 of 2 in “object-name: fix quiet @{u} parsing”
  1. object-name: fix quiet @{u} parsingFelipe Contreras, Mar 16, 2023
  2. Junio C HamanoMar 16, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.