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

Re: [PATCHv4 5/9] builtin/notes: Simplify early exit code in add()

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 10, 2014, 20:36 UTC
Message-ID
<xmqqmw7y94jm.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1415536255-19961-6-git-send-email-johan@herland.net>
Johan Herland <johan@herland.net> writes:
Show 25 quoted lines
> Signed-off-by: Johan Herland <johan@herland.net>
> ---
>  builtin/notes.c | 12 +++++-------
>  1 file changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/builtin/notes.c b/builtin/notes.c
> index 1017472..f1480cf 100644
> --- a/builtin/notes.c
> +++ b/builtin/notes.c
> @@ -399,7 +399,7 @@ static int append_edit(int argc, const char **argv, const char *prefix);
>  
>  static int add(int argc, const char **argv, const char *prefix)
>  {
> -	int retval = 0, force = 0;
> +	int force = 0;
>  	const char *object_ref;
>  	struct notes_tree *t;
>  	unsigned char object[20], new_note[20];
> @@ -441,6 +441,8 @@ static int add(int argc, const char **argv, const char *prefix)
>  
>  	if (note) {
>  		if (!force) {
> +			free_note_data(&d);
> +			free_notes(t);
>  			if (!d.given) {

It looks a bit strange to refer to d.given after calling a function that sounds as if it is meant to clear what is recorded in and to invalidate &d; yes, I can read the implementation to see that d.given keeps its stale value, but that is something other people may want to "clean up" later and this reference to d.given will get in the way when that happens.

At this point of the code, it makes sense to free t in preparation to either switching to append codepath or erroring out, but does &d have anything in it already to necessitate its freeing?

Show 29 quoted lines
>  				/*
>  				 * Redirect to "edit" subcommand.
> @@ -450,14 +452,11 @@ static int add(int argc, const char **argv, const char *prefix)
>  				 * therefore still in argv[0-1].
>  				 */
>  				argv[0] = "edit";
> -				free_note_data(&d);
> -				free_notes(t);
>  				return append_edit(argc, argv, prefix);
>  			}
> -			retval = error(_("Cannot add notes. Found existing notes "
> +			return error(_("Cannot add notes. Found existing notes "
>  				       "for object %s. Use '-f' to overwrite "
>  				       "existing notes"), sha1_to_hex(object));
> -			goto out;
>  		}
>  		fprintf(stderr, _("Overwriting existing notes for object %s\n"),
>  			sha1_to_hex(object));
> @@ -474,9 +473,8 @@ static int add(int argc, const char **argv, const char *prefix)
>  	snprintf(logmsg, sizeof(logmsg), "Notes %s by 'git notes %s'",
>  		 is_null_sha1(new_note) ? "removed" : "added", "add");
>  	commit_notes(t, logmsg);
> -out:
>  	free_notes(t);
> -	return retval;
> +	return 0;
>  }
>  
>  static int copy(int argc, const char **argv, const char *prefix)
Previous: Johan HerlandNext: Johan Herland
Message 7 of 17 in “[PATCHv4 0/9] Handling empty notes”
  1. Johan HerlandNov 9, 2014
  2. 1/9 builtin/notes: Fix premature failure when trying to add the empty blobJohan Herland, Nov 9, 2014
  3. 2/9 t3301: Verify that 'git notes' removes empty notes by defaultJohan Herland, Nov 9, 2014
  4. 3/9 builtin/notes: Improve namingJohan Herland, Nov 9, 2014
  5. 4/9 builtin/notes: Refactor note file path into struct note_dataJohan Herland, Nov 9, 2014
  6. 5/9 builtin/notes: Simplify early exit code in add()Johan Herland, Nov 9, 2014
  7. Junio C HamanoNov 10, 2014
  8. Johan HerlandNov 11, 2014
  9. Junio C HamanoNov 11, 2014
  10. 6/9 builtin/notes: Split create_note() to clarify add vs. remove logicJohan Herland, Nov 9, 2014
  11. 7/9 builtin/notes: Add --allow-empty, to allow storing empty notesJohan Herland, Nov 9, 2014
  12. 8/9 notes: Empty notes should be shown by 'git log'Johan Herland, Nov 9, 2014
  13. 9/9 t3301: ModernizeJohan Herland, Nov 9, 2014
  14. Junio C HamanoNov 10, 2014
  15. Johan HerlandNov 11, 2014
  16. Eric SunshineNov 11, 2014
  17. Johan HerlandNov 11, 2014

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.