threads / patch / 13597

patchpull --rebase: exit early when the working directory is dirty

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

## tl;dr

4 messages between May 21, 2008 and May 21, 2008. Diffs are folded; open one to read it.

replies: 3people: 4as markdown or json

Johannes Schindelin· May 21, 2008, 11:32 UTC · lore

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 <johannes.schindelin@gmx.de>
---
 git-pull.sh     |    5 +++++
 t/t5520-pull.sh |   18 ++++++++++++++++++
 2 files changed, 23 insertions(+), 0 deletions(-)
Show changes to 2 files +23 −0

git-pull.sh, t/t5520-pull.sh

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
Andreas Ericsson· May 21, 2008, 12:04 UTC · re: Johannes Schindelin · lore

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

Johannes Schindelin wrote:
Show 5 quoted lines
> 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 <ae@op5.se>
-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231
Jan Krüger· May 21, 2008, 13:31 UTC · re: Johannes Schindelin · lore

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

Hi,
Show 5 quoted lines
> 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.
Show 5 quoted lines
> +	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 <jk@jk.gs>
Geert Bosch· May 21, 2008, 15:11 UTC · re: Johannes Schindelin · lore

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

On May 21, 2008, at 07:32, Johannes Schindelin wrote:
Show 7 quoted lines
> 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

← back to recent threads