1. 24 Jul, 2016 1 commit
  2. 24 Jun, 2016 4 commits
    • find_repo: Clean up and simplify logic · 2b490284
      find_repo had a complex loop and heavily nested conditionals, making it
      difficult to follow.  Simplify this as much as possible:
      
      - Separate assignments from conditionals.
      - Check the complex loop condition in the only place it can change.
      - Break out of the loop on error, rather than going through the rest of
        the loop body first.
      - Handle error cases by immediately breaking, rather than nesting
        conditionals.
      - Free repo_link unconditionally on the way out of the function, rather
        than in multiple places.
      - Add more comments on the remaining complex steps.
      Josh Triplett committed
    • Add GIT_REPOSITORY_OPEN_FROM_ENV flag to respect $GIT_* environment vars · 0dd98b69
      git_repository_open_ext provides parameters for the start path, whether
      to search across filesystems, and what ceiling directories to stop at.
      git commands have standard environment variables and defaults for each
      of those, as well as various other parameters of the repository. To
      avoid duplicate environment variable handling in users of libgit2, add a
      GIT_REPOSITORY_OPEN_FROM_ENV flag, which makes git_repository_open_ext
      automatically handle the appropriate environment variables. Commands
      that intend to act just like those built into git itself can use this
      flag to get the expected default behavior.
      
      git_repository_open_ext with the GIT_REPOSITORY_OPEN_FROM_ENV flag
      respects $GIT_DIR, $GIT_DISCOVERY_ACROSS_FILESYSTEM,
      $GIT_CEILING_DIRECTORIES, $GIT_INDEX_FILE, $GIT_NAMESPACE,
      $GIT_OBJECT_DIRECTORY, and $GIT_ALTERNATE_OBJECT_DIRECTORIES.  In the
      future, when libgit2 gets worktree support, git_repository_open_env will
      also respect $GIT_WORK_TREE and $GIT_COMMON_DIR; until then,
      git_repository_open_ext with this flag will error out if either
      $GIT_WORK_TREE or $GIT_COMMON_DIR is set.
      Josh Triplett committed
    • Add GIT_REPOSITORY_OPEN_NO_DOTGIT flag to avoid appending /.git · 39c6fca3
      GIT_REPOSITORY_OPEN_NO_SEARCH does not search up through parent
      directories, but still tries the specified path both directly and with
      /.git appended.  GIT_REPOSITORY_OPEN_BARE avoids appending /.git, but
      opens the repository in bare mode even if it has a working directory.
      To support the semantics git uses when given $GIT_DIR in the
      environment, provide a new GIT_REPOSITORY_OPEN_NO_DOTGIT flag to not try
      appending /.git.
      Josh Triplett committed
    • Fix repository discovery with ceiling_dirs at current directory · ed577134
      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.
      Josh Triplett committed
  3. 26 Apr, 2016 1 commit
    • annotated_commit: provide refs and description · d5592378
      Differentiate between the ref_name used to create an annotated_commit
      (that can subsequently be used to look up the reference) and the
      description that we resolved this with (which _cannot_ be looked up).
      
      The description is used for things like reflogs (and may be a ref name,
      and ID something that we revparsed to get here), while the ref name must
      actually be a reference name, and is used for things like rebase to
      return to the initial branch.
      Edward Thomson committed
  4. 27 Dec, 2015 1 commit
  5. 20 Nov, 2015 1 commit
  6. 28 Oct, 2015 1 commit
  7. 21 Oct, 2015 1 commit
  8. 18 Sep, 2015 1 commit
    • repository: only reserve repo dirs in the workdir · 538dfc88
      Check that the repository directory is beneath the workdir before
      adding it to the list of reserved paths.  If it is not, then there
      is no possibility of checking out files into it, and it should not
      be a reserved word.
      
      This is a particular problem with submodules where the repo directory
      may be in the super's .git directory.
      Edward Thomson committed
  9. 17 Sep, 2015 1 commit
    • git_futils_mkdir_*: make a relative-to-base mkdir · ac2fba0e
      Untangle git_futils_mkdir from git_futils_mkdir_ext - the latter
      assumes that we own everything beneath the base, as if it were
      being called with a base of the repository or working directory,
      and is tailored towards checkout and ensuring that there is no
      bogosity beneath the base that must be cleaned up.
      
      This is (at best) slow and (at worst) unsafe in the larger context
      of a filesystem where we do not own things and cannot do things like
      unlink symlinks that are in our way.
      Edward Thomson committed
  10. 03 Aug, 2015 1 commit
  11. 01 Jul, 2015 1 commit
  12. 24 Jun, 2015 1 commit
  13. 23 Jun, 2015 2 commits
  14. 22 Jun, 2015 1 commit
    • submodule: remove the per-repo cache · dfda2f68
      Having this cache and giving them out goes against our multithreading
      guarantees and it makes it impossible to use submodules in a
      multi-threaded environment, as any thread can ask for a refresh which
      may reallocate some string in the submodule struct which we've accessed
      in a different one via a getter.
      
      This makes the submodules behave more like remotes, where each object is
      created upon request and not shared except explicitly by the user. This
      means that some tests won't pass yet, as they assume they can affect the
      submodule objects in the cache and that will affect later operations.
      Carlos Martín Nieto committed
  15. 04 Apr, 2015 1 commit
  16. 24 Mar, 2015 1 commit
  17. 16 Mar, 2015 1 commit
  18. 10 Mar, 2015 1 commit
  19. 03 Mar, 2015 4 commits
  20. 27 Feb, 2015 1 commit
  21. 19 Feb, 2015 1 commit
  22. 06 Feb, 2015 1 commit
  23. 03 Feb, 2015 1 commit
  24. 30 Jan, 2015 1 commit
  25. 24 Jan, 2015 1 commit
  26. 23 Jan, 2015 1 commit
  27. 20 Jan, 2015 1 commit
  28. 30 Dec, 2014 1 commit
  29. 16 Dec, 2014 1 commit
    • checkout: disallow bad paths on win32 · a64119e3
      Disallow:
       1. paths with trailing dot
       2. paths with trailing space
       3. paths with trailing colon
       4. paths that are 8.3 short names of .git folders ("GIT~1")
       5. paths that are reserved path names (COM1, LPT1, etc).
       6. paths with reserved DOS characters (colons, asterisks, etc)
      
      These paths would (without \\?\ syntax) be elided to other paths - for
      example, ".git." would be written as ".git".  As a result, writing these
      paths literally (using \\?\ syntax) makes them hard to operate with from
      the shell, Windows Explorer or other tools.  Disallow these.
      Edward Thomson committed
  30. 27 Oct, 2014 1 commit
  31. 03 Oct, 2014 1 commit
  32. 17 Sep, 2014 1 commit
  33. 16 Sep, 2014 1 commit
    • Fix attribute lookup in index for bare repos · 1fbeb2f0
      When using a bare repo with an index, libgit2 attempts to read
      files from the index.  It caches those files based on the path
      to the file, specifically the path to the directory that contains
      the file.
      
      If there is no working directory, we use `git_path_dirname_r` to
      get the path to the containing directory.  However, for the
      `.gitattributes` file in the root of the repository, this ends up
      normalizing the containing path to `"."` instead of the empty
      string and the lookup the `.gitattributes` data fails.
      
      This adds a test of attribute lookups on bare repos and also
      fixes the problem by simply rewriting `"."` to be `""`.
      Russell Belfer committed