Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
pull: allow dirty tree when rebase.autostash enabled
author
Kevin Daudt
<me@ikke.info>
Sat, 4 Jul 2015 21:42:38 +0000
(23:42 +0200)
committer
Junio C Hamano
<gitster@pobox.com>
Wed, 22 Jul 2015 19:56:30 +0000
(12:56 -0700)
rebase learned to stash changes when it encounters a dirty work tree,
but git pull --rebase does not.
Only verify if the working tree is dirty when rebase.autostash is not
enabled.
Signed-off-by: Kevin Daudt <me@ikke.info>
Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/pull.c
patch
|
blob
|
history
t/t5520-pull.sh
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
b145660
)
diff --git
a/builtin/pull.c
b/builtin/pull.c
index 722a83c51b1a0ad8ab4ec20ca3c920355ee9075a..b7bc1fff5e0c05782dbb9e9bf3210248db15c54a 100644
(file)
--- a/
builtin/pull.c
+++ b/
builtin/pull.c
@@
-823,10
+823,14
@@
int cmd_pull(int argc, const char **argv, const char *prefix)
hashclr(orig_head);
if (opt_rebase) {
hashclr(orig_head);
if (opt_rebase) {
+ int autostash = 0;
+
if (is_null_sha1(orig_head) && !is_cache_unborn())
die(_("Updating an unborn branch with changes added to the index."));
if (is_null_sha1(orig_head) && !is_cache_unborn())
die(_("Updating an unborn branch with changes added to the index."));
- die_on_unclean_work_tree(prefix);
+ git_config_get_bool("rebase.autostash", &autostash);
+ if (!autostash)
+ die_on_unclean_work_tree(prefix);
if (get_rebase_fork_point(rebase_fork_point, repo, *refspecs))
hashclr(rebase_fork_point);
if (get_rebase_fork_point(rebase_fork_point, repo, *refspecs))
hashclr(rebase_fork_point);
diff --git
a/t/t5520-pull.sh
b/t/t5520-pull.sh
index 7efd45bc27687a619d149bb581cb6cb2582241e9..f62c5b09b5f04d2107cfa2bff58ea373c44fd7e3 100755
(executable)
--- a/
t/t5520-pull.sh
+++ b/
t/t5520-pull.sh
@@
-122,6
+122,18
@@
test_expect_success '--rebase' '
test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
test new = $(git show HEAD:file2)
'
test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
test new = $(git show HEAD:file2)
'
+
+test_expect_success 'pull --rebase succeeds with dirty working directory and rebase.autostash set' '
+ test_config rebase.autostash true &&
+ git reset --hard before-rebase &&
+ echo dirty >new_file &&
+ git add new_file &&
+ git pull --rebase . copy &&
+ test_cmp_rev HEAD^ copy &&
+ test "$(cat new_file)" = dirty &&
+ test "$(cat file)" = "modified again"
+'
+
test_expect_success 'pull.rebase' '
git reset --hard before-rebase &&
test_config pull.rebase true &&
test_expect_success 'pull.rebase' '
git reset --hard before-rebase &&
test_config pull.rebase true &&