[PATCH] pull --rebase: exit early when the working directory is dirty

Subsystems: the rest

DORMANTno replies

4 messages, 4 authors, 2016-06-15 · open the first message on its own page

[PATCH] pull --rebase: exit early when the working directory is dirty

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:44:37

When rebasing fails during "pull --rebase", you cannot just clean up the
working directory and call "pull --rebase" again, since the remote branch
was already fetched.

Therefore, die early when the working directory is dirty.

Signed-off-by: Johannes Schindelin <redacted>
---
 git-pull.sh     |    5 +++++
 t/t5520-pull.sh |   18 ++++++++++++++++++
 2 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/git-pull.sh b/git-pull.sh
index bf0c298..9a9e764 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -107,6 +107,11 @@ error_on_no_merge_candidates () {
 }
 
 test true = "$rebase" && {
+	git update-index --refresh &&
+	git diff-files --quiet &&
+        git diff-index --cached --quiet HEAD -- ||
+	die "refusing to pull with rebase: your working tree is not up-to-date"
+
 	. git-parse-remote &&
 	origin="$1"
 	test -z "$origin" && origin=$(get_default_remote)
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index 9484129..997b2db 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -92,4 +92,22 @@ test_expect_success '--rebase with rebased upstream' '
 
 '
 
+test_expect_success 'pull --rebase dies early with dirty working directory' '
+
+	git update-ref refs/remotes/me/copy copy^ &&
+	COPY=$(git rev-parse --verify me/copy) &&
+	git rebase --onto $COPY copy &&
+	git config branch.to-rebase.remote me &&
+	git config branch.to-rebase.merge refs/heads/copy &&
+	git config branch.to-rebase.rebase true &&
+	echo dirty >> file &&
+	git add file &&
+	test_must_fail git pull &&
+	test $COPY = $(git rev-parse --verify me/copy) &&
+	git checkout HEAD -- file &&
+	git pull &&
+	test $COPY != $(git rev-parse --verify me/copy)
+
+'
+
 test_done
-- 
1.5.5.1.497.ga63a5

Re: [PATCH] pull --rebase: exit early when the working directory is dirty

From: Andreas Ericsson <hidden>
Date: 2016-06-15 22:44:37

Johannes Schindelin wrote:
When rebasing fails during "pull --rebase", you cannot just clean up the
working directory and call "pull --rebase" again, since the remote branch
was already fetched.

Therefore, die early when the working directory is dirty.

Funny stuff. I helped a co-worker with just exactly this issue less than
ten minutes ago, so, fwiw:
Liked-by: Andreas Ericsson [off-list ref]

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

Re: [PATCH] pull --rebase: exit early when the working directory is dirty

From: Jan Krüger <hidden>
Date: 2016-06-15 22:44:37

Hi,
When rebasing fails during "pull --rebase", you cannot just clean up
the working directory and call "pull --rebase" again, since the
remote branch was already fetched.

Therefore, die early when the working directory is dirty.
Good idea.
+	git update-index --refresh &&
+	git diff-files --quiet &&
+        git diff-index --cached --quiet HEAD -- ||
+	die "refusing to pull with rebase: your working tree is not
up-to-date"
Perhaps the "up-to-date" should be changed to something else, following
the recent discussion about the "up-to-date" message in checkout (but
here we don't have to worry about breaking anything else). In that case,
I'd suggest:

"Refusing to pull with rebase: your working tree has uncommitted
changes"

-- 
Best regards
Jan Krüger [off-list ref]

Re: [PATCH] pull --rebase: exit early when the working directory is dirty

From: Geert Bosch <hidden>
Date: 2016-06-15 22:44:37

On May 21, 2008, at 07:32, Johannes Schindelin wrote:
When rebasing fails during "pull --rebase", you cannot just clean up  
the
working directory and call "pull --rebase" again, since the remote  
branch
was already fetched.

Therefore, die early when the working directory is dirty.
Much nicer indeed to die early on errors, as we also can
generally give better error messages.
+	die "refusing to pull with rebase: your working tree is not up-to- 
date"
I thought we'd prefer saying:
               "refusing to pull with rebase: your working tree has  
local changes"

   -Geert
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help