GIT_INDEX_FILE is typically set to index.lock when Vim is invoked by
`git commit`. This effectively breaks Fugitive if you try to use it in
a different repository while inside that Vim session. To remedy this,
we can instead point GIT_INDEX_FILE at the index file for the relevant
repository.
This also retools command preparation to allow for general purpose
environment variable overrides.
This is our only use of Git that requires writing to stdin, so
shoehorning that behavior onto s:StdoutToFile() frees us from worrying
about that when designing a more general purpose API.
This allows tomfoolery like FugitiveConfig(dir)->FugitiveConfigGet(key).
I'm not sure I want to officially endorse this usage, but if nothing
else it makes interactive debugging a bit more fluid.
Combined stdout and stderr is what system() gives us, so the plugin was
built around it. But getting the same from jobs is annoying, so let's
eliminate all unnecessary uses of it.
Based on the prevalence of /usr/bin/env shebangs, I trust it is safe to
hard code this. Or at least, it's safer than trusting the user not to
create a script called env.
This shouldn't matter in this context since it's designed only to
provoke an error message, but fix it anyways so it stops setting off
mental alarm bells.
* Respect User and Port in addition to Hostname.
* Support globs and negations in addition to literal host matching.
* Parse global config file in addition to user config file.
* Handle Include declarations.
References: https://github.com/tpope/vim-rhubarb/issues/65
This is currently a valid assumption, but it boxes us in. Instead use
fugitive#Find('.git/'), which is guaranteed to return a path to an
actual directory.
Also use fugitive#Find('.git/refs/..') to determine the common
directory.
This correctly handles the case of multiple consecutive nulls (which I
don't think Git every produces in practice) and also the case of a bogus
newline at the end (which seems to happen with PowerShell).
References https://github.com/tpope/vim-fugitive/pull/1783
Taking the option that was historically a shell command and treating it
as a space-delimited argument list means that there's no longer any way
to include a space in an argument. Let's rectify that by reusing a
simplified version of the argument parser in s:SplitExpandChain(), which
handles both single and double quoted strings in a way similar to how
shells do it.
Of course, the ideal solution is to just use a list of strings to begin
with. Support for that is added here as well.
References: https://github.com/tpope/vim-fugitive/issues/1751
# This is the commit message #2:
squash! Accept argument list for g:fugitive_git_executable
When I first wrote this code, I believed push.default=upstream to be the
One True Way, and I used the upstream as the default branch when one
wasn't passed into :GBrowse. Since then, my preferred workflow has
shifted to push.default=current, with my upstream pointed at the
repository's integration branch (typically master), which means :GBrowse
effectively ignores our current branch, which is less than helpful.
This change eliminates :GBrowse's use of the upstream tracking branch
except in 2 scenarios:
* When push.default=upstream
* When the current branch has never been pushed (since using the current
branch would result in a 404).
This renders a lot of other version checks inside the plugin obsolete,
but I'm going to hold off on cleaning them up until I'm sure this change
is permanent.
* Replace :! :Git backend with smart job runner.
* Replace special cased commit/revert/rebase/merge/etc. with regular :Git.
* Support :Git -c config.name=value and other common flags.
* Improve completion of :Git subcommands, including hiding plumbing commands.
* Improve completion of arguments to :Git subcommands.
* Show unpulled and unpushed sections for both upstream and push remote.
* Introduce capitalized naming scheme for :GMove/:GRename/:GRemove/:GDelete/:GBrowse.
* Expand SSH host aliases in remote URLs for :GBrowse.
* Enable opening arbitrary URLs with :GBrowse.
* Add warnings to deprecated commands.
* Remove all other temp buffer commands in favor of :Git --paginate.
* Don't automatically invoke :setlocal foldmethod=syntax in Fugitive buffers.
* Support colored :Git blame commits in 256 color terminals.
* Bug fixes.
I don't think the change that this reverts was necessarily wrong,
but this isn't the best time in the release cycle to play whack-a-mole
with unintended consequences.
Closes https://github.com/tpope/vim-fugitive/issues/1732