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