Unifies file status model

This commit is contained in:
Eric Amodio
2017-03-28 10:01:34 -04:00
parent d0b4c2fd5c
commit 296e562d9f
6 changed files with 26 additions and 22 deletions

View File

@@ -1,21 +1,15 @@
'use strict'; 'use strict';
import { Uri } from 'vscode'; import { Uri } from 'vscode';
import { GitCommit, IGitCommitLine } from './commit'; import { GitCommit, IGitCommitLine } from './commit';
import { GitStatusFileStatus } from './status'; import { IGitStatusFile, GitStatusFileStatus } from './status';
import * as path from 'path'; import * as path from 'path';
export type GitLogType = 'file' | 'repo'; export type GitLogType = 'file' | 'repo';
export interface IGitLogFileStatusEntry {
status: GitStatusFileStatus;
fileName: string;
originalFileName?: string;
}
export class GitLogCommit extends GitCommit { export class GitLogCommit extends GitCommit {
fileNames: string; fileNames: string;
fileStatuses: IGitLogFileStatusEntry[]; fileStatuses: IGitStatusFile[];
nextSha?: string; nextSha?: string;
nextFileName?: string; nextFileName?: string;
parentShas: string[]; parentShas: string[];
@@ -30,7 +24,7 @@ export class GitLogCommit extends GitCommit {
date: Date, date: Date,
message: string, message: string,
status?: GitStatusFileStatus, status?: GitStatusFileStatus,
fileStatuses?: IGitLogFileStatusEntry[], fileStatuses?: IGitStatusFile[],
lines?: IGitCommitLine[], lines?: IGitCommitLine[],
originalFileName?: string, originalFileName?: string,
previousSha?: string, previousSha?: string,

View File

@@ -1,4 +1,6 @@
'use strict'; 'use strict';
import { Uri } from 'vscode';
import * as path from 'path';
export interface IGitStatus { export interface IGitStatus {
@@ -16,17 +18,27 @@ export interface IGitStatus {
export declare type GitStatusFileStatus = '!' | '?' | 'A' | 'C' | 'D' | 'M' | 'R' | 'U'; export declare type GitStatusFileStatus = '!' | '?' | 'A' | 'C' | 'D' | 'M' | 'R' | 'U';
export class GitStatusFile { export interface IGitStatusFile {
status: GitStatusFileStatus;
fileName: string;
originalFileName?: string;
}
export class GitStatusFile implements IGitStatusFile {
originalFileName?: string; originalFileName?: string;
constructor(public repoPath: string, public status: GitStatusFileStatus, public staged: boolean, public fileName: string, originalFileName?: string) { constructor(public repoPath: string, public status: GitStatusFileStatus, public fileName: string, public staged: boolean, originalFileName?: string) {
this.originalFileName = originalFileName; this.originalFileName = originalFileName;
} }
getIcon() { getIcon() {
return getGitStatusIcon(this.status); return getGitStatusIcon(this.status);
} }
get Uri(): Uri {
return Uri.file(path.resolve(this.repoPath, this.fileName));
}
} }
const statusOcticonsMap = { const statusOcticonsMap = {

View File

@@ -1,6 +1,6 @@
'use strict'; 'use strict';
import { Range } from 'vscode'; import { Range } from 'vscode';
import { Git, GitStatusFileStatus, GitLogCommit, GitLogType, IGitAuthor, IGitLog, IGitLogFileStatusEntry } from './../git'; import { Git, GitStatusFileStatus, GitLogCommit, GitLogType, IGitAuthor, IGitLog, IGitStatusFile } from './../git';
// import { Logger } from '../../logger'; // import { Logger } from '../../logger';
import * as moment from 'moment'; import * as moment from 'moment';
import * as path from 'path'; import * as path from 'path';
@@ -18,7 +18,7 @@ interface ILogEntry {
fileName?: string; fileName?: string;
originalFileName?: string; originalFileName?: string;
fileStatuses?: IGitLogFileStatusEntry[]; fileStatuses?: IGitStatusFile[];
status?: GitStatusFileStatus; status?: GitStatusFileStatus;
@@ -134,7 +134,7 @@ export class GitLogParser {
status: line[0] as GitStatusFileStatus, status: line[0] as GitStatusFileStatus,
fileName: line.substring(1), fileName: line.substring(1),
originalFileName: undefined as string originalFileName: undefined as string
} as IGitLogFileStatusEntry; } as IGitStatusFile;
this._parseFileName(status); this._parseFileName(status);
entry.fileStatuses.push(status); entry.fileStatuses.push(status);

View File

@@ -67,7 +67,7 @@ export class GitStatusParser {
else { else {
entry = this._parseFileEntry(rawStatus, fileName); entry = this._parseFileEntry(rawStatus, fileName);
} }
status.files.push(new GitStatusFile(repoPath, entry.status, entry.staged, entry.fileName, entry.originalFileName)); status.files.push(new GitStatusFile(repoPath, entry.status, entry.fileName, entry.staged, entry.originalFileName));
} }
} }
} }
@@ -115,7 +115,7 @@ export class GitStatusParser {
} }
if (entry) { if (entry) {
status.files.push(new GitStatusFile(repoPath, entry.status, entry.staged, entry.fileName, entry.originalFileName)); status.files.push(new GitStatusFile(repoPath, entry.status, entry.fileName, entry.staged, entry.originalFileName));
} }
} }
} }

View File

@@ -1,6 +1,6 @@
'use strict'; 'use strict';
import { QuickPickItem, Uri } from 'vscode'; import { QuickPickItem, Uri } from 'vscode';
import { getGitStatusIcon, Git, GitCommit, GitStatusFileStatus, GitService, GitUri, IGitLogFileStatusEntry } from '../gitService'; import { getGitStatusIcon, Git, GitCommit, GitStatusFileStatus, GitService, GitUri, IGitStatusFile } from '../gitService';
import { OpenFileCommandQuickPickItem } from './quickPicks'; import { OpenFileCommandQuickPickItem } from './quickPicks';
import * as moment from 'moment'; import * as moment from 'moment';
import * as path from 'path'; import * as path from 'path';
@@ -26,7 +26,7 @@ export class CommitWithFileStatusQuickPickItem extends OpenFileCommandQuickPickI
shortSha: string; shortSha: string;
status: GitStatusFileStatus; status: GitStatusFileStatus;
constructor(commit: GitCommit, status: IGitLogFileStatusEntry) { constructor(commit: GitCommit, status: IGitStatusFile) {
const icon = getGitStatusIcon(status.status); const icon = getGitStatusIcon(status.status);
let directory = Git.normalizePath(path.dirname(status.fileName)); let directory = Git.normalizePath(path.dirname(status.fileName));

View File

@@ -9,7 +9,6 @@ import * as path from 'path';
export class OpenStatusFileCommandQuickPickItem extends OpenFileCommandQuickPickItem { export class OpenStatusFileCommandQuickPickItem extends OpenFileCommandQuickPickItem {
constructor(status: GitStatusFile, item?: QuickPickItem) { constructor(status: GitStatusFile, item?: QuickPickItem) {
const uri = Uri.file(path.resolve(status.repoPath, status.fileName));
const icon = status.getIcon(); const icon = status.getIcon();
let directory = Git.normalizePath(path.dirname(status.fileName)); let directory = Git.normalizePath(path.dirname(status.fileName));
@@ -21,7 +20,7 @@ export class OpenStatusFileCommandQuickPickItem extends OpenFileCommandQuickPick
? `${directory || ''} \u00a0\u2190\u00a0 ${status.originalFileName}` ? `${directory || ''} \u00a0\u2190\u00a0 ${status.originalFileName}`
: directory; : directory;
super(uri, item || { super(status.Uri, item || {
label: `${status.staged ? '$(check)' : '\u00a0\u00a0\u00a0'}\u00a0\u00a0${icon}\u00a0\u00a0\u00a0${path.basename(status.fileName)}`, label: `${status.staged ? '$(check)' : '\u00a0\u00a0\u00a0'}\u00a0\u00a0${icon}\u00a0\u00a0\u00a0${path.basename(status.fileName)}`,
description: description description: description
}); });
@@ -31,8 +30,7 @@ export class OpenStatusFileCommandQuickPickItem extends OpenFileCommandQuickPick
export class OpenStatusFilesCommandQuickPickItem extends CommandQuickPickItem { export class OpenStatusFilesCommandQuickPickItem extends CommandQuickPickItem {
constructor(statuses: GitStatusFile[], item?: QuickPickItem) { constructor(statuses: GitStatusFile[], item?: QuickPickItem) {
const repoPath = statuses.length && statuses[0].repoPath; const uris = statuses.map(_ => _.Uri);
const uris = statuses.map(_ => Uri.file(path.resolve(repoPath, _.fileName)));
super(item || { super(item || {
label: `$(file-symlink-file) Open Changed Files`, label: `$(file-symlink-file) Open Changed Files`,