mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-12-28 04:19:41 -08:00
fix(git): support in-progress cherry-pick/revert
When a cherry-pick is in progress, .git/CHERRY_PICK_HEAD doesn't exist, so read .git/sequencer/todo instead. The canonical git prompt in git/git/contrib has this in the "sequencer" section, which handles cherry-pick operations. This includes support for "git revert", so I am also adding that. I chose the fa-undo icon for "revert". @see https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh
This commit is contained in:
parent
7bf528ef11
commit
c7b78c3de3
|
@ -72,6 +72,8 @@ const (
|
||||||
RebaseIcon Property = "rebase_icon"
|
RebaseIcon Property = "rebase_icon"
|
||||||
// CherryPickIcon shows before the cherry-pick context
|
// CherryPickIcon shows before the cherry-pick context
|
||||||
CherryPickIcon Property = "cherry_pick_icon"
|
CherryPickIcon Property = "cherry_pick_icon"
|
||||||
|
// RevertIcon shows before the revert context
|
||||||
|
RevertIcon Property = "revert_icon"
|
||||||
// CommitIcon shows before the detached context
|
// CommitIcon shows before the detached context
|
||||||
CommitIcon Property = "commit_icon"
|
CommitIcon Property = "commit_icon"
|
||||||
// NoCommitsIcon shows when there are no commits in the repo yet
|
// NoCommitsIcon shows when there are no commits in the repo yet
|
||||||
|
@ -331,11 +333,34 @@ func (g *git) getGitHEADContext(ref string) string {
|
||||||
return fmt.Sprintf("%s%s%s into %s", icon, branchIcon, branch, ref)
|
return fmt.Sprintf("%s%s%s into %s", icon, branchIcon, branch, ref)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// cherry-pick
|
// sequencer status
|
||||||
|
// see if a cherry-pick or revert is in progress, if the user has committed a
|
||||||
|
// conflict resolution with 'git commit' in the middle of a sequence of picks or
|
||||||
|
// reverts then CHERRY_PICK_HEAD/REVERT_HEAD will not exist so we have to read
|
||||||
|
// the todo file.
|
||||||
if g.hasGitFile("CHERRY_PICK_HEAD") {
|
if g.hasGitFile("CHERRY_PICK_HEAD") {
|
||||||
sha := g.getGitFileContents("CHERRY_PICK_HEAD")
|
sha := g.getGitFileContents("CHERRY_PICK_HEAD")
|
||||||
icon := g.props.getString(CherryPickIcon, "\uE29B ")
|
icon := g.props.getString(CherryPickIcon, "\uE29B ")
|
||||||
return fmt.Sprintf("%s%s onto %s", icon, sha[0:6], ref)
|
return fmt.Sprintf("%s%s onto %s", icon, sha[0:6], ref)
|
||||||
|
} else if g.hasGitFile("REVERT_HEAD") {
|
||||||
|
sha := g.getGitFileContents("REVERT_HEAD")
|
||||||
|
icon := g.props.getString(RevertIcon, "\uF0E2 ")
|
||||||
|
return fmt.Sprintf("%s%s onto %s", icon, sha[0:6], ref)
|
||||||
|
} else if g.hasGitFile("sequencer/todo") {
|
||||||
|
todo := g.getGitFileContents("sequencer/todo")
|
||||||
|
matches := findNamedRegexMatch(`^(?P<action>p|pick|revert)\s+(?P<sha>\S+)`, todo)
|
||||||
|
if matches != nil && matches["sha"] != "" {
|
||||||
|
action := matches["action"]
|
||||||
|
sha := matches["sha"]
|
||||||
|
switch action {
|
||||||
|
case "p", "pick":
|
||||||
|
icon := g.props.getString(CherryPickIcon, "\uE29B ")
|
||||||
|
return fmt.Sprintf("%s%s onto %s", icon, sha[0:6], ref)
|
||||||
|
case "revert":
|
||||||
|
icon := g.props.getString(RevertIcon, "\uF0E2 ")
|
||||||
|
return fmt.Sprintf("%s%s onto %s", icon, sha[0:6], ref)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return ref
|
return ref
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue