mirror of
https://github.com/ckaczor/vscode-gitlens.git
synced 2026-01-14 10:03:15 -05:00
73 lines
2.0 KiB
TypeScript
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;
|
|
} |