Files
vscode-gitlens/src/git/models/status.ts
2017-06-12 12:13:48 -04:00

73 lines
2.0 KiB
TypeScript

'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;
}