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