On Mon, May 16, 2016 at 8:46 AM, Vasily Titskiy <qeh...@gmail.com> wrote:
> Hi Stefan,
>
> On Sun, May 15, 2016 at 11:37:20PM -0700, Stefan Beller wrote:
>> On Sun, May 15, 2016 at 7:07 PM, Vasily Titskiy <qeh...@gmail.com> wrote:
>> > Do not save states of submodules as stash should ignore it.
>>
>> Can you explain why this is a good idea?
>> (It is not obvious to me either way.)
> Actually, submodules are already ignored by stash, but not fully (it was 
> introduced in commit 6848d58).
> Current behavior is counter-intuitive, for example (if one has a project with 
> a submodule):
>  $ cd sub1
>  $ edit .. commit .. edit .. commit. Alternatively, just checkout some other 
> commit
>  $ cd .. # back to main project
>  $ git stash save
>    No local changes to save
>  $ # so, stash declares there are no changes
>  $ edit main.cpp
>  $ # For example, I need to update my working tree to latest master
>  $ git stash save # save local changes of 'main.cpp'...
>  $ git pull --recurse-submodules && git submodule update --recursive # update 
> to latest
>  $ git stash pop # I expect to get stashed changes for 'main.cpp', but...
>    warning: Failed to merge submodule sub1 (commits don't follow merge-base)
>    Auto-merging sub1
>    CONFLICT (submodule): Merge conflict in sub1
>
> So, this is the issue. Instead of getting my local changes, I got a conflict 
> (and stash is not
> poped out). The root cause is the 'stash' command does not know how to deal 
> with submodules,
> but currently it tries to save the state of submodules, and even tries to 
> re-apply the state
> (and it fails of course). The proposed solution fixes this behaviour.
>
> All internal tests work fine with the change.

I think you could take the example as above and make it into a test?
Showing that this change actually fixes a bug.

Looking for a good place, I would have expected t/t3906-stash-submodule.sh
would be a good place to put your code, but I am not sure how to
properly integrate that test there.

Maybe we can put the test in t3903 instead?

>
>
>>
>> Do we need a test/documentation updates for this?
> I don't think so, 'stash' have never claimed submodule support.

But it also never explicitly claimed it doesn't support it.

Maybe we want to squash in something like
(with better wording):

diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt
index 92df596..b2649eb 100644
--- a/Documentation/git-stash.txt
+++ b/Documentation/git-stash.txt
@@ -41,6 +41,8 @@ the usual reflog syntax (e.g. `stash@{0}` is the most recently
 created stash, `stash@{1}` is the one before it, `stash@{2.hours.ago}`
 is also possible).

+Stashing ignores submodule operations completely.
+
 OPTIONS
 -------


Thanks,
Stefan



>
>>
>> >
>> > Signed-off-by: Vasily Titskiy <qeh...@gmail.com>
>> > ---
>> >  git-stash.sh | 2 +-
>> >  1 file changed, 1 insertion(+), 1 deletion(-)
>> >
>> > diff --git a/git-stash.sh b/git-stash.sh
>> > index c7c65e2..b500c44 100755
>> > --- a/git-stash.sh
>> > +++ b/git-stash.sh
>> > @@ -116,7 +116,7 @@ create_stash () {
>> >                         git read-tree --index-output="$TMPindex" -m 
>> > $i_tree &&
>> >                         GIT_INDEX_FILE="$TMPindex" &&
>> >                         export GIT_INDEX_FILE &&
>> > -                       git diff --name-only -z HEAD -- >"$TMP-stagenames" 
>> > &&
>> > +                       git diff --name-only --ignore-submodules -z HEAD 
>> > -- >"$TMP-stagenames" &&
>> >                         git update-index -z --add --remove --stdin 
>> > <"$TMP-stagenames" &&
>> >                         git write-tree &&
>> >                         rm -f "$TMPindex"
>> > --
>> > 2.1.4
>> >
>> > --
>> > To unsubscribe from this list: send the line "unsubscribe git" in
>> > the body of a message to majord...@vger.kernel.org
>> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to