Name |
Last commit
|
Last update |
---|---|---|
.. | ||
config.c | ||
discover.c | ||
getters.c | ||
hashfile.c | ||
head.c | ||
headtree.c | ||
init.c | ||
iterator.c | ||
message.c | ||
new.c | ||
open.c | ||
pathspec.c | ||
repo_helpers.c | ||
repo_helpers.h | ||
reservedname.c | ||
setters.c | ||
shallow.c | ||
state.c |
git only checks ceiling directories when its search ascends to a parent directory. A ceiling directory matching the starting directory will not prevent git from finding a repository in the starting directory or a parent directory. libgit2 handled the former case correctly, but differed from git in the latter case: given a ceiling directory matching the starting directory, but no repository at the starting directory, libgit2 would stop the search at that point rather than finding a repository in a parent directory. Test case using git command-line tools: /tmp$ git init x Initialized empty Git repository in /tmp/x/.git/ /tmp$ cd x/ /tmp/x$ mkdir subdir /tmp/x$ cd subdir/ /tmp/x/subdir$ GIT_CEILING_DIRECTORIES=/tmp/x git rev-parse --git-dir fatal: Not a git repository (or any of the parent directories): .git /tmp/x/subdir$ GIT_CEILING_DIRECTORIES=/tmp/x/subdir git rev-parse --git-dir /tmp/x/.git Fix the testsuite to test this case (in one case fixing a test that depended on the current behavior), and then fix find_repo to handle this case correctly. In the process, simplify and document the logic in find_repo(): - Separate the concepts of "currently checking a .git directory" and "number of iterations left before going further counts as a search" into two separate variables, in_dot_git and min_iterations. - Move the logic to handle in_dot_git and append /.git to the top of the loop. - Only search ceiling_dirs and find ceiling_offset after running out of min_iterations; since ceiling_offset only tracks the longest matching ceiling directory, if ceiling_dirs contained both the current directory and a parent directory, this change makes find_repo stop the search at the parent directory.
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
config.c | Loading commit data... | |
discover.c | Loading commit data... | |
getters.c | Loading commit data... | |
hashfile.c | Loading commit data... | |
head.c | Loading commit data... | |
headtree.c | Loading commit data... | |
init.c | Loading commit data... | |
iterator.c | Loading commit data... | |
message.c | Loading commit data... | |
new.c | Loading commit data... | |
open.c | Loading commit data... | |
pathspec.c | Loading commit data... | |
repo_helpers.c | Loading commit data... | |
repo_helpers.h | Loading commit data... | |
reservedname.c | Loading commit data... | |
setters.c | Loading commit data... | |
shallow.c | Loading commit data... | |
state.c | Loading commit data... |