'use strict'; import { Uri } from 'vscode'; import { GitUri } from '../gitUri'; import * as path from 'path'; export interface GitStatus { branch: string; repoPath: string; sha: string; state: { ahead: number; behind: number; }; upstream?: string; files: GitStatusFile[]; } export declare type GitStatusFileStatus = '!' | '?' | 'A' | 'C' | 'D' | 'M' | 'R' | 'U'; export interface IGitStatusFile { status: GitStatusFileStatus; fileName: string; originalFileName?: string; } export class GitStatusFile implements IGitStatusFile { originalFileName?: string; constructor(public repoPath: string, public status: GitStatusFileStatus, public fileName: string, public staged: boolean, originalFileName?: string) { this.originalFileName = originalFileName; } getFormattedDirectory(includeOriginal: boolean = false): string { return GitStatusFile.getFormattedDirectory(this, includeOriginal); } getFormattedPath(separator: string = ' \u00a0\u2022\u00a0 '): string { return GitUri.getFormattedPath(this.fileName, separator); } getIcon() { return getGitStatusIcon(this.status); } get Uri(): Uri { return Uri.file(path.resolve(this.repoPath, this.fileName)); } static getFormattedDirectory(status: IGitStatusFile, includeOriginal: boolean = false): string { const directory = GitUri.getDirectory(status.fileName); return (includeOriginal && status.status === 'R' && status.originalFileName) ? `${directory} \u00a0\u2190\u00a0 ${status.originalFileName}` : directory; } } const statusOcticonsMap = { '!': '$(diff-ignored)', '?': '$(diff-added)', A: '$(diff-added)', C: '$(diff-added)', D: '$(diff-removed)', M: '$(diff-modified)', R: '$(diff-renamed)', U: '$(question)' }; export function getGitStatusIcon(status: GitStatusFileStatus, missing: string = '\u00a0\u00a0\u00a0\u00a0'): string { return statusOcticonsMap[status] || missing; }