libgit2/libgit2 — pull request #623 by arrbee (2012-04-11 19:27:34+00:00)
Title: Update git_repository_open

Add a new command `git_repository_open_ext` with extended options that control how searching for a repository will be done. The existing `git_repository_open` and `git_repository_discover` are reimplemented on top of it. We may want to change the default behavior of `git_repository_open` but this commit does not do that.

Improve support for "gitdir" files where the work dir is separate from the repo and support for the "separate-git-dir" config. Also, add support for opening repos created with `git-new-workdir` script (although I have only confirmed that they can be opened, not that all functions work correctly).

There are also a few minor changes that came up:

- Fix `git_path_prettify` to allow in-place prettifying.
- Fix `git_path_root` to support backslashes on Win32. This fix should help many repo open/discover scenarios - it is the one function called when opening before prettifying the path.
- Tweak `git_config_get_string` to set the "out" pointer to NULL if the config value is not found. Allows some other cleanup.
- Fix a couple places that should have been calling `git_repository_config__weakptr` and were not.
- Fix `cl_git_sandbox_init` clar helper to support bare repos.

These changes should help with some old issues:

- For issue #479, this should allow you to open a repository using a Win32 path. This is not a global fix to allow non-posix paths, but a local one that will allow open and discover to work. (The win32 version of `realpath()` was already posix-ifying the path, so I just had to fix `git_path_root()` as mentioned above.)
- For issue #529, `separate-git-dir` should now be fully supported because workdir guessing will respect the config entry.
- For issue #620, I have written tests to confirm that a workdir built with `git-new-workdir` can definitely be opened, so reading will work. I'm guessing that writing is still broken which is more what that issue is about.