Subject: Re: Fwd: Git Directory Diff for submodule

From: Jens Lehmann <[email-masked]>
Date: Thu, 20 Feb 2014 21:03:06 +0000

Sorry for the late reply, but here we go ...

Am 10.02.2014 07:33, schrieb Gábor Lipták:
> Hi Jens,
> 
> So "git status" says:
> 
> liptak@liptak-kubuntu:~/Projects/MAIN_MODULE/platform/SUBMODULE
> [master]$ git status
> # On branch master
> # Your branch is up-to-date with 'origin/master'.
> #
> # Changes not staged for commit:
> #   (use "git add <file>..." to update what will be committed)
> #   (use "git checkout -- <file>..." to discard changes in working
> directory)
> #
> #       modified:   xxxxxx.java
> #       modified:   xxxxxxx.java
> # ...
> # ...
> # ...
> # ...
> # ...
> #
> no changes added to commit (use "git add" and/or "git commit -a")
> 
> git config core.worktree gives back: "../../../../platform/SUBMODULE"

Which looks a bit strange but is perfectly ok for a repository
that uses a gitfile, as the core.worktree setting is relative
to the git directory the gitfile references and not the directory
the gitfile lives in. A quick glance at the find_worktree
subroutine in git-difftool.perl makes me think that difftool is
not aware of that fact. David, does that make sense?

> The submodule was inited simply with "git submodule init" +
> "git.submodule update"
> 
> MAINMODULE/.gitsubmodules file contains similar entry:
> [submodule "platform/SUBMODULE"]
> path = platform/SUBMODULE
> url = ssh://git@somehost/foo/bar.git
> 
> MAINMODULE/.git/config:
> [submodule "platform/SUBMODULE"]
> url = ssh://git@somehost/foo/bar.git
> 
> MAINMODULE/platform/SUBMODULE/.git:
> gitdir: ../../.git/modules/platform/SUBMODULE
> 
> MAINMODULE/.git/modules/platform/SUBMODULE/config:
> [core]
> repositoryformatversion = 0
> filemode = true
> bare = false
> logallrefupdates = true
> worktree = ../../../../platform/SUBMODULE
> [remote "origin"]
> url = ssh://git@somehost/foo/bar.git
> fetch = +refs/heads/*:refs/remotes/origin/*
> 
> So for me it seems that somehow the relative path inside
> MAINMODULE/.git/modules/platform/SUBMODULE/config gets configuread
> wrong during submodule init+update.
> 
> I tried to update the
> MAINMODULE/.git/modules/platform/SUBMODULE/config to contain
> ../../platform/SUBMODULE as worktree path, then meld was correctly
> started, but the compare tree was not usable. For file changes it
> displayed always: XXXXX.java: Dangling symlink. So this is still not a
> complete solution somehow.
> 
> Regards,
> 
> Gábor Lipták
> 
> 2014-02-07 Jens Lehmann <[email-masked]>:
>> Am 07.02.2014 10:15, schrieb Gábor Lipták:
>>> I think I have found a bug related to submodules and directory diff.
>>> See the details at hXXp://stackoverflow.com/q/21623155/337621.
>>
>> Let's inline the recipe one finds after decrypting this link:
>>
>> ~/Projects/MAINMODULE/platform/SUBMODULE [master]$ git difftool -tool=meld --dir-diff --cached
>>   fatal: Could not switch to '../../../../platform/': No such file or directory
>>   diff --raw --no-abbrev -z --cached: command returned error: 128
>> ~/Projects/MAINMODULE/platform/SUBMODULE [master]$ cd ..
>> ~/Projects/MAINMODULE/platform [master]$ cd ..
>> ~/Projects/MAINMODULE [master]$ git difftool -tool=meld --dir-diff --cached
>>   // NO PROBLEM, works.
>> ~/Projects/MAINMODULE [master]$ git version
>>   git version 1.8.4
>>
>>
>>> If you need any further details, just ask.
>>
>> - Does this only happen when you use difftool? E.g. what does
>>   "git status" inside the submodule say?
>>
>> - What does "git config core.worktree" print when run in the
>>   submodule?
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to [email-masked]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>