diff --git a/src/plugins/autocompletion_utils/Common.ts b/src/plugins/autocompletion_utils/Common.ts index 6693a85f7..5e1e0f921 100644 --- a/src/plugins/autocompletion_utils/Common.ts +++ b/src/plugins/autocompletion_utils/Common.ts @@ -260,26 +260,46 @@ export function mk(provider: AutocompletionProvider) { export const emptyProvider = mk(async() => []); + + function gitStatusCodeColor(statusCode: StatusCode) { switch (statusCode) { - case StatusCode.Added: + case StatusCode.StagedModified: + case StatusCode.StagedAdded: + case StatusCode.StagedDeleted: + case StatusCode.StagedRenamed: + case StatusCode.StagedCopied: return colors.green; - case StatusCode.Copied: + + case StatusCode.StagedCopiedUnstagedModified: + case StatusCode.StagedCopiedUnstagedDeleted: + case StatusCode.StagedRenamedUnstagedModified: + case StatusCode.StagedRenamedUnstagedDeleted: + case StatusCode.StagedDeletedUnstagedModified: + case StatusCode.StagedAddedUnstagedModified: + case StatusCode.StagedAddedUnstagedDeleted: + case StatusCode.StagedModifiedUnstagedModified: + case StatusCode.StagedModifiedUnstagedDeleted: return colors.blue; - case StatusCode.Deleted: + + case StatusCode.UnstagedDeleted: + case StatusCode.UnmergedBothDeleted: + case StatusCode.UnmergedAddedByUs: + case StatusCode.UnmergedDeletedByThem: + case StatusCode.UnmergedAddedByThem: + case StatusCode.UnmergedDeletedByUs: + case StatusCode.UnmergedBothAdded: + case StatusCode.UnmergedBothModified: + case StatusCode.Untracked: + case StatusCode.Ignored: + case StatusCode.Invalid: return colors.red; - case StatusCode.Modified: - return colors.blue; - case StatusCode.Renamed: - return colors.blue; + case StatusCode.Unmodified: return colors.white; - case StatusCode.Untracked: - return colors.red; - case StatusCode.UpdatedButUnmerged: - return colors.blue; default: - throw "Should never happen."; + console.error(`Unhandled git status code: ${statusCode}`); + return colors.white; } } diff --git a/src/utils/Git.ts b/src/utils/Git.ts index edda8144b..f17c984c7 100644 --- a/src/utils/Git.ts +++ b/src/utils/Git.ts @@ -22,44 +22,72 @@ export interface ConfigVariable { } export enum StatusCode { - Untracked, Unmodified, - Modified, - Added, - Deleted, - Renamed, - Copied, - UpdatedButUnmerged, - StagedChanges, - StagedAndUnstagedChanges + + UnstagedModified, + UnstagedDeleted, + StagedModified, + StagedModifiedUnstagedModified, + StagedModifiedUnstagedDeleted, + StagedAdded, + StagedAddedUnstagedModified, + StagedAddedUnstagedDeleted, + StagedDeleted, + StagedDeletedUnstagedModified, + StagedRenamed, + StagedRenamedUnstagedModified, + StagedRenamedUnstagedDeleted, + StagedCopied, + StagedCopiedUnstagedModified, + StagedCopiedUnstagedDeleted, + + UnmergedBothDeleted, + UnmergedAddedByUs, + UnmergedDeletedByThem, + UnmergedAddedByThem, + UnmergedDeletedByUs, + UnmergedBothAdded, + UnmergedBothModified, + + Untracked, + Ignored, + + Invalid, } function lettersToStatusCode(letters: string): StatusCode { switch (letters) { - case "??": - return StatusCode.Untracked; - case " ": - return StatusCode.Unmodified; - case "M ": - return StatusCode.StagedChanges; - case " M": - return StatusCode.Modified; - case "AM": - return StatusCode.Added; - case " A": - return StatusCode.Added; - case " D": - return StatusCode.Deleted; - case " R": - return StatusCode.Renamed; - case " C": - return StatusCode.Copied; - case " U": - return StatusCode.UpdatedButUnmerged; - case "MM": - return StatusCode.StagedAndUnstagedChanges; - default: - throw `Unknown Git status code: ${letters}`; + case " ": return StatusCode.Unmodified; + + case " M": return StatusCode.UnstagedModified; + case " D": return StatusCode.UnstagedDeleted; + case "M ": return StatusCode.StagedModified; + case "MM": return StatusCode.StagedModifiedUnstagedModified; + case "MD": return StatusCode.StagedModifiedUnstagedDeleted; + case "A ": return StatusCode.StagedAdded; + case "AM": return StatusCode.StagedAddedUnstagedModified; + case "AD": return StatusCode.StagedAddedUnstagedDeleted; + case "D ": return StatusCode.StagedDeleted; + case "DM": return StatusCode.StagedDeletedUnstagedModified; + case "R ": return StatusCode.StagedRenamed; + case "RM": return StatusCode.StagedRenamedUnstagedModified; + case "RD": return StatusCode.StagedRenamedUnstagedDeleted; + case "C ": return StatusCode.StagedCopied; + case "CM": return StatusCode.StagedCopiedUnstagedModified; + case "CD": return StatusCode.StagedCopiedUnstagedDeleted; + + case "DD": return StatusCode.UnmergedBothDeleted; + case "AU": return StatusCode.UnmergedAddedByUs; + case "UD": return StatusCode.UnmergedDeletedByThem; + case "UA": return StatusCode.UnmergedAddedByThem; + case "DU": return StatusCode.UnmergedDeletedByUs; + case "AA": return StatusCode.UnmergedBothAdded; + case "UU": return StatusCode.UnmergedBothModified; + + case "??": return StatusCode.Untracked; + case "!!": return StatusCode.Ignored; + + default: return StatusCode.Invalid; } }