BREAKING CHANGE: this removes the posh-git segment. To mitigate,
rename the posh-git segment to git.
In case you had a custom template, make sure to migrate to the git
segment's template. You can now also leverage the same logic and
properties as the git segment in both the text template and/or
color templates.
The simple filepath.IsAbs() is not enough on Windows, where the relative
path may start with a separator and should then be taken relative to the
volume name.
So, introduce resolveGitPath() helper function that will do the right
thing on both Windows and other systems. As a bonus, it returns paths
converted to slashes for ease of use with the rest of the git segment:
- Git for Windows uses only slashes.
- Slashes do work as a path separator on Windows anyway.
- Some tests in git segment still use (and rightfully so) slashes.
Add tests for resolveGitPath() on both types of systems and fix
TestEnableInWorktree using a system-dependent testing constant as a root
path.
filepath.Join() just concatenates paths. We have to check manually for
an absolute path and discard the first component to end up with the
correct path.
Also, fix the tests to demonstrate actual behaviour of git, not what
filepath.Join() was doing.
Additionally, note that on Windows git paths in gitdir use unix
separators, so search for `/worktrees/` instead of using system
separator, just like when processing all the other cases.
Currently the git segment does not detect when an upstream is removed
(e.g., a PR is merged and the remote branch is deleted).
This change adds functionality to detect when upstream is removed;
if the status reports "branch.upstream" but no "branch.ab", it is gone.
The UI has also been changed to reflect this third state;
it now matches posh-git's behavior, which only shows the Gone icon
if an upstream branch is set but does not report ahead/behind counts.