Subject: Re: git stash: status from current dir not top dir?

From: Piotr Krukowiecki <[email-masked]>
Date: Sat, 12 Mar 2011 09:57:46 +0100

Thanks for review,
attaching patch with updated commit message.

W dniu 11.03.2011 23:32, Jeff King pisze:
> On Fri, Mar 11, 2011 at 09:49:13PM +0100, Piotr Krukowiecki wrote:
> 
>> But "git stash apply" shows status from root of git repository.
>> This is misleading because you can't copy and paste the paths.
> 
> Yeah, I am inclined to call it a bug. git-status will show the status of
> the whole tree from wherever you are, and people who want full paths
> will have status.relativePaths turned off, anyway. So I think your
> proposed semantics are more natural.

I think it's better this way too, one thing that made me doubt if this is 
intended or not is fact that git-commit also shows paths relative to root
dir...
 
>> This patch tries to fix git-stash.sh to show status relative to 
>> current directory. I can resend the patch with better commit message.
> 
> Yes, please. There is lots of nice discussion in your email but none of
> it in the commit message. :)

Didn't want to duplicate ;)

> 
>> diff --git a/git-stash.sh b/git-stash.sh
>> index 7561b37..586c12f 100755
>> --- a/git-stash.sh
>> +++ b/git-stash.sh
>> @@ -12,6 +12,7 @@ USAGE="list [<options>]
>>  
>>  SUBDIRECTORY_OK=Yes
>>  OPTIONS_SPEC=
>> +START_DIR=`pwd`
>>  . git-sh-setup
>>  require_work_tree
>>  cd_to_toplevel
>> @@ -394,7 +395,7 @@ apply_stash () {
>>  		then
>>  			squelch='>/dev/null 2>&1'
>>  		fi
>> -		eval "git status $squelch" || :
>> +		(cd "$START_DIR" && eval "git status $squelch") || :
>>  	else
>>  		# Merge conflict; keep the exit status from merge-recursive
>>  		status=$?
> 
> This fix looks reasonable to me. The other option would be to avoid
> cd_to_toplevel at the beginning (which I am not sure why we really need
> in the first place, but presumably some code paths rely on it), but it's
> probably not worth the risk of introducing new confusing bugs.
> 
> -Peff
---8<---
From: Piotr Krukowiecki <[email-masked]>
Date: Fri, 11 Mar 2011 20:50:49 +0100
Subject: [PATCH] git stash: show status relative to current directory

git status shows modified paths relative to current directory, so it's
possible to copy&paste them directly, even if you're in a subdirectory.

But "git stash apply" always shows status from root of git repository.
This is misleading because you can't use the paths without modifications.

This is caused by changing directory to root of repository at the
beginning of git stash.

This patch makes git stash show status relative to current directory.
Instead of removing the "cd to toplevel", which would affect whole
script and might have other side-effects, the fix is to change directory
temporarily back to original dir just before displaying status.

Signed-off-by: Piotr Krukowiecki <[email-masked]>
---
 git-stash.sh |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/git-stash.sh b/git-stash.sh
index 7561b37..b59c201 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -12,6 +12,7 @@ USAGE="list [<options>]
 
 SUBDIRECTORY_OK=Yes
 OPTIONS_SPEC=
+START_DIR=`pwd`
 . git-sh-setup
 require_work_tree
 cd_to_toplevel
@@ -394,7 +395,7 @@ apply_stash () {
 		then
 			squelch='>/dev/null 2>&1'
 		fi
-		eval "git status $squelch" || :
+		(cd "$START_DIR" && eval "git status $squelch") || :
 	else
 		# Merge conflict; keep the exit status from merge-recursive
 		status=$?
-- 
1.7.4.1.228.g9e388