Problem:
In worktrees, enabling reftable caused the gitfast prompt to sometimes show “.invalid” for the branch name, e.g. `git:(.invalid|SPARSE)`. The cause was gitfast’s __git_ps1 reading $GIT_DIR/HEAD (and sequencer head-name files) directly and attempting to derive the ref name by string slicing. That approach is brittle with worktrees and newer ref backends like reftable.
What changed:
- Prefer `git symbolic-ref --short HEAD` to resolve the branch name.
- Also use `--short` when HEAD is a symlink.
- Keep existing fallbacks (describe/detached SHA) unchanged.
Why this is correct:
- Delegates ref resolution to Git’s ref API, which understands:
- multiple worktrees (`.git/worktrees/<name>/HEAD`)
- all ref storage backends (loose, packed, reftable)
- edge cases around in-progress operations and symlinks
- Avoids parsing internal files that can legitimately be non-canonical or transient (e.g., head-name during rebase, or placeholders that appear as “.invalid” with reftable+worktrees).
Impact:
- Correct branch names in worktrees regardless of ref backend (fixes “.invalid”).
- Detached HEAD behavior remains: still falls back to describe/short SHA.
- `|SPARSE` logic unchanged and still driven by `core.sparseCheckout`.
- Backwards-compatible: older Git that supports `symbolic-ref --short` works; fallbacks still apply if not a branch.
Rationale:
Ref backends like reftable decouple refs from the filesystem layout that gitfast was implicitly depending on. Using Git’s plumbing for branch resolution is the robust, future-proof approach.
An error was thrown (`bash: [: =: unary operator expected`) when using the __git_ps1_colorize_gitstring function outside of the one place it's called (line 512), because the "detached" variable was not quoted, and was unset.
* gitfast: use $OSTYPE again
In the last update to upstream this was reverted:
a56eac7a (Use OSTYPE instead of uname whenever possible for better speed. (#5496))
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
* gitfast: simplify plugin
No need to set and unset a variable we use once.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
* gitfast: add script to update from upstream
This would make easier the process of updating, and also not miss our
patches.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
* gitfast: update to upstream v2.21
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
When showing the char % for untracket files, it was not being escaped
so there was shown a space in the place. It was also removing any char
that was right just after.