pull: make code more similar to the shell script again

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.schindelin@gmx.de>
This commit is contained in:
Johannes Schindelin
2016-03-10 14:57:54 +01:00
parent 4bb756f99c
commit d8d010ad99

View File

@@ -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,26 @@ 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 +882,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("pull with rebase",
"Please commit or stash them.", 0);
if (get_rebase_fork_point(rebase_fork_point, repo, *refspecs))
hashclr(rebase_fork_point);