mirror of
https://github.com/git/git.git
synced 2026-02-01 05:20:15 +00:00
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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user