• Show log

    Commit

  • Hash : a200dc9e
    Author : Josh Triplett
    Date : 2016-04-03T19:24:15

    Fix repository discovery with ceiling_dirs at current directory
    
    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.