Separate git directory support - #201
Conversation
|
I was aware of the failing formatting check, but that is existing bad formatting and I was loathe to change formatting outside of code I was modifying myself. |
|
Can you rebase your PR? thanks |
2694243 to
71b85b8
Compare
| if (!preg_match('/^gitdir: ?(.+)$/', file_get_contents($realGitDir . '/.git'), $matches)) { | ||
| throw new InvalidArgumentException(sprintf('Directory "%s" contains a .git file, but it is not in the expected format', $realGitDir)); | ||
| } | ||
| $foundGitPath = realpath($realGitDir . DIRECTORY_SEPARATOR . $matches[1]); |
There was a problem hiding this comment.
@chris114782 This assumes that the gitdir is a relative path, which might not be true.
There was a problem hiding this comment.
I'll try and take a look this weekend, it's been a few months (nearly a year now!) since I looked at this and I need to get my head back into it.
|
Thanks for working on this! I tested the actual code against real repositories ( Blocking: the feature doesn't work for its own headline use case
$foundGitPath = realpath($realGitDir . DIRECTORY_SEPARATOR . $matches[1]);This blindly concatenates the checkout directory with the path read from the Only the submodule case works, because The added test never exercises the new code path
I confirmed empirically that running
Other real bugs
Minor / cleanup
Suggested directionIn |
In #200 I highlighted that the library does not support submodules.
This is because in a submodule does not store its .git folder inside the checked out repository, instead .git is a file that has a reference to the actual location of the .git directory.
This is documented here
You can manually reproduce this by doing
git clone --separate-git-dir=/somewhere/else your-repo-urlThis PR adds support for such a set up by detecting that .git is a file instead of a directory and attempting to read the path to the real directory from it.