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.

Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
---
 builtin/pull.c | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/builtin/pull.c b/builtin/pull.c
index d4bd635..a3ed054 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,27 @@ 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;
+               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(err);
+       }
+
+       return err;
 }
 
 /**
@@ -875,7 +883,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.10.g803177d


Reply via email to