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

[PATCH v2 0/5] Pull out require_clean_work_tree() functionality from builtin/pull.c

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Sep 11, 2016, 08:02 UTC
Message-ID
<cover.1473580914.git.johannes.schindelin@gmx.de>
In-Reply-To
<cover.1472137582.git.johannes.schindelin@gmx.de>

This is the 5th last patch series of my work to accelerate interactive rebases in particular on Windows.

Basically, all it does is to make reusable some functions that were ported over from git-pull.sh but made private to builtin/pull.c.

Changes since v1:
- skipped patch that tries to make require_clean_work_tree() smart
  enough to read the index if it was not read yet.
- added a code-comment clarifying that it is the duty of
  require_clean_work_tree()'s caller to ensure that the index has been
  read.
- made the action in require_clean_work_tree() translateable. This
  amazingly easy without complexifying the code, simply by using N_()
  and _() as indicated by Jakub.
Johannes Schindelin (5):
  pull: drop confusing prefix parameter of die_on_unclean_work_tree()
  pull: make code more similar to the shell script again
  Make the require_clean_work_tree() function truly reusable
  Export also the has_un{staged,committed}_changed() functions
  wt-status: teach has_{unstaged,uncommitted}_changes() about submodules
 builtin/pull.c | 71 +++--------------------------------------------------
 wt-status.c    | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 wt-status.h    |  6 +++++
 3 files changed, 86 insertions(+), 68 deletions(-)
Published-As: https://github.com/dscho/git/releases/tag/require-clean-work-tree-v2
Fetch-It-Via: git fetch https://github.com/dscho/git require-clean-work-tree-v2
Interdiff vs v1:
 diff --git a/builtin/pull.c b/builtin/pull.c
 index 843ff19..c639167 100644
 --- a/builtin/pull.c
 +++ b/builtin/pull.c
 @@ -809,7 +809,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
  			die(_("Updating an unborn branch with changes added to the index."));
  
  		if (!autostash)
 -			require_clean_work_tree("pull with rebase",
 +			require_clean_work_tree(N_("pull with rebase"),
  				"Please commit or stash them.", 1, 0);
  
  		if (get_rebase_fork_point(rebase_fork_point, repo, *refspecs))
 diff --git a/wt-status.c b/wt-status.c
 index 129b054..086ae79 100644
 --- a/wt-status.c
 +++ b/wt-status.c
 @@ -2258,20 +2258,13 @@ int require_clean_work_tree(const char *action, const char *hint, int ignore_sub
  	struct lock_file *lock_file = xcalloc(1, sizeof(*lock_file));
  	int err = 0;
  
 -	if (read_cache() < 0) {
 -		error(_("Could not read index"));
 -		if (gently)
 -			return -1;
 -		exit(1);
 -	}
 -
  	hold_locked_index(lock_file, 0);
  	refresh_cache(REFRESH_QUIET);
  	update_index_if_able(&the_index, lock_file);
  	rollback_lock_file(lock_file);
  
  	if (has_unstaged_changes(ignore_submodules)) {
 -		error(_("Cannot %s: You have unstaged changes."), action);
 +		error(_("Cannot %s: You have unstaged changes."), _(action));
  		err = 1;
  	}
  
 @@ -2279,7 +2272,8 @@ int require_clean_work_tree(const char *action, const char *hint, int ignore_sub
  		if (err)
  			error(_("Additionally, your index contains uncommitted changes."));
  		else
 -			error(_("Cannot %s: Your index contains uncommitted changes."), action);
 +			error(_("Cannot %s: Your index contains uncommitted changes."),
 +			      _(action));
  		err = 1;
  	}
  
 diff --git a/wt-status.h b/wt-status.h
 index f0e66c4..54fec77 100644
 --- a/wt-status.h
 +++ b/wt-status.h
 @@ -128,6 +128,7 @@ void status_printf_ln(struct wt_status *s, const char *color, const char *fmt, .
  __attribute__((format (printf, 3, 4)))
  void status_printf(struct wt_status *s, const char *color, const char *fmt, ...);
  
 +/* The following functions expect that the caller took care of reading the index. */
  int has_unstaged_changes(int ignore_submodules);
  int has_uncommitted_changes(int ignore_submodules);
  int require_clean_work_tree(const char *action, const char *hint,
-- 
2.10.0.windows.1.10.g803177d

base-commit: cda1bbd474805e653dda8a71d4ea3790e2a66cbb
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 19 of 52 in “Pull out require_clean_work_tree() functionality from builtin/pull.c”
  1. 0/6 Pull out require_clean_work_tree() functionality from builtin/pull.cJohannes Schindelin, Aug 25, 2016
  2. 1/6 pull: drop confusing prefix parameter of die_on_unclean_work_tree()Johannes Schindelin, Aug 25, 2016
  3. Junio C HamanoAug 29, 2016
  4. 3/6 Make the require_clean_work_tree() function truly reusableJohannes Schindelin, Aug 25, 2016
  5. 2/6 pull: make code more similar to the shell script againJohannes Schindelin, Aug 25, 2016
  6. Junio C HamanoAug 29, 2016
  7. Johannes SchindelinAug 30, 2016
  8. Johannes SchindelinSep 9, 2016
  9. 4/6 require_clean_work_tree: ensure that the index was readJohannes Schindelin, Aug 25, 2016
  10. Junio C HamanoAug 29, 2016
  11. Junio C HamanoAug 30, 2016
  12. Johannes SchindelinAug 30, 2016
  13. Johannes SchindelinAug 30, 2016
  14. Junio C HamanoAug 30, 2016
  15. Johannes SchindelinAug 30, 2016
  16. 5/6 Export also the has_un{staged,committed}_changed() functionsJohannes Schindelin, Aug 25, 2016
  17. Junio C HamanoAug 29, 2016
  18. 6/6 wt-status: teach has_{unstaged,uncommitted}_changes() about submodulesJohannes Schindelin, Aug 25, 2016
  19. 0/5 Pull out require_clean_work_tree() functionality from builtin/pull.cJohannes Schindelin, Sep 11, 2016
  20. 1/5 pull: drop confusing prefix parameter of die_on_unclean_work_tree()Johannes Schindelin, Sep 11, 2016
  21. 2/5 pull: make code more similar to the shell script againJohannes Schindelin, Sep 11, 2016
  22. Junio C HamanoSep 12, 2016
  23. 3/5 Make the require_clean_work_tree() function truly reusableJohannes Schindelin, Sep 11, 2016
  24. Junio C HamanoSep 12, 2016
  25. 4/5 Export also the has_un{staged,committed}_changed() functionsJohannes Schindelin, Sep 11, 2016
  26. 5/5 wt-status: teach has_{unstaged,uncommitted}_changes() about submodulesJohannes Schindelin, Sep 11, 2016
  27. Junio C HamanoSep 12, 2016
  28. 0/6 Pull out require_clean_work_tree() functionality from builtin/pull.cJohannes Schindelin, Oct 4, 2016
  29. 1/6 pull: drop confusing prefix parameter of die_on_unclean_work_tree()Johannes Schindelin, Oct 4, 2016
  30. 2/6 pull: make code more similar to the shell script againJohannes Schindelin, Oct 4, 2016
  31. 3/6 Make the require_clean_work_tree() function reusableJohannes Schindelin, Oct 4, 2016
  32. Junio C HamanoOct 4, 2016
  33. Johannes SchindelinOct 5, 2016
  34. Junio C HamanoOct 5, 2016
  35. 4/6 Export also the has_un{staged,committed}_changed() functionsJohannes Schindelin, Oct 4, 2016
  36. Junio C HamanoOct 4, 2016
  37. Jakub NarębskiOct 5, 2016
  38. 5/6 wt-status: teach has_{unstaged,uncommitted}_changes() about submodulesJohannes Schindelin, Oct 4, 2016
  39. 6/6 wt-status: begin error messages with lower-caseJohannes Schindelin, Oct 4, 2016
  40. Jakub NarębskiOct 5, 2016
  41. Johannes SchindelinOct 6, 2016
  42. Junio C HamanoOct 4, 2016
  43. Johannes SchindelinOct 5, 2016
  44. 0/6 Pull out require_clean_work_tree() functionality from builtin/pull.cJohannes Schindelin, Oct 7, 2016
  45. 1/6 pull: drop confusing prefix parameter of die_on_unclean_work_tree()Johannes Schindelin, Oct 7, 2016
  46. 2/6 pull: make code more similar to the shell script againJohannes Schindelin, Oct 7, 2016
  47. 3/6 wt-status: make the require_clean_work_tree() function reusableJohannes Schindelin, Oct 7, 2016
  48. 4/6 wt-status: export also the has_un{staged,committed}_changes() functionsJohannes Schindelin, Oct 7, 2016
  49. 5/6 wt-status: teach has_{unstaged,uncommitted}_changes() about submodulesJohannes Schindelin, Oct 7, 2016
  50. 6/6 wt-status: begin error messages with lower-caseJohannes Schindelin, Oct 7, 2016
  51. Junio C HamanoOct 7, 2016
  52. Jakub NarębskiOct 7, 2016

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.