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

[PATCH v4 2/6] pull: make code more similar to the shell script again

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Oct 7, 2016, 16:08 UTC
Message-ID
<5c016337b8affc4d51c7235334eef64a0f59879a.1475856491.git.johannes.schindelin@gmx.de>
In-Reply-To
<cover.1475856491.git.johannes.schindelin@gmx.de>

When converting the pull command to a builtin, the require_clean_work_tree() function was renamed and the pull-specific parts hard-coded.

This makes it impossible to reuse the code, so let's modify the code to make it more similar to the original shell script again.

Note: when the hint "Please commit or stash them" was introduced first,
Git did not have the convention of continuing error messages in lower
case, but now we do have that convention, therefore we reintroduce this
hint down-cased, obeying said convention.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 builtin/pull.c | 30 ++++++++++++++++++++----------
 1 file changed, 20 insertions(+), 10 deletions(-)
diff --git a/builtin/pull.c b/builtin/pull.c
index d4bd635..58fc176 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -365,10 +365,11 @@ static int has_uncommitted_changes(void)
  * If the work tree has unstaged or uncommitted changes, dies with the
  * appropriate message.
  */
-static void die_on_unclean_work_tree(void)
+static int require_clean_work_tree(const char *action, const char *hint,
+		int gently)
 {
 	struct lock_file *lock_file = xcalloc(1, sizeof(*lock_file));
-	int do_die = 0;
+	int err = 0;
 
 	hold_locked_index(lock_file, 0);
 	refresh_cache(REFRESH_QUIET);
@@ -376,20 +377,28 @@ static void die_on_unclean_work_tree(void)
 	rollback_lock_file(lock_file);
 
 	if (has_unstaged_changes()) {
-		error(_("Cannot pull with rebase: You have unstaged changes."));
-		do_die = 1;
+		/* TRANSLATORS: the action is e.g. "pull with rebase" */
+		error(_("Cannot %s: You have unstaged changes."), _(action));
+		err = 1;
 	}
 
 	if (has_uncommitted_changes()) {
-		if (do_die)
+		if (err)
 			error(_("Additionally, your index contains uncommitted changes."));
 		else
-			error(_("Cannot pull with rebase: Your index contains uncommitted changes."));
-		do_die = 1;
+			error(_("Cannot %s: Your index contains uncommitted changes."),
+			      _(action));
+		err = 1;
 	}
 
-	if (do_die)
-		exit(1);
+	if (err) {
+		if (hint)
+			error("%s", hint);
+		if (!gently)
+			exit(128);
+	}
+
+	return err;
 }
 
 /**
@@ -875,7 +884,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
 			die(_("Updating an unborn branch with changes added to the index."));
 
 		if (!autostash)
-			die_on_unclean_work_tree();
+			require_clean_work_tree(N_("pull with rebase"),
+				_("please commit or stash them."), 0);
 
 		if (get_rebase_fork_point(rebase_fork_point, repo, *refspecs))
 			hashclr(rebase_fork_point);
-- 
2.10.0.windows.1.325.ge6089c1
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 46 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.