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

Re: [PATCH 15/19] reset.c: finish entire cmd_reset() whether or not pathspec is given

From
Junio C Hamano <gitster@pobox.com>
Date
Jan 9, 2013, 19:59 UTC
Message-ID
<7v8v825drk.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1357719376-16406-16-git-send-email-martinvonz@gmail.com>
Martin von Zweigbergk <martinvonz@gmail.com> writes:
Show 8 quoted lines
> By not returning from inside the "if (pathspec)" block, we can let the
> pathspec-aware and pathspec-less code share a bit more, making it
> easier to make future changes that should affect both cases. This also
> highlights the similarity between read_from_tree() and reset_index().
> ---
> Should error reporting be aligned too? Speaking of which,
> do_diff_cache() never returns anything by 0. Is the return value for
> future-proofing?
Perhaps, and yes.
Show 73 quoted lines
>
>  builtin/reset.c | 42 ++++++++++++++++++------------------------
>  1 file changed, 18 insertions(+), 24 deletions(-)
>
> diff --git a/builtin/reset.c b/builtin/reset.c
> index 254afa9..9bcad29 100644
> --- a/builtin/reset.c
> +++ b/builtin/reset.c
> @@ -308,19 +308,6 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
>  		die(_("%s reset is not allowed in a bare repository"),
>  		    _(reset_type_names[reset_type]));
>  
> -	if (pathspec) {
> -		struct lock_file *lock = xcalloc(1, sizeof(struct lock_file));
> -		int index_fd = hold_locked_index(lock, 1);
> -		if (read_from_tree(pathspec, sha1))
> -			return 1;
> -		update_index_refresh(
> -			quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN);
> -		if (write_cache(index_fd, active_cache, active_nr) ||
> -		    commit_locked_index(lock))
> -			return error("Could not write new index file.");
> -		return 0;
> -	}
> -
>  	/* Soft reset does not touch the index file nor the working tree
>  	 * at all, but requires them in a good order.  Other resets reset
>  	 * the index file to the tree object we are switching to. */
> @@ -330,11 +317,16 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
>  	if (reset_type != SOFT) {
>  		struct lock_file *lock = xcalloc(1, sizeof(struct lock_file));
>  		int newfd = hold_locked_index(lock, 1);
> -		int err = reset_index(sha1, reset_type, quiet);
> -		if (reset_type == KEEP && !err)
> -			err = reset_index(sha1, MIXED, quiet);
> -		if (err)
> -			die(_("Could not reset index file to revision '%s'."), rev);
> +		if (pathspec) {
> +			if (read_from_tree(pathspec, sha1))
> +				return 1;
> +		} else {
> +			int err = reset_index(sha1, reset_type, quiet);
> +			if (reset_type == KEEP && !err)
> +				err = reset_index(sha1, MIXED, quiet);
> +			if (err)
> +				die(_("Could not reset index file to revision '%s'."), rev);
> +		}
>  
>  		if (reset_type == MIXED) /* Report what has not been updated. */
>  			update_index_refresh(
> @@ -345,14 +337,16 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
>  			die(_("Could not write new index file."));
>  	}
>  
> -	/* Any resets update HEAD to the head being switched to,
> -	 * saving the previous head in ORIG_HEAD before. */
> -	update_ref_status = update_refs(rev, sha1);
> +	if (!pathspec) {
> +		/* Any resets without paths update HEAD to the head being
> +		 * switched to, saving the previous head in ORIG_HEAD before. */
> +		update_ref_status = update_refs(rev, sha1);
>  
> -	if (reset_type == HARD && !update_ref_status && !quiet)
> -		print_new_head_line(commit);
> +		if (reset_type == HARD && !update_ref_status && !quiet)
> +			print_new_head_line(commit);
>  
> -	remove_branch_state();
> +		remove_branch_state();
> +	}
>  
>  	return update_ref_status;
>  }
Previous: Martin von ZweigbergkNext: Martin von Zweigbergk
Message 34 of 68 in “reset improvements”
  1. 00/19 reset improvementsMartin von Zweigbergk, Jan 9, 2013
  2. 01/19 reset $pathspec: no need to discard indexMartin von Zweigbergk, Jan 9, 2013
  3. 02/19 reset $pathspec: exit with code 0 if successfulMartin von Zweigbergk, Jan 9, 2013
  4. 03/19 reset.c: pass pathspec around instead of (prefix, argv) pairMartin von Zweigbergk, Jan 9, 2013
  5. Matt KraaiJan 9, 2013
  6. Junio C HamanoJan 9, 2013
  7. Duy NguyenJan 10, 2013
  8. Junio C HamanoJan 10, 2013
  9. Duy NguyenJan 11, 2013
  10. 04/19 reset: don't allow "git reset -- $pathspec" in bare repoMartin von Zweigbergk, Jan 9, 2013
  11. Junio C HamanoJan 9, 2013
  12. Martin von ZweigbergkJan 10, 2013
  13. Junio C HamanoJan 10, 2013
  14. 05/19 reset.c: extract function for parsing argumentsMartin von Zweigbergk, Jan 9, 2013
  15. 06/19 reset.c: remove unnecessary variable 'i'Martin von Zweigbergk, Jan 9, 2013
  16. Junio C HamanoJan 9, 2013
  17. Martin von ZweigbergkJan 10, 2013
  18. 07/19 reset.c: extract function for updating {ORIG,}HEADMartin von Zweigbergk, Jan 9, 2013
  19. Matt KraaiJan 9, 2013
  20. 08/19 reset.c: share call to die_if_unmerged_cache()Martin von Zweigbergk, Jan 9, 2013
  21. Junio C HamanoJan 9, 2013
  22. Martin von ZweigbergkJan 10, 2013
  23. 09/19 reset.c: replace switch by if-elseMartin von Zweigbergk, Jan 9, 2013
  24. Junio C HamanoJan 9, 2013
  25. Martin von ZweigbergkJan 11, 2013
  26. Junio C HamanoJan 11, 2013
  27. 10/19 reset --keep: only write index file onceMartin von Zweigbergk, Jan 9, 2013
  28. Junio C HamanoJan 9, 2013
  29. 11/19 reset: avoid redundant error messageMartin von Zweigbergk, Jan 9, 2013
  30. 12/19 reset.c: move update_index_refresh() call out of read_from_tree()Martin von Zweigbergk, Jan 9, 2013
  31. 13/19 reset.c: move lock, write and commit out of update_index_refresh()Martin von Zweigbergk, Jan 9, 2013
  32. 14/19 reset [--mixed]: don't write index file twiceMartin von Zweigbergk, Jan 9, 2013
  33. 15/19 reset.c: finish entire cmd_reset() whether or not pathspec is givenMartin von Zweigbergk, Jan 9, 2013
  34. Junio C HamanoJan 9, 2013
  35. 16/19 reset [--mixed] --quiet: don't refresh indexMartin von Zweigbergk, Jan 9, 2013
  36. Jeff KingJan 9, 2013
  37. Martin von ZweigbergkJan 9, 2013
  38. Junio C HamanoJan 9, 2013
  39. Martin von ZweigbergkJan 9, 2013
  40. Junio C HamanoJan 9, 2013
  41. 17/19 reset $sha1 $pathspec: require $sha1 only to be treeishMartin von Zweigbergk, Jan 9, 2013
  42. Junio C HamanoJan 9, 2013
  43. 18/19 reset: allow reset on unborn branchMartin von Zweigbergk, Jan 9, 2013
  44. 19/19 reset [--mixed]: use diff-based reset whether or not pathspec was givenMartin von Zweigbergk, Jan 9, 2013
  45. Junio C HamanoJan 9, 2013
  46. 00/19 reset improvementsMartin von Zweigbergk, Jan 15, 2013
  47. 01/19 reset $pathspec: no need to discard indexMartin von Zweigbergk, Jan 15, 2013
  48. 02/19 reset $pathspec: exit with code 0 if successfulMartin von Zweigbergk, Jan 15, 2013
  49. 03/19 reset.c: pass pathspec around instead of (prefix, argv) pairMartin von Zweigbergk, Jan 15, 2013
  50. 04/19 reset: don't allow "git reset -- $pathspec" in bare repoMartin von Zweigbergk, Jan 15, 2013
  51. 05/19 reset.c: extract function for parsing argumentsMartin von Zweigbergk, Jan 15, 2013
  52. 06/19 reset.c: remove unnecessary variable 'i'Martin von Zweigbergk, Jan 15, 2013
  53. 07/19 reset.c: extract function for updating {ORIG_,}HEADMartin von Zweigbergk, Jan 15, 2013
  54. 08/19 reset.c: share call to die_if_unmerged_cache()Martin von Zweigbergk, Jan 15, 2013
  55. 09/19 reset --keep: only write index file onceMartin von Zweigbergk, Jan 15, 2013
  56. 10/19 reset: avoid redundant error messageMartin von Zweigbergk, Jan 15, 2013
  57. 11/19 reset.c: replace switch by if-elseMartin von Zweigbergk, Jan 15, 2013
  58. 12/19 reset.c: move update_index_refresh() call out of read_from_tree()Martin von Zweigbergk, Jan 15, 2013
  59. 13/19 reset.c: move lock, write and commit out of update_index_refresh()Martin von Zweigbergk, Jan 15, 2013
  60. 14/19 reset [--mixed]: only write index file onceMartin von Zweigbergk, Jan 15, 2013
  61. 15/19 reset.c: finish entire cmd_reset() whether or not pathspec is givenMartin von Zweigbergk, Jan 15, 2013
  62. 16/19 reset.c: inline update_index_refresh()Martin von Zweigbergk, Jan 15, 2013
  63. 17/19 reset $sha1 $pathspec: require $sha1 only to be treeishMartin von Zweigbergk, Jan 15, 2013
  64. 17/19 fixup! reset $sha1 $pathspec: require $sha1 only to be treeishMartin von Zweigbergk, Jan 16, 2013
  65. Martin von ZweigbergkJan 16, 2013
  66. 18/19 reset: allow reset on unborn branchMartin von Zweigbergk, Jan 15, 2013
  67. 19/19 reset [--mixed]: use diff-based reset whether or not pathspec was givenMartin von Zweigbergk, Jan 15, 2013
  68. Martin von ZweigbergkJan 15, 2013

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.