All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] (resend) stash bug: stash can lose data in a file removed from the index
@ 2010-04-15  0:24 Charles Bailey
  2010-04-15  0:24 ` [PATCH 2/2] (resend) stash: Don't overwrite files that have gone " Charles Bailey
  0 siblings, 1 reply; 4+ messages in thread
From: Charles Bailey @ 2010-04-15  0:24 UTC (permalink / raw)
  To: Junio C Hamano, git; +Cc: Charles Bailey

If a file is removed from the index and then modified in the working
tree then stash will discard the working tree file with no way to
recover the changes.

This can might be done in one of a number of ways.

git rm file
vi file              # edit a new version
git stash

or with git mv

git mv file newfile
vi file              # make a new file with the old name
git stash

Signed-off-by: Charles Bailey <charles@hashpling.org>
---
 t/t3903-stash.sh |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index 476e5ec..c85bf44 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -228,4 +228,13 @@ test_expect_success 'stash --invalid-option' '
 	test bar,bar2 = $(cat file),$(cat file2)
 '
 
+test_expect_failure 'stash git rm' '
+    git reset --hard &&
+	git rm file &&
+	echo bar7 > file &&
+	git stash &&
+	git stash apply &&
+	test bar7 = $(cat file)
+'
+
 test_done
-- 
1.7.1.rc1.241.g4e72f

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] (resend) stash: Don't overwrite files that have gone from the index
  2010-04-15  0:24 [PATCH 1/2] (resend) stash bug: stash can lose data in a file removed from the index Charles Bailey
@ 2010-04-15  0:24 ` Charles Bailey
  2010-04-15  7:33   ` Thomas Rast
  0 siblings, 1 reply; 4+ messages in thread
From: Charles Bailey @ 2010-04-15  0:24 UTC (permalink / raw)
  To: Junio C Hamano, git; +Cc: Charles Bailey

---

This patch is deliberately not signed off. It feels kludgy and uses a
non-portable xargs invocation.

It is designed as a starting point for discussion, that is all.

 git-stash.sh |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/git-stash.sh b/git-stash.sh
index 908aab2..9efc544 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -87,6 +87,8 @@ create_stash () {
 			export GIT_INDEX_FILE &&
 			git read-tree -m $i_tree &&
 			git add -u &&
+			{ git diff --quiet --diff-filter=D --cached ||
+				git diff -z --name-only --diff-filter=D --cached | xargs -0 git add --ignore-errors; } &&
 			git write-tree &&
 			rm -f "$TMP-index"
 		) ) ||
-- 
1.7.1.rc1.241.g4e72f

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] (resend) stash: Don't overwrite files that have gone from the index
  2010-04-15  0:24 ` [PATCH 2/2] (resend) stash: Don't overwrite files that have gone " Charles Bailey
@ 2010-04-15  7:33   ` Thomas Rast
  2010-04-15  7:38     ` Jeff King
  0 siblings, 1 reply; 4+ messages in thread
From: Thomas Rast @ 2010-04-15  7:33 UTC (permalink / raw)
  To: Charles Bailey; +Cc: Junio C Hamano, git

Charles Bailey wrote:
> diff --git a/git-stash.sh b/git-stash.sh
> index 908aab2..9efc544 100755
> --- a/git-stash.sh
> +++ b/git-stash.sh
> @@ -87,6 +87,8 @@ create_stash () {
>  			export GIT_INDEX_FILE &&
>  			git read-tree -m $i_tree &&
>  			git add -u &&
> +			{ git diff --quiet --diff-filter=D --cached ||
> +				git diff -z --name-only --diff-filter=D --cached | xargs -0 git add --ignore-errors; } &&

I think you'll also have to turn it into an 'add -f' invocation since
the file in question could conceivably have been ignored-but-tracked,
and straight 'add' would refuse to re-track it.

(No, I don't have any good ideas on how to get rid of xargs short of
some shell loop...)

-- 
Thomas Rast
trast@{inf,student}.ethz.ch

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] (resend) stash: Don't overwrite files that have gone from the index
  2010-04-15  7:33   ` Thomas Rast
@ 2010-04-15  7:38     ` Jeff King
  0 siblings, 0 replies; 4+ messages in thread
From: Jeff King @ 2010-04-15  7:38 UTC (permalink / raw)
  To: Thomas Rast; +Cc: Charles Bailey, Junio C Hamano, git

On Thu, Apr 15, 2010 at 09:33:40AM +0200, Thomas Rast wrote:

> Charles Bailey wrote:
> > diff --git a/git-stash.sh b/git-stash.sh
> > index 908aab2..9efc544 100755
> > --- a/git-stash.sh
> > +++ b/git-stash.sh
> > @@ -87,6 +87,8 @@ create_stash () {
> >  			export GIT_INDEX_FILE &&
> >  			git read-tree -m $i_tree &&
> >  			git add -u &&
> > +			{ git diff --quiet --diff-filter=D --cached ||
> > +				git diff -z --name-only --diff-filter=D --cached | xargs -0 git add --ignore-errors; } &&
> 
> I think you'll also have to turn it into an 'add -f' invocation since
> the file in question could conceivably have been ignored-but-tracked,
> and straight 'add' would refuse to re-track it.
> 
> (No, I don't have any good ideas on how to get rid of xargs short of
> some shell loop...)

It should probably use update-index, which has a --stdin mode, and which
doesn't care about ignores.

-Peff

PS I have not looked carefully into this issue yet, so I don't know if
   the patch actually does the right thing or not.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-04-15  7:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-04-15  0:24 [PATCH 1/2] (resend) stash bug: stash can lose data in a file removed from the index Charles Bailey
2010-04-15  0:24 ` [PATCH 2/2] (resend) stash: Don't overwrite files that have gone " Charles Bailey
2010-04-15  7:33   ` Thomas Rast
2010-04-15  7:38     ` Jeff King

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.