diff --git a/src/commands/diffLineWithPrevious.ts b/src/commands/diffLineWithPrevious.ts index 7290a14..8b15c44 100644 --- a/src/commands/diffLineWithPrevious.ts +++ b/src/commands/diffLineWithPrevious.ts @@ -42,7 +42,7 @@ export default class DiffLineWithPreviousCommand extends EditorCommand { if (commit.isUncommitted) { uri = commit.uri; commit = new GitCommit(commit.repoPath, commit.previousSha, commit.previousFileName, commit.author, commit.date, commit.message); - line = blame.line.line + 1 + gitUri.offset; + line = (blame.line.line + 1) + gitUri.offset; return commands.executeCommand(Commands.DiffWithWorking, uri, commit, line); } } diff --git a/src/commands/diffWithPrevious.ts b/src/commands/diffWithPrevious.ts index d04093c..8eba912 100644 --- a/src/commands/diffWithPrevious.ts +++ b/src/commands/diffWithPrevious.ts @@ -34,6 +34,13 @@ export default class DiffWithPreviousCommand extends EditorCommand { const gitUri = GitUri.fromUri(uri, this.git); try { + if (!gitUri.sha) { + // If the file is uncommitted, treat it as a DiffWithWorking + if (await this.git.isFileUncommitted(gitUri.fsPath, gitUri.repoPath)) { + return commands.executeCommand(Commands.DiffWithWorking, uri); + } + } + const log = await this.git.getLogForFile(gitUri.fsPath, undefined, gitUri.repoPath, rangeOrLine as Range); if (!log) return window.showWarningMessage(`Unable to open diff. File is probably not under source control`); diff --git a/src/git/git.ts b/src/git/git.ts index bedd200..b8ba3dd 100644 --- a/src/git/git.ts +++ b/src/git/git.ts @@ -167,6 +167,13 @@ export default class Git { return gitCommand(root, 'show', `${sha}:./${file}`); } + static statusForFile(fileName: string, repoPath: string): Promise { + const [file, root]: [string, string] = Git.splitPath(Git.normalizePath(fileName), repoPath); + + const params = ['status', file, '--short']; + return gitCommand(root, ...params); + } + static isUncommitted(sha: string) { return UncommittedRegex.test(sha); } diff --git a/src/gitProvider.ts b/src/gitProvider.ts index 4b080d3..ceb5db0 100644 --- a/src/gitProvider.ts +++ b/src/gitProvider.ts @@ -545,6 +545,17 @@ export default class GitProvider extends Disposable { return locations; } + async getStatusForFile(fileName: string, repoPath: string) { + Logger.log(`getStatusForFile('${fileName}', ${repoPath})`); + return (await Git.statusForFile(fileName, repoPath)).trim(); + } + + async isFileUncommitted(fileName: string, repoPath: string) { + Logger.log(`isFileUncommitted('${fileName}', ${repoPath})`); + const status = await this.getStatusForFile(fileName, repoPath); + return status && status.length; + } + async getVersionedFile(fileName: string, repoPath: string, sha: string) { Logger.log(`getVersionedFile('${fileName}', ${repoPath}, ${sha})`);