diff --git a/README.md b/README.md index 36cc487..e28e491 100644 --- a/README.md +++ b/README.md @@ -255,12 +255,6 @@ GitLens provides an unobtrusive blame annotation at the end of the current line, - Adds a `Show Last Opened Quick Pick` command (`gitlens.showLastQuickPick`) with a shortcut of `alt+-` to quickly get back to where you were when the last GitLens quick pick menu closed -- Adds a `Open File History Explorer` command (`gitlens.showFileHistory`) to show a **file history explorer** (peek style) to visualize the history of a file - - Likely to be deprecated in a future release, add your voice to [#66](https://github.com/eamodio/vscode-gitlens/issues/66) if you feel it should not be removed - -- Adds a `Open Blame History Explorer` command (`gitlens.showBlameHistory`) to show a **blame history explorer** (peek style) to visualize the blame history of a file or code block - - Likely to be deprecated in a future release, add your voice to [#66](https://github.com/eamodio/vscode-gitlens/issues/66) if you feel it should not be removed - ### And More - Adds a `Copy Commit ID to Clipboard` command (`gitlens.copyShaToClipboard`) to copy the commit id (sha) of the active line to the clipboard or from the most recent commit to the current branch, if there is no active editor @@ -343,9 +337,9 @@ GitLens is highly customizable and provides many configuration settings to allow |-----|------------ |`gitlens.codeLens.enabled`|Specifies whether or not to provide any Git code lens, by default
Use the `gitlens.toggleCodeLens` command to toggle the Git code lens on and off for the current session |`gitlens.codeLens.recentChange.enabled`|Specifies whether or not to show a `recent change` code lens showing the author and date of the most recent commit for the file or code block -|`gitlens.codeLens.recentChange.command`|Specifies the command to be executed when the `recent change` code lens is clicked
`gitlens.toggleFileBlame` - toggles file blame annotations
`gitlens.showBlameHistory` - opens the blame history explorer
`gitlens.showFileHistory` - opens the file history explorer
`gitlens.diffWithPrevious` - compares the current committed file with the previous commit
`gitlens.showQuickCommitDetails` - shows a commit details quick pick
`gitlens.showQuickCommitFileDetails` - shows a commit file details quick pick
`gitlens.showQuickFileHistory` - shows a file history quick pick
`gitlens.showQuickRepoHistory` - shows a branch history quick pick +|`gitlens.codeLens.recentChange.command`|Specifies the command to be executed when the `recent change` code lens is clicked
`gitlens.toggleFileBlame` - toggles file blame annotations
`gitlens.diffWithPrevious` - compares the current committed file with the previous commit
`gitlens.showQuickCommitDetails` - shows a commit details quick pick
`gitlens.showQuickCommitFileDetails` - shows a commit file details quick pick
`gitlens.showQuickFileHistory` - shows a file history quick pick
`gitlens.showQuickRepoHistory` - shows a branch history quick pick |`gitlens.codeLens.authors.enabled`|Specifies whether or not to show an `authors` code lens showing number of authors of the file or code block and the most prominent author (if there is more than one) -|`gitlens.codeLens.authors.command`|Specifies the command to be executed when the `authors` code lens is clicked
`gitlens.toggleFileBlame` - toggles file blame annotations
`gitlens.showBlameHistory` - opens the blame history explorer
`gitlens.showFileHistory` - opens the file history explorer
`gitlens.diffWithPrevious` - compares the current committed file with the previous commit
`gitlens.showQuickCommitDetails` - shows a commit details quick pick
`gitlens.showQuickCommitFileDetails` - shows a commit file details quick pick
`gitlens.showQuickFileHistory` - shows a file history quick pick
`gitlens.showQuickRepoHistory` - shows a branch history quick pick +|`gitlens.codeLens.authors.command`|Specifies the command to be executed when the `authors` code lens is clicked
`gitlens.toggleFileBlame` - toggles file blame annotations
`gitlens.diffWithPrevious` - compares the current committed file with the previous commit
`gitlens.showQuickCommitDetails` - shows a commit details quick pick
`gitlens.showQuickCommitFileDetails` - shows a commit file details quick pick
`gitlens.showQuickFileHistory` - shows a file history quick pick
`gitlens.showQuickRepoHistory` - shows a branch history quick pick |`gitlens.codeLens.locations`|Specifies where Git code lens will be shown in the document
`document` - adds code lens at the top of the document
`containers` - adds code lens at the start of container-like symbols (modules, classes, interfaces, etc)
`blocks` - adds code lens at the start of block-like symbols (functions, methods, properties, etc) lines
`custom` - adds code lens at the start of symbols contained in `gitlens.codeLens.locationCustomSymbols` |`gitlens.codeLens.customLocationSymbols`|Specifies the set of document symbols where Git code lens will be shown in the document |`gitlens.codeLens.perLanguageLocations`|Specifies where Git code lens will be shown in the document for the specified languages @@ -379,7 +373,7 @@ GitLens is highly customizable and provides many configuration settings to allow |-----|------------ |`gitlens.statusBar.enabled`|Specifies whether or not to provide blame information on the status bar |`gitlens.statusBar.alignment`|Specifies the blame alignment in the status bar
`left` - align to the left, `right` - align to the right -|`gitlens.statusBar.command`|Specifies the command to be executed when the blame status bar item is clicked
`gitlens.toggleFileBlame` - toggles file blame annotations
`gitlens.showBlameHistory` - opens the blame history explorer
`gitlens.showFileHistory` - opens the file history explorer
`gitlens.diffWithPrevious` - compares the current line commit with the previous
`gitlens.diffWithWorking` - compares the current line commit with the working tree
`gitlens.toggleCodeLens` - toggles Git code lens
`gitlens.showQuickCommitDetails` - shows a commit details quick pick
`gitlens.showQuickCommitFileDetails` - shows a commit file details quick pick
`gitlens.showQuickFileHistory` - shows a file history quick pick
`gitlens.showQuickRepoHistory` - shows a branch history quick pick +|`gitlens.statusBar.command`|Specifies the command to be executed when the blame status bar item is clicked
`gitlens.toggleFileBlame` - toggles file blame annotations
`gitlens.diffWithPrevious` - compares the current line commit with the previous
`gitlens.diffWithWorking` - compares the current line commit with the working tree
`gitlens.toggleCodeLens` - toggles Git code lens
`gitlens.showQuickCommitDetails` - shows a commit details quick pick
`gitlens.showQuickCommitFileDetails` - shows a commit file details quick pick
`gitlens.showQuickFileHistory` - shows a file history quick pick
`gitlens.showQuickRepoHistory` - shows a branch history quick pick |`gitlens.statusBar.format`|Specifies the format of the blame information on the status bar
Available tokens
`${id}` - commit id
`${author}` - commit author
`${message}` - commit message
`${ago}` - relative commit date (e.g. 1 day ago)
`${date}` - formatted commit date (format specified by `gitlens.statusBar.dateFormat`)
See https://github.com/eamodio/vscode-gitlens/wiki/Advanced-Formatting for advanced formatting |`gitlens.statusBar.dateFormat`|Specifies the date format of absolute dates shown in the blame information on the status bar
See https://momentjs.com/docs/#/displaying/format/ for valid formats diff --git a/package.json b/package.json index 711bed9..1850b55 100644 --- a/package.json +++ b/package.json @@ -255,15 +255,13 @@ "default": "gitlens.showQuickCommitFileDetails", "enum": [ "gitlens.toggleFileBlame", - "gitlens.showBlameHistory", - "gitlens.showFileHistory", "gitlens.diffWithPrevious", "gitlens.showQuickCommitDetails", "gitlens.showQuickCommitFileDetails", "gitlens.showQuickFileHistory", "gitlens.showQuickRepoHistory" ], - "description": "Specifies the command to be executed when the `recent change` code lens is clicked\n `gitlens.toggleFileBlame` - toggles file blame annotations\n `gitlens.showBlameHistory` - opens the blame history explorer\n `gitlens.showFileHistory` - opens the file history explorer\n `gitlens.diffWithPrevious` - compares the current committed file with the previous commit\n `gitlens.showQuickCommitDetails` - shows a commit details quick pick\n `gitlens.showQuickCommitFileDetails` - shows a commit file details quick pick\n `gitlens.showQuickFileHistory` - shows a file history quick pick\n `gitlens.showQuickRepoHistory` - shows a branch history quick pick" + "description": "Specifies the command to be executed when the `recent change` code lens is clicked\n `gitlens.toggleFileBlame` - toggles file blame annotations\n `gitlens.diffWithPrevious` - compares the current committed file with the previous commit\n `gitlens.showQuickCommitDetails` - shows a commit details quick pick\n `gitlens.showQuickCommitFileDetails` - shows a commit file details quick pick\n `gitlens.showQuickFileHistory` - shows a file history quick pick\n `gitlens.showQuickRepoHistory` - shows a branch history quick pick" }, "gitlens.codeLens.authors.enabled": { "type": "boolean", @@ -275,15 +273,13 @@ "default": "gitlens.toggleFileBlame", "enum": [ "gitlens.toggleFileBlame", - "gitlens.showBlameHistory", - "gitlens.showFileHistory", "gitlens.diffWithPrevious", "gitlens.showQuickCommitDetails", "gitlens.showQuickCommitFileDetails", "gitlens.showQuickFileHistory", "gitlens.showQuickRepoHistory" ], - "description": "Specifies the command to be executed when the `authors` code lens is clicked\n `gitlens.toggleFileBlame` - toggles file blame annotations\n `gitlens.showBlameHistory` - opens the blame history explorer\n `gitlens.showFileHistory` - opens the file history explorer\n `gitlens.diffWithPrevious` - compares the current committed file with the previous commit\n `gitlens.showQuickCommitDetails` - shows a commit details quick pick\n `gitlens.showQuickCommitFileDetails` - shows a commit file details quick pick\n `gitlens.showQuickFileHistory` - shows a file history quick pick\n `gitlens.showQuickRepoHistory` - shows a branch history quick pick" + "description": "Specifies the command to be executed when the `authors` code lens is clicked\n `gitlens.toggleFileBlame` - toggles file blame annotations\n `gitlens.diffWithPrevious` - compares the current committed file with the previous commit\n `gitlens.showQuickCommitDetails` - shows a commit details quick pick\n `gitlens.showQuickCommitFileDetails` - shows a commit file details quick pick\n `gitlens.showQuickFileHistory` - shows a file history quick pick\n `gitlens.showQuickRepoHistory` - shows a branch history quick pick" }, "gitlens.codeLens.locations": { "type": "array", @@ -589,8 +585,6 @@ "default": "gitlens.showQuickCommitDetails", "enum": [ "gitlens.toggleFileBlame", - "gitlens.showBlameHistory", - "gitlens.showFileHistory", "gitlens.diffWithPrevious", "gitlens.diffWithWorking", "gitlens.toggleCodeLens", @@ -599,7 +593,7 @@ "gitlens.showQuickFileHistory", "gitlens.showQuickRepoHistory" ], - "description": "Specifies the command to be executed when the blame status bar item is clicked\n `gitlens.toggleFileBlame` - toggles file blame annotations\n `gitlens.showBlameHistory` - opens the blame history explorer\n `gitlens.showFileHistory` - opens the file history explorer\n `gitlens.diffWithPrevious` - compares the current line commit with the previous\n `gitlens.diffWithWorking` - compares the current line commit with the working tree\n `gitlens.toggleCodeLens` - toggles Git code lens\n `gitlens.showQuickCommitDetails` - shows a commit details quick pick\n `gitlens.showQuickCommitFileDetails` - shows a commit file details quick pick\n `gitlens.showQuickFileHistory` - shows a file history quick pick\n `gitlens.showQuickRepoHistory` - shows a branch history quick pick" + "description": "Specifies the command to be executed when the blame status bar item is clicked\n `gitlens.toggleFileBlame` - toggles file blame annotations\n `gitlens.diffWithPrevious` - compares the current line commit with the previous\n `gitlens.diffWithWorking` - compares the current line commit with the working tree\n `gitlens.toggleCodeLens` - toggles Git code lens\n `gitlens.showQuickCommitDetails` - shows a commit details quick pick\n `gitlens.showQuickCommitFileDetails` - shows a commit file details quick pick\n `gitlens.showQuickFileHistory` - shows a file history quick pick\n `gitlens.showQuickRepoHistory` - shows a branch history quick pick" }, "gitlens.statusBar.format": { "type": "string", @@ -1004,11 +998,6 @@ "category": "GitLens" }, { - "command": "gitlens.showBlameHistory", - "title": "Open Blame History Explorer", - "category": "GitLens" - }, - { "command": "gitlens.showCommitSearch", "title": "Search Commits", "category": "GitLens", @@ -1018,11 +1007,6 @@ } }, { - "command": "gitlens.showFileHistory", - "title": "Open File History Explorer", - "category": "GitLens" - }, - { "command": "gitlens.showLastQuickPick", "title": "Show Last Opened Quick Pick", "category": "GitLens" @@ -1285,14 +1269,6 @@ "when": "gitlens:isTracked && gitlens:canToggleCodeLens" }, { - "command": "gitlens.showBlameHistory", - "when": "gitlens:isBlameable" - }, - { - "command": "gitlens.showFileHistory", - "when": "gitlens:isTracked" - }, - { "command": "gitlens.showLastQuickPick", "when": "gitlens:enabled" }, diff --git a/src/annotations/annotationController.ts b/src/annotations/annotationController.ts index 4050f87..88d8bb6 100644 --- a/src/annotations/annotationController.ts +++ b/src/annotations/annotationController.ts @@ -14,12 +14,11 @@ import { RecentChangesAnnotationProvider } from './recentChangesAnnotationProvid import { WhitespaceController } from './whitespaceController'; import * as path from 'path'; -export type FileAnnotationType = 'gutter' | 'hover' | 'recentChanges'; -export const FileAnnotationType = { - Gutter: 'gutter' as FileAnnotationType, - Hover: 'hover' as FileAnnotationType, - RecentChanges: 'recentChanges' as FileAnnotationType -}; +export enum FileAnnotationType { + Gutter = 'gutter', + Hover = 'hover', + RecentChanges = 'recentChanges' +} export const Decorations = { blameAnnotation: window.createTextEditorDecorationType({ diff --git a/src/annotations/annotations.ts b/src/annotations/annotations.ts index 2a385e3..51a5121 100644 --- a/src/annotations/annotations.ts +++ b/src/annotations/annotations.ts @@ -121,7 +121,7 @@ export class Annotations { } static async changesHover(commit: GitCommit, line: number, uri: GitUri, git: GitService): Promise { - const chunkLine = await git.getDiffForLine(uri, line + uri.offset, commit.isUncommitted ? undefined : commit.previousSha); + const chunkLine = await git.getDiffForLine(uri, line, commit.isUncommitted ? undefined : commit.previousSha); const message = this.getHoverDiffMessage(commit, chunkLine); return { diff --git a/src/annotations/blameAnnotationProvider.ts b/src/annotations/blameAnnotationProvider.ts index e084eb4..0f6aff3 100644 --- a/src/annotations/blameAnnotationProvider.ts +++ b/src/annotations/blameAnnotationProvider.ts @@ -30,16 +30,13 @@ export abstract class BlameAnnotationProviderBase extends AnnotationProviderBase if (!blame || !blame.lines.length) return; } - const offset = this.uri.offset; - let sha: string | undefined = undefined; if (typeof shaOrLine === 'string') { sha = shaOrLine; } else if (typeof shaOrLine === 'number') { - const line = shaOrLine - offset; - if (line >= 0) { - const commitLine = blame.lines[line]; + if (shaOrLine >= 0) { + const commitLine = blame.lines[shaOrLine]; sha = commitLine && commitLine.sha; } } @@ -54,7 +51,7 @@ export abstract class BlameAnnotationProviderBase extends AnnotationProviderBase const highlightDecorationRanges = blame.lines .filter(l => l.sha === sha) - .map(l => this.editor.document.validateRange(new Range(l.line + offset, 0, l.line + offset, 1000000))); + .map(l => this.editor.document.validateRange(new Range(l.line, 0, l.line, 1000000))); this.editor.setDecorations(this.highlightDecoration, highlightDecorationRanges); } @@ -101,7 +98,7 @@ export abstract class BlameAnnotationProviderBase extends AnnotationProviderBase const blame = await this.getBlame(true); if (blame === undefined) return undefined; - const line = blame.lines[position.line - this.uri.offset]; + const line = blame.lines[position.line]; const commit = blame.commits.get(line.sha); if (commit === undefined) return undefined; diff --git a/src/annotations/gutterBlameAnnotationProvider.ts b/src/annotations/gutterBlameAnnotationProvider.ts index dfd2b4a..c20c736 100644 --- a/src/annotations/gutterBlameAnnotationProvider.ts +++ b/src/annotations/gutterBlameAnnotationProvider.ts @@ -33,7 +33,6 @@ export class GutterBlameAnnotationProvider extends BlameAnnotationProviderBase { }; const now = Date.now(); - const offset = this.uri.offset; const renderOptions = Annotations.gutterRenderOptions(this._config.theme, cfg.heatmap, options); const separateLines = this._config.theme.annotations.file.gutter.separateLines; @@ -46,7 +45,7 @@ export class GutterBlameAnnotationProvider extends BlameAnnotationProviderBase { let previousSha: string | undefined; for (const l of blame.lines) { - const line = l.line + offset; + const line = l.line; if (previousSha === l.sha) { // Use a shallow copy of the previous decoration options diff --git a/src/annotations/hoverBlameAnnotationProvider.ts b/src/annotations/hoverBlameAnnotationProvider.ts index 0714c77..fac037a 100644 --- a/src/annotations/hoverBlameAnnotationProvider.ts +++ b/src/annotations/hoverBlameAnnotationProvider.ts @@ -20,7 +20,6 @@ export class HoverBlameAnnotationProvider extends BlameAnnotationProviderBase { const start = process.hrtime(); const now = Date.now(); - const offset = this.uri.offset; const renderOptions = Annotations.hoverRenderOptions(this._config.theme, cfg.heatmap); const decorations: DecorationOptions[] = []; @@ -30,7 +29,7 @@ export class HoverBlameAnnotationProvider extends BlameAnnotationProviderBase { let hover: DecorationOptions | undefined; for (const l of blame.lines) { - const line = l.line + offset; + const line = l.line; hover = decorationsMap[l.sha]; diff --git a/src/commands.ts b/src/commands.ts index a311184..433c243 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -1,4 +1,10 @@ 'use strict'; +import { ExtensionContext } from 'vscode'; +import { AnnotationController } from './annotations/annotationController'; +import { CurrentLineController } from './currentLineController'; +import { CodeLensController } from './codeLensController'; +import { GitService } from './gitService'; + export * from './commands/common'; export * from './commands/clearFileAnnotations'; @@ -24,10 +30,8 @@ export * from './commands/openFileRevision'; export * from './commands/openInRemote'; export * from './commands/openRepoInRemote'; export * from './commands/resetSuppressedWarnings'; -export * from './commands/showBlameHistory'; export * from './commands/showCommitSearch'; export * from './commands/showFileBlame'; -export * from './commands/showFileHistory'; export * from './commands/showLastQuickPick'; export * from './commands/showLineBlame'; export * from './commands/showQuickBranchHistory'; @@ -43,4 +47,56 @@ export * from './commands/stashSave'; export * from './commands/toggleCodeLens'; export * from './commands/toggleFileBlame'; export * from './commands/toggleFileRecentChanges'; -export * from './commands/toggleLineBlame'; \ No newline at end of file +export * from './commands/toggleLineBlame'; + +import * as Commands from './commands'; + +export function configureCommands( + context: ExtensionContext, + git: GitService, + annotationController: AnnotationController, + currentLineController: CurrentLineController, + codeLensController: CodeLensController +): void { + context.subscriptions.push(new Commands.CloseUnchangedFilesCommand(git)); + context.subscriptions.push(new Commands.OpenChangedFilesCommand(git)); + context.subscriptions.push(new Commands.ExternalDiffCommand(git)); + context.subscriptions.push(new Commands.CopyMessageToClipboardCommand(git)); + context.subscriptions.push(new Commands.CopyShaToClipboardCommand(git)); + context.subscriptions.push(new Commands.DiffDirectoryCommand(git)); + context.subscriptions.push(new Commands.DiffLineWithPreviousCommand(git)); + context.subscriptions.push(new Commands.DiffLineWithWorkingCommand(git)); + context.subscriptions.push(new Commands.DiffWithCommand(git)); + context.subscriptions.push(new Commands.DiffWithBranchCommand(git)); + context.subscriptions.push(new Commands.DiffWithNextCommand(git)); + context.subscriptions.push(new Commands.DiffWithPreviousCommand(git)); + context.subscriptions.push(new Commands.DiffWithRevisionCommand(git)); + context.subscriptions.push(new Commands.DiffWithWorkingCommand(git)); + context.subscriptions.push(new Commands.OpenBranchesInRemoteCommand(git)); + context.subscriptions.push(new Commands.OpenBranchInRemoteCommand(git)); + context.subscriptions.push(new Commands.OpenCommitInRemoteCommand(git)); + context.subscriptions.push(new Commands.OpenFileInRemoteCommand(git)); + context.subscriptions.push(new Commands.OpenFileRevisionCommand(annotationController)); + context.subscriptions.push(new Commands.OpenInRemoteCommand()); + context.subscriptions.push(new Commands.OpenRepoInRemoteCommand(git)); + context.subscriptions.push(new Commands.ClearFileAnnotationsCommand(annotationController)); + context.subscriptions.push(new Commands.ShowFileBlameCommand(annotationController)); + context.subscriptions.push(new Commands.ShowLineBlameCommand(currentLineController)); + context.subscriptions.push(new Commands.ToggleFileBlameCommand(annotationController)); + context.subscriptions.push(new Commands.ToggleFileRecentChangesCommand(annotationController)); + context.subscriptions.push(new Commands.ToggleLineBlameCommand(currentLineController)); + context.subscriptions.push(new Commands.ResetSuppressedWarningsCommand(context)); + context.subscriptions.push(new Commands.ShowLastQuickPickCommand()); + context.subscriptions.push(new Commands.ShowQuickBranchHistoryCommand(git)); + context.subscriptions.push(new Commands.ShowQuickCurrentBranchHistoryCommand(git)); + context.subscriptions.push(new Commands.ShowQuickCommitDetailsCommand(git)); + context.subscriptions.push(new Commands.ShowQuickCommitFileDetailsCommand(git)); + context.subscriptions.push(new Commands.ShowCommitSearchCommand(git)); + context.subscriptions.push(new Commands.ShowQuickFileHistoryCommand(git)); + context.subscriptions.push(new Commands.ShowQuickRepoStatusCommand(git)); + context.subscriptions.push(new Commands.ShowQuickStashListCommand(git)); + context.subscriptions.push(new Commands.StashApplyCommand(git)); + context.subscriptions.push(new Commands.StashDeleteCommand(git)); + context.subscriptions.push(new Commands.StashSaveCommand(git)); + context.subscriptions.push(new Commands.ToggleCodeLensCommand(codeLensController)); +} \ No newline at end of file diff --git a/src/commands/common.ts b/src/commands/common.ts index e7e1f70..417dc34 100644 --- a/src/commands/common.ts +++ b/src/commands/common.ts @@ -5,95 +5,49 @@ import { GitBranch, GitCommit, GitRemote } from '../gitService'; import { Logger } from '../logger'; import { Telemetry } from '../telemetry'; -export type Commands = - 'gitlens.clearFileAnnotations' | - 'gitlens.closeUnchangedFiles' | - 'gitlens.copyMessageToClipboard' | - 'gitlens.copyShaToClipboard' | - 'gitlens.diffDirectory' | - 'gitlens.diffWith' | - 'gitlens.diffWithBranch' | - 'gitlens.diffWithNext' | - 'gitlens.diffWithPrevious' | - 'gitlens.diffLineWithPrevious' | - 'gitlens.diffWithRevision' | - 'gitlens.diffWithWorking' | - 'gitlens.diffLineWithWorking' | - 'gitlens.externalDiff' | - 'gitlens.openChangedFiles' | - 'gitlens.openBranchesInRemote' | - 'gitlens.openBranchInRemote' | - 'gitlens.openCommitInRemote' | - 'gitlens.openFileInRemote' | - 'gitlens.openFileRevision' | - 'gitlens.openInRemote' | - 'gitlens.openRepoInRemote' | - 'gitlens.resetSuppressedWarnings' | - 'gitlens.showBlameHistory' | - 'gitlens.showCommitSearch' | - 'gitlens.showFileBlame' | - 'gitlens.showFileHistory' | - 'gitlens.showLastQuickPick' | - 'gitlens.showLineBlame' | - 'gitlens.showQuickBranchHistory' | - 'gitlens.showQuickCommitDetails' | - 'gitlens.showQuickCommitFileDetails' | - 'gitlens.showQuickFileHistory' | - 'gitlens.showQuickRepoHistory' | - 'gitlens.showQuickRepoStatus' | - 'gitlens.showQuickStashList' | - 'gitlens.stashApply' | - 'gitlens.stashDelete' | - 'gitlens.stashSave' | - 'gitlens.toggleCodeLens' | - 'gitlens.toggleFileBlame' | - 'gitlens.toggleFileRecentChanges' | - 'gitlens.toggleLineBlame'; -export const Commands = { - ClearFileAnnotations: 'gitlens.clearFileAnnotations' as Commands, - CloseUnchangedFiles: 'gitlens.closeUnchangedFiles' as Commands, - CopyMessageToClipboard: 'gitlens.copyMessageToClipboard' as Commands, - CopyShaToClipboard: 'gitlens.copyShaToClipboard' as Commands, - DiffDirectory: 'gitlens.diffDirectory' as Commands, - DiffWith: 'gitlens.diffWith' as Commands, - DiffWithBranch: 'gitlens.diffWithBranch' as Commands, - DiffWithNext: 'gitlens.diffWithNext' as Commands, - DiffWithPrevious: 'gitlens.diffWithPrevious' as Commands, - DiffLineWithPrevious: 'gitlens.diffLineWithPrevious' as Commands, - DiffWithRevision: 'gitlens.diffWithRevision' as Commands, - DiffWithWorking: 'gitlens.diffWithWorking' as Commands, - DiffLineWithWorking: 'gitlens.diffLineWithWorking' as Commands, - ExternalDiff: 'gitlens.externalDiff' as Commands, - OpenChangedFiles: 'gitlens.openChangedFiles' as Commands, - OpenBranchesInRemote: 'gitlens.openBranchesInRemote' as Commands, - OpenBranchInRemote: 'gitlens.openBranchInRemote' as Commands, - OpenCommitInRemote: 'gitlens.openCommitInRemote' as Commands, - OpenFileInRemote: 'gitlens.openFileInRemote' as Commands, - OpenFileRevision: 'gitlens.openFileRevision' as Commands, - OpenInRemote: 'gitlens.openInRemote' as Commands, - OpenRepoInRemote: 'gitlens.openRepoInRemote' as Commands, - ResetSuppressedWarnings: 'gitlens.resetSuppressedWarnings' as Commands, - ShowBlameHistory: 'gitlens.showBlameHistory' as Commands, - ShowCommitSearch: 'gitlens.showCommitSearch' as Commands, - ShowFileBlame: 'gitlens.showFileBlame' as Commands, - ShowFileHistory: 'gitlens.showFileHistory' as Commands, - ShowLastQuickPick: 'gitlens.showLastQuickPick' as Commands, - ShowLineBlame: 'gitlens.showLineBlame' as Commands, - ShowQuickCommitDetails: 'gitlens.showQuickCommitDetails' as Commands, - ShowQuickCommitFileDetails: 'gitlens.showQuickCommitFileDetails' as Commands, - ShowQuickFileHistory: 'gitlens.showQuickFileHistory' as Commands, - ShowQuickBranchHistory: 'gitlens.showQuickBranchHistory' as Commands, - ShowQuickCurrentBranchHistory: 'gitlens.showQuickRepoHistory' as Commands, - ShowQuickRepoStatus: 'gitlens.showQuickRepoStatus' as Commands, - ShowQuickStashList: 'gitlens.showQuickStashList' as Commands, - StashApply: 'gitlens.stashApply' as Commands, - StashDelete: 'gitlens.stashDelete' as Commands, - StashSave: 'gitlens.stashSave' as Commands, - ToggleCodeLens: 'gitlens.toggleCodeLens' as Commands, - ToggleFileBlame: 'gitlens.toggleFileBlame' as Commands, - ToggleFileRecentChanges: 'gitlens.toggleFileRecentChanges' as Commands, - ToggleLineBlame: 'gitlens.toggleLineBlame' as Commands -}; +export enum Commands { + ClearFileAnnotations = 'gitlens.clearFileAnnotations', + CloseUnchangedFiles = 'gitlens.closeUnchangedFiles', + CopyMessageToClipboard = 'gitlens.copyMessageToClipboard', + CopyShaToClipboard = 'gitlens.copyShaToClipboard', + DiffDirectory = 'gitlens.diffDirectory', + DiffWith = 'gitlens.diffWith', + DiffWithBranch = 'gitlens.diffWithBranch', + DiffWithNext = 'gitlens.diffWithNext', + DiffWithPrevious = 'gitlens.diffWithPrevious', + DiffLineWithPrevious = 'gitlens.diffLineWithPrevious', + DiffWithRevision = 'gitlens.diffWithRevision', + DiffWithWorking = 'gitlens.diffWithWorking', + DiffLineWithWorking = 'gitlens.diffLineWithWorking', + ExternalDiff = 'gitlens.externalDiff', + OpenChangedFiles = 'gitlens.openChangedFiles', + OpenBranchesInRemote = 'gitlens.openBranchesInRemote', + OpenBranchInRemote = 'gitlens.openBranchInRemote', + OpenCommitInRemote = 'gitlens.openCommitInRemote', + OpenFileInRemote = 'gitlens.openFileInRemote', + OpenFileRevision = 'gitlens.openFileRevision', + OpenInRemote = 'gitlens.openInRemote', + OpenRepoInRemote = 'gitlens.openRepoInRemote', + ResetSuppressedWarnings = 'gitlens.resetSuppressedWarnings', + ShowCommitSearch = 'gitlens.showCommitSearch', + ShowFileBlame = 'gitlens.showFileBlame', + ShowLastQuickPick = 'gitlens.showLastQuickPick', + ShowLineBlame = 'gitlens.showLineBlame', + ShowQuickCommitDetails = 'gitlens.showQuickCommitDetails', + ShowQuickCommitFileDetails = 'gitlens.showQuickCommitFileDetails', + ShowQuickFileHistory = 'gitlens.showQuickFileHistory', + ShowQuickBranchHistory = 'gitlens.showQuickBranchHistory', + ShowQuickCurrentBranchHistory = 'gitlens.showQuickRepoHistory', + ShowQuickRepoStatus = 'gitlens.showQuickRepoStatus', + ShowQuickStashList = 'gitlens.showQuickStashList', + StashApply = 'gitlens.stashApply', + StashDelete = 'gitlens.stashDelete', + StashSave = 'gitlens.stashSave', + ToggleCodeLens = 'gitlens.toggleCodeLens', + ToggleFileBlame = 'gitlens.toggleFileBlame', + ToggleFileRecentChanges = 'gitlens.toggleFileRecentChanges', + ToggleLineBlame = 'gitlens.toggleLineBlame' +} export function getCommandUri(uri?: Uri, editor?: TextEditor): Uri | undefined { if (uri instanceof Uri) return uri; diff --git a/src/commands/copyMessageToClipboard.ts b/src/commands/copyMessageToClipboard.ts index e18e734..9e5796b 100644 --- a/src/commands/copyMessageToClipboard.ts +++ b/src/commands/copyMessageToClipboard.ts @@ -51,8 +51,7 @@ export class CopyMessageToClipboardCommand extends ActiveEditorCommand { if (args.sha === undefined) { if (editor !== undefined && editor.document !== undefined && editor.document.isDirty) return undefined; - const line = (editor && editor.selection.active.line) || gitUri.offset; - const blameline = line - gitUri.offset; + const blameline = (editor && editor.selection.active.line) || 0; if (blameline < 0) return undefined; try { diff --git a/src/commands/copyShaToClipboard.ts b/src/commands/copyShaToClipboard.ts index d226ff5..45d5a4a 100644 --- a/src/commands/copyShaToClipboard.ts +++ b/src/commands/copyShaToClipboard.ts @@ -49,8 +49,7 @@ export class CopyShaToClipboardCommand extends ActiveEditorCommand { if (args.sha === undefined) { if (editor !== undefined && editor.document !== undefined && editor.document.isDirty) return undefined; - const line = (editor && editor.selection.active.line) || gitUri.offset; - const blameline = line - gitUri.offset; + const blameline = (editor && editor.selection.active.line) || 0; if (blameline < 0) return undefined; try { diff --git a/src/commands/diffLineWithPrevious.ts b/src/commands/diffLineWithPrevious.ts index 45212ff..7ecbf26 100644 --- a/src/commands/diffLineWithPrevious.ts +++ b/src/commands/diffLineWithPrevious.ts @@ -27,13 +27,13 @@ export class DiffLineWithPreviousCommand extends ActiveEditorCommand { args = { ...args }; if (args.line === undefined) { - args.line = editor === undefined ? gitUri.offset : editor.selection.active.line; + args.line = editor === undefined ? 0 : editor.selection.active.line; } if (args.commit === undefined || GitService.isUncommitted(args.commit.sha)) { if (editor !== undefined && editor.document !== undefined && editor.document.isDirty) return undefined; - const blameline = args.line - gitUri.offset; + const blameline = args.line; if (blameline < 0) return undefined; try { diff --git a/src/commands/diffLineWithWorking.ts b/src/commands/diffLineWithWorking.ts index bbb0310..1df8f89 100644 --- a/src/commands/diffLineWithWorking.ts +++ b/src/commands/diffLineWithWorking.ts @@ -27,13 +27,13 @@ export class DiffLineWithWorkingCommand extends ActiveEditorCommand { args = { ...args }; if (args.line === undefined) { - args.line = editor === undefined ? gitUri.offset : editor.selection.active.line; + args.line = editor === undefined ? 0 : editor.selection.active.line; } if (args.commit === undefined || GitService.isUncommitted(args.commit.sha)) { if (editor !== undefined && editor.document !== undefined && editor.document.isDirty) return undefined; - const blameline = args.line - gitUri.offset; + const blameline = args.line; if (blameline < 0) return undefined; try { @@ -44,7 +44,7 @@ export class DiffLineWithWorkingCommand extends ActiveEditorCommand { // If the line is uncommitted, find the previous commit if (args.commit.isUncommitted) { args.commit = new GitCommit(args.commit.type, args.commit.repoPath, args.commit.previousSha!, args.commit.previousFileName!, args.commit.author, args.commit.date, args.commit.message); - args.line = blame.line.line + 1 + gitUri.offset; + args.line = blame.line.line + 1; } } catch (ex) { diff --git a/src/commands/openCommitInRemote.ts b/src/commands/openCommitInRemote.ts index 38f8d7d..8b13ad6 100644 --- a/src/commands/openCommitInRemote.ts +++ b/src/commands/openCommitInRemote.ts @@ -45,8 +45,7 @@ export class OpenCommitInRemoteCommand extends ActiveEditorCommand { try { if (args.sha === undefined) { - const line = editor === undefined ? gitUri.offset : editor.selection.active.line; - const blameline = line - gitUri.offset; + const blameline = editor === undefined ? 0 : editor.selection.active.line; if (blameline < 0) return undefined; const blame = await this.git.getBlameForLine(gitUri, blameline); diff --git a/src/commands/openInRemote.ts b/src/commands/openInRemote.ts index d99ffc0..ae226c5 100644 --- a/src/commands/openInRemote.ts +++ b/src/commands/openInRemote.ts @@ -3,7 +3,7 @@ import { Strings } from '../system'; import { TextEditor, Uri, window } from 'vscode'; import { ActiveEditorCommand, Commands, getCommandUri } from './common'; import { GlyphChars } from '../constants'; -import { GitLogCommit, GitRemote, GitService, RemoteResource } from '../gitService'; +import { GitLogCommit, GitRemote, GitService, RemoteResource, RemoteResourceType } from '../gitService'; import { Logger } from '../logger'; import { CommandQuickPickItem, OpenRemoteCommandQuickPickItem, RemotesQuickPick } from '../quickPicks'; @@ -44,21 +44,21 @@ export class OpenInRemoteCommand extends ActiveEditorCommand { let placeHolder = ''; switch (args.resource.type) { - case 'branch': + case RemoteResourceType.Branch: this.ensureRemoteBranchName(args); placeHolder = `open ${args.resource.branch} branch in${GlyphChars.Ellipsis}`; break; - case 'commit': + case RemoteResourceType.Commit: const shortSha = GitService.shortenSha(args.resource.sha); placeHolder = `open commit ${shortSha} in${GlyphChars.Ellipsis}`; break; - case 'file': + case RemoteResourceType.File: placeHolder = `open ${args.resource.fileName} in${GlyphChars.Ellipsis}`; break; - case 'revision': + case RemoteResourceType.Revision: if (args.resource.commit !== undefined && args.resource.commit instanceof GitLogCommit) { if (args.resource.commit.status === 'D') { args.resource.sha = args.resource.commit.previousSha; diff --git a/src/commands/showBlameHistory.ts b/src/commands/showBlameHistory.ts deleted file mode 100644 index 686d344..0000000 --- a/src/commands/showBlameHistory.ts +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; -import { commands, Position, Range, TextEditor, TextEditorEdit, Uri, window } from 'vscode'; -import { Commands, EditorCommand, getCommandUri } from './common'; -import { BuiltInCommands } from '../constants'; -import { GitService, GitUri } from '../gitService'; -import { Messages } from '../messages'; -import { Logger } from '../logger'; - -export interface ShowBlameHistoryCommandArgs { - line?: number; - position?: Position; - range?: Range; - sha?: string; -} - -export class ShowBlameHistoryCommand extends EditorCommand { - - constructor(private git: GitService) { - super(Commands.ShowBlameHistory); - } - - async execute(editor: TextEditor, edit: TextEditorEdit, uri?: Uri, args: ShowBlameHistoryCommandArgs = {}) { - uri = getCommandUri(uri, editor); - if (uri === undefined) return undefined; - - if (args.range == null || args.position == null) { - args = { ...args }; - - // If the command is executed manually -- treat it as a click on the root lens (i.e. show blame for the whole file) - args.range = editor.document.validateRange(new Range(0, 0, 1000000, 1000000)); - args.position = editor.document.validateRange(new Range(0, 0, 0, 1000000)).start; - } - - const gitUri = await GitUri.fromUri(uri, this.git); - - try { - const locations = await this.git.getBlameLocations(gitUri, args.range, args.sha, args.line); - if (locations === undefined) return Messages.showFileNotUnderSourceControlWarningMessage('Unable to show blame history'); - - return commands.executeCommand(BuiltInCommands.ShowReferences, uri, args.position, locations); - } - catch (ex) { - Logger.error(ex, 'ShowBlameHistoryCommand', 'getBlameLocations'); - return window.showErrorMessage(`Unable to show blame history. See output channel for more details`); - } - } -} \ No newline at end of file diff --git a/src/commands/showCommitSearch.ts b/src/commands/showCommitSearch.ts index 68f6f6a..8aa0c63 100644 --- a/src/commands/showCommitSearch.ts +++ b/src/commands/showCommitSearch.ts @@ -42,8 +42,7 @@ export class ShowCommitSearchCommand extends ActiveEditorCachedCommand { try { if (!args.search) { if (editor !== undefined && gitUri !== undefined) { - const line = editor.selection.active.line - gitUri.offset; - const blameLine = await this.git.getBlameForLine(gitUri, line); + const blameLine = await this.git.getBlameForLine(gitUri, editor.selection.active.line); if (blameLine !== undefined) { args.search = `#${blameLine.commit.shortSha}`; } diff --git a/src/commands/showFileHistory.ts b/src/commands/showFileHistory.ts deleted file mode 100644 index 9b898b0..0000000 --- a/src/commands/showFileHistory.ts +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; -import { commands, Position, Range, TextEditor, TextEditorEdit, Uri, window } from 'vscode'; -import { Commands, EditorCommand, getCommandUri } from './common'; -import { BuiltInCommands } from '../constants'; -// import { GitExplorer } from '../views/gitExplorer'; -import { GitService, GitUri } from '../gitService'; -import { Messages } from '../messages'; -import { Logger } from '../logger'; - -export interface ShowFileHistoryCommandArgs { - line?: number; - position?: Position; - sha?: string; -} - -export class ShowFileHistoryCommand extends EditorCommand { - - constructor(private git: GitService) { - super(Commands.ShowFileHistory); - } - - async execute(editor: TextEditor, edit: TextEditorEdit, uri?: Uri, args: ShowFileHistoryCommandArgs = {}) { - uri = getCommandUri(uri, editor); - if (uri === undefined) return undefined; - - if (args.position == null) { - args = { ...args }; - - // If the command is executed manually -- treat it as a click on the root lens (i.e. show blame for the whole file) - args.position = editor.document.validateRange(new Range(0, 0, 0, 1000000)).start; - } - - const gitUri = await GitUri.fromUri(uri, this.git); - - try { - // if (this.explorer !== undefined) { - // this.explorer.addHistory(gitUri); - // return undefined; - // } - - const locations = await this.git.getLogLocations(gitUri, args.sha, args.line); - if (locations === undefined) return Messages.showFileNotUnderSourceControlWarningMessage('Unable to show file history'); - - return commands.executeCommand(BuiltInCommands.ShowReferences, uri, args.position, locations); - } - catch (ex) { - Logger.error(ex, 'ShowFileHistoryCommand', 'getLogLocations'); - return window.showErrorMessage(`Unable to show file history. See output channel for more details`); - } - } -} \ No newline at end of file diff --git a/src/commands/showQuickCommitDetails.ts b/src/commands/showQuickCommitDetails.ts index 9d8d104..0d013f9 100644 --- a/src/commands/showQuickCommitDetails.ts +++ b/src/commands/showQuickCommitDetails.ts @@ -58,7 +58,7 @@ export class ShowQuickCommitDetailsCommand extends ActiveEditorCachedCommand { if (args.sha === undefined) { if (editor === undefined) return undefined; - const blameline = editor.selection.active.line - gitUri.offset; + const blameline = editor.selection.active.line; if (blameline < 0) return undefined; try { diff --git a/src/commands/showQuickCommitFileDetails.ts b/src/commands/showQuickCommitFileDetails.ts index 3930cc8..1cefa00 100644 --- a/src/commands/showQuickCommitFileDetails.ts +++ b/src/commands/showQuickCommitFileDetails.ts @@ -57,7 +57,7 @@ export class ShowQuickCommitFileDetailsCommand extends ActiveEditorCachedCommand if (args.sha === undefined) { if (editor === undefined) return undefined; - const blameline = editor.selection.active.line - gitUri.offset; + const blameline = editor.selection.active.line; if (blameline < 0) return undefined; try { diff --git a/src/configuration.ts b/src/configuration.ts index e3644fa..bbce58c 100644 --- a/src/configuration.ts +++ b/src/configuration.ts @@ -1,93 +1,57 @@ 'use strict'; import { FileAnnotationType } from './annotations/annotationController'; -import { Commands } from './commands'; import { LineAnnotationType } from './currentLineController'; import { GitExplorerView } from './views/gitExplorer'; import { OutputLevel } from './logger'; export { ExtensionKey } from './constants'; -export type CodeLensCommand = - 'gitlens.toggleFileBlame' | - 'gitlens.showBlameHistory' | - 'gitlens.showFileHistory' | - 'gitlens.diffWithPrevious' | - 'gitlens.showQuickCommitDetails' | - 'gitlens.showQuickCommitFileDetails' | - 'gitlens.showQuickFileHistory' | - 'gitlens.showQuickRepoHistory'; -export const CodeLensCommand = { - BlameAnnotate: Commands.ToggleFileBlame as CodeLensCommand, - ShowBlameHistory: Commands.ShowBlameHistory as CodeLensCommand, - ShowFileHistory: Commands.ShowFileHistory as CodeLensCommand, - DiffWithPrevious: Commands.DiffWithPrevious as CodeLensCommand, - ShowQuickCommitDetails: Commands.ShowQuickCommitDetails as CodeLensCommand, - ShowQuickCommitFileDetails: Commands.ShowQuickCommitFileDetails as CodeLensCommand, - ShowQuickFileHistory: Commands.ShowQuickFileHistory as CodeLensCommand, - ShowQuickCurrentBranchHistory: Commands.ShowQuickCurrentBranchHistory as CodeLensCommand -}; +export enum CodeLensCommand { + DiffWithPrevious = 'gitlens.diffWithPrevious', + ShowQuickCommitDetails = 'gitlens.showQuickCommitDetails', + ShowQuickCommitFileDetails = 'gitlens.showQuickCommitFileDetails', + ShowQuickCurrentBranchHistory = 'gitlens.showQuickRepoHistory', + ShowQuickFileHistory = 'gitlens.showQuickFileHistory', + ToggleFileBlame = 'gitlens.toggleFileBlame' +} -export type CodeLensLocations = 'document' | 'containers' | 'blocks' | 'custom'; -export const CodeLensLocations = { - Document: 'document' as CodeLensLocations, - Containers: 'containers' as CodeLensLocations, - Blocks: 'blocks' as CodeLensLocations, - Custom: 'custom' as CodeLensLocations -}; +export enum CodeLensLocations { + Document = 'document', + Containers = 'containers', + Blocks = 'blocks', + Custom = 'custom' +} -export type LineHighlightLocations = 'gutter' | 'line' | 'overviewRuler'; -export const LineHighlightLocations = { - Gutter: 'gutter' as LineHighlightLocations, - Line: 'line' as LineHighlightLocations, - OverviewRuler: 'overviewRuler' as LineHighlightLocations -}; +export enum LineHighlightLocations { + Gutter = 'gutter', + Line = 'line', + OverviewRuler = 'overviewRuler' +} -export type CustomRemoteType = - 'Bitbucket' | - 'Custom' | - 'GitHub' | - 'GitLab'; -export const CustomRemoteType = { - Bitbucket: 'Bitbucket' as CustomRemoteType, - BitbucketServer: 'BitbucketServer' as CustomRemoteType, - Custom: 'Custom' as CustomRemoteType, - GitHub: 'GitHub' as CustomRemoteType, - GitLab: 'GitLab' as CustomRemoteType -}; +export enum CustomRemoteType { + Bitbucket = 'Bitbucket', + BitbucketServer = 'BitbucketServer', + Custom = 'Custom', + GitHub = 'GitHub', + GitLab = 'GitLab' +} -export type GitExplorerFilesLayout = - 'auto' | - 'list' | - 'tree'; -export const GitExplorerFilesLayout = { - Auto: 'auto' as GitExplorerFilesLayout, - List: 'list' as GitExplorerFilesLayout, - Tree: 'tree' as GitExplorerFilesLayout -}; +export enum GitExplorerFilesLayout { + Auto = 'auto', + List = 'list', + Tree = 'tree' +} -export type StatusBarCommand = - 'gitlens.toggleFileBlame' | - 'gitlens.showBlameHistory' | - 'gitlens.showFileHistory' | - 'gitlens.toggleCodeLens' | - 'gitlens.diffWithPrevious' | - 'gitlens.diffWithWorking' | - 'gitlens.showQuickCommitDetails' | - 'gitlens.showQuickCommitFileDetails' | - 'gitlens.showQuickFileHistory' | - 'gitlens.showQuickRepoHistory'; -export const StatusBarCommand = { - BlameAnnotate: Commands.ToggleFileBlame as StatusBarCommand, - ShowBlameHistory: Commands.ShowBlameHistory as StatusBarCommand, - ShowFileHistory: Commands.ShowFileHistory as CodeLensCommand, - DiffWithPrevious: Commands.DiffWithPrevious as StatusBarCommand, - DiffWithWorking: Commands.DiffWithWorking as StatusBarCommand, - ToggleCodeLens: Commands.ToggleCodeLens as StatusBarCommand, - ShowQuickCommitDetails: Commands.ShowQuickCommitDetails as StatusBarCommand, - ShowQuickCommitFileDetails: Commands.ShowQuickCommitFileDetails as StatusBarCommand, - ShowQuickFileHistory: Commands.ShowQuickFileHistory as StatusBarCommand, - ShowQuickCurrentBranchHistory: Commands.ShowQuickCurrentBranchHistory as StatusBarCommand -}; +export enum StatusBarCommand { + DiffWithPrevious = 'gitlens.diffWithPrevious', + DiffWithWorking = 'gitlens.diffWithWorking', + ShowQuickCommitDetails = 'gitlens.showQuickCommitDetails', + ShowQuickCommitFileDetails = 'gitlens.showQuickCommitFileDetails', + ShowQuickCurrentBranchHistory = 'gitlens.showQuickRepoHistory', + ShowQuickFileHistory = 'gitlens.showQuickFileHistory', + ToggleCodeLens = 'gitlens.toggleCodeLens', + ToggleFileBlame = 'gitlens.toggleFileBlame' +} export interface IAdvancedConfig { caching: { diff --git a/src/constants.ts b/src/constants.ts index 7af4b1b..a125bbb 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -8,124 +8,74 @@ export const QualifiedExtensionId = `eamodio.${ExtensionId}`; export const ApplicationInsightsKey = 'a9c302f8-6483-4d01-b92c-c159c799c679'; -export type BuiltInCommands = 'cursorMove' | - 'editor.action.showReferences' | - 'editor.action.toggleRenderWhitespace' | - 'editorScroll' | - 'revealLine' | - 'setContext' | - 'vscode.diff' | - 'vscode.executeDocumentSymbolProvider' | - 'vscode.executeCodeLensProvider' | - 'vscode.open' | - 'vscode.previewHtml' | - 'workbench.action.closeActiveEditor' | - 'workbench.action.closeAllEditors' | - 'workbench.action.nextEditor'; -export const BuiltInCommands = { - CloseActiveEditor: 'workbench.action.closeActiveEditor' as BuiltInCommands, - CloseAllEditors: 'workbench.action.closeAllEditors' as BuiltInCommands, - CursorMove: 'cursorMove' as BuiltInCommands, - Diff: 'vscode.diff' as BuiltInCommands, - EditorScroll: 'editorScroll' as BuiltInCommands, - ExecuteDocumentSymbolProvider: 'vscode.executeDocumentSymbolProvider' as BuiltInCommands, - ExecuteCodeLensProvider: 'vscode.executeCodeLensProvider' as BuiltInCommands, - Open: 'vscode.open' as BuiltInCommands, - NextEditor: 'workbench.action.nextEditor' as BuiltInCommands, - PreviewHtml: 'vscode.previewHtml' as BuiltInCommands, - RevealLine: 'revealLine' as BuiltInCommands, - SetContext: 'setContext' as BuiltInCommands, - ShowReferences: 'editor.action.showReferences' as BuiltInCommands, - ToggleRenderWhitespace: 'editor.action.toggleRenderWhitespace' as BuiltInCommands -}; +export enum BuiltInCommands { + CloseActiveEditor = 'workbench.action.closeActiveEditor', + CloseAllEditors = 'workbench.action.closeAllEditors', + CursorMove = 'cursorMove', + Diff = 'vscode.diff', + EditorScroll = 'editorScroll', + ExecuteDocumentSymbolProvider = 'vscode.executeDocumentSymbolProvider', + ExecuteCodeLensProvider = 'vscode.executeCodeLensProvider', + Open = 'vscode.open', + NextEditor = 'workbench.action.nextEditor', + PreviewHtml = 'vscode.previewHtml', + RevealLine = 'revealLine', + SetContext = 'setContext', + ShowReferences = 'editor.action.showReferences', + ToggleRenderWhitespace = 'editor.action.toggleRenderWhitespace' +} -export type CommandContext = - 'gitlens:annotationStatus' | - 'gitlens:canToggleCodeLens' | - 'gitlens:enabled' | - 'gitlens:hasRemotes' | - 'gitlens:gitExplorer:view' | - 'gitlens:isBlameable' | - 'gitlens:isRepository' | - 'gitlens:isTracked' | - 'gitlens:key'; -export const CommandContext = { - AnnotationStatus: 'gitlens:annotationStatus' as CommandContext, - CanToggleCodeLens: 'gitlens:canToggleCodeLens' as CommandContext, - Enabled: 'gitlens:enabled' as CommandContext, - GitExplorerView: 'gitlens:gitExplorer:view' as CommandContext, - HasRemotes: 'gitlens:hasRemotes' as CommandContext, - IsBlameable: 'gitlens:isBlameable' as CommandContext, - IsRepository: 'gitlens:isRepository' as CommandContext, - IsTracked: 'gitlens:isTracked' as CommandContext, - Key: 'gitlens:key' as CommandContext -}; +export enum CommandContext { + AnnotationStatus = 'gitlens:annotationStatus', + CanToggleCodeLens = 'gitlens:canToggleCodeLens', + Enabled = 'gitlens:enabled', + GitExplorerView = 'gitlens:gitExplorer:view', + HasRemotes = 'gitlens:hasRemotes', + IsBlameable = 'gitlens:isBlameable', + IsRepository = 'gitlens:isRepository', + IsTracked = 'gitlens:isTracked', + Key = 'gitlens:key' +} export function setCommandContext(key: CommandContext | string, value: any) { return commands.executeCommand(BuiltInCommands.SetContext, key, value); } -export type DocumentSchemes = 'file' | 'git' | 'gitlens-git'; -export const DocumentSchemes = { - File: 'file' as DocumentSchemes, - Git: 'git' as DocumentSchemes, - GitLensGit: 'gitlens-git' as DocumentSchemes -}; +export enum DocumentSchemes { + File = 'file', + Git = 'git', + GitLensGit = 'gitlens-git' +} -export type GlyphChars = - '\u21a9' | - '\u2193' | - '\u2937' | - '\u2190' | - '\u2194' | - '\u2192' | - '\u21e8' | - '\u2191' | - '\u2197' | - '\u2217' | - '\u2713' | - '\u2014' | - '\u2022' | - '\u226A' | - '\u22D8' | - '\u2026' | - '\u22EF' | - '\u270E' | - '\u00a0' | - '\u274F' | - '\u2750' | - '\u200b'; -export const GlyphChars = { - ArrowBack: '\u21a9' as GlyphChars, - ArrowDown: '\u2193' as GlyphChars, - ArrowDropRight: '\u2937' as GlyphChars, - ArrowLeft: '\u2190' as GlyphChars, - ArrowLeftRight: '\u2194' as GlyphChars, - ArrowRight: '\u2192' as GlyphChars, - ArrowRightHollow: '\u21e8' as GlyphChars, - ArrowUp: '\u2191' as GlyphChars, - ArrowUpRight: '\u2197' as GlyphChars, - Asterisk: '\u2217' as GlyphChars, - Check: '\u2713' as GlyphChars, - Dash: '\u2014' as GlyphChars, - Dot: '\u2022' as GlyphChars, - DoubleArrowLeft: '\u226A' as GlyphChars, - DoubleArrowRight: '\u22D8' as GlyphChars, - Ellipsis: '\u2026' as GlyphChars, - MiddleEllipsis: '\u22EF' as GlyphChars, - Pensil: '\u270E' as GlyphChars, - Space: '\u00a0' as GlyphChars, - SquareWithBottomShadow: '\u274F' as GlyphChars, - SquareWithTopShadow: '\u2750' as GlyphChars, - ZeroWidthSpace: '\u200b' as GlyphChars -}; +export enum GlyphChars { + ArrowBack = '\u21a9', + ArrowDown = '\u2193', + ArrowDropRight = '\u2937', + ArrowLeft = '\u2190', + ArrowLeftRight = '\u2194', + ArrowRight = '\u2192', + ArrowRightHollow = '\u21e8', + ArrowUp = '\u2191', + ArrowUpRight = '\u2197', + Asterisk = '\u2217', + Check = '\u2713', + Dash = '\u2014', + Dot = '\u2022', + DoubleArrowLeft = '\u226A', + DoubleArrowRight = '\u22D8', + Ellipsis = '\u2026', + MiddleEllipsis = '\u22EF', + Pensil = '\u270E', + Space = '\u00a0', + SquareWithBottomShadow = '\u274F', + SquareWithTopShadow = '\u2750', + ZeroWidthSpace = '\u200b' +} -export type GlobalState = 'gitlensVersion'; -export const GlobalState = { - GitLensVersion: 'gitlensVersion' as GlobalState -}; +export enum GlobalState { + GitLensVersion = 'gitlensVersion' +} -export type WorkspaceState = 'gitlens:gitExplorer:view'; -export const WorkspaceState = { - GitExplorerView: 'gitlens:gitExplorer:view' as WorkspaceState -}; \ No newline at end of file +export enum WorkspaceState { + GitExplorerView = 'gitlens:gitExplorer:view' +} \ No newline at end of file diff --git a/src/currentLineController.ts b/src/currentLineController.ts index c49c98c..ff292df 100644 --- a/src/currentLineController.ts +++ b/src/currentLineController.ts @@ -17,11 +17,10 @@ const annotationDecoration: TextEditorDecorationType = window.createTextEditorDe } } as DecorationRenderOptions); -export type LineAnnotationType = 'trailing' | 'hover'; -export const LineAnnotationType = { - Trailing: 'trailing' as LineAnnotationType, - Hover: 'hover' as LineAnnotationType -}; +export enum LineAnnotationType { + Trailing = 'trailing', + Hover = 'hover' +} export class CurrentLineController extends Disposable { @@ -193,8 +192,6 @@ export class CurrentLineController extends Disposable { } private async _updateBlame(line: number, editor: TextEditor) { - line = line - this._uri.offset; - let commit: GitCommit | undefined = undefined; let commitLine: GitCommitLine | undefined = undefined; // Since blame information isn't valid when there are unsaved changes -- don't show any status @@ -290,7 +287,7 @@ export class CurrentLineController extends Disposable { const state = this._blameLineAnnotationState !== undefined ? this._blameLineAnnotationState : cfg; if (!state.enabled) return; - line = line === undefined ? blameLine.line + this._uri.offset : line; + line = line === undefined ? blameLine.line : line; const decorationOptions: DecorationOptions[] = []; @@ -419,15 +416,9 @@ export class CurrentLineController extends Disposable { } as ICommitFormatOptions)}`; switch (cfg.command) { - case StatusBarCommand.BlameAnnotate: + case StatusBarCommand.ToggleFileBlame: this._statusBarItem.tooltip = 'Toggle Blame Annotations'; break; - case StatusBarCommand.ShowBlameHistory: - this._statusBarItem.tooltip = 'Open Blame History Explorer'; - break; - case StatusBarCommand.ShowFileHistory: - this._statusBarItem.tooltip = 'Open File History Explorer'; - break; case StatusBarCommand.DiffWithPrevious: this._statusBarItem.command = Commands.DiffLineWithPrevious; this._statusBarItem.tooltip = 'Compare Line Revision with Previous'; diff --git a/src/extension.ts b/src/extension.ts index 47303ac..ddd5d92 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -2,29 +2,15 @@ // import { Objects } from './system'; import { commands, ExtensionContext, extensions, languages, window, workspace } from 'vscode'; import { AnnotationController } from './annotations/annotationController'; -import { CloseUnchangedFilesCommand, OpenChangedFilesCommand } from './commands'; -import { ExternalDiffCommand } from './commands'; -import { OpenBranchesInRemoteCommand, OpenBranchInRemoteCommand, OpenCommitInRemoteCommand, OpenFileInRemoteCommand, OpenFileRevisionCommand, OpenInRemoteCommand, OpenRepoInRemoteCommand } from './commands'; -import { CopyMessageToClipboardCommand, CopyShaToClipboardCommand } from './commands'; -import { DiffDirectoryCommand, DiffLineWithPreviousCommand, DiffLineWithWorkingCommand, DiffWithBranchCommand, DiffWithCommand, DiffWithNextCommand, DiffWithPreviousCommand, DiffWithRevisionCommand, DiffWithWorkingCommand } from './commands'; -import { ResetSuppressedWarningsCommand } from './commands'; -import { ClearFileAnnotationsCommand, ShowFileBlameCommand, ShowLineBlameCommand, ToggleFileBlameCommand, ToggleFileRecentChangesCommand, ToggleLineBlameCommand } from './commands'; -import { ShowBlameHistoryCommand, ShowFileHistoryCommand } from './commands'; -import { ShowLastQuickPickCommand } from './commands'; -import { ShowQuickBranchHistoryCommand, ShowQuickCurrentBranchHistoryCommand, ShowQuickFileHistoryCommand } from './commands'; -import { ShowCommitSearchCommand, ShowQuickCommitDetailsCommand, ShowQuickCommitFileDetailsCommand } from './commands'; -import { ShowQuickRepoStatusCommand, ShowQuickStashListCommand } from './commands'; -import { StashApplyCommand, StashDeleteCommand, StashSaveCommand } from './commands'; -import { ToggleCodeLensCommand } from './commands'; import { CodeLensLocations, IConfig, LineHighlightLocations } from './configuration'; import { ApplicationInsightsKey, CommandContext, ExtensionKey, GlobalState, QualifiedExtensionId, setCommandContext } from './constants'; import { CodeLensController } from './codeLensController'; +import { configureCommands } from './commands'; import { CurrentLineController, LineAnnotationType } from './currentLineController'; -import { RemoteProviderFactory } from './git/remotes/factory'; import { GitContentProvider } from './gitContentProvider'; import { GitExplorer } from './views/gitExplorer'; import { GitRevisionCodeLensProvider } from './gitRevisionCodeLensProvider'; -import { GitContextTracker, GitService } from './gitService'; +import { GitContextTracker, GitService, RemoteProviderFactory } from './gitService'; import { Keyboard } from './keyboard'; import { Logger } from './logger'; import { Messages, SuppressedKeys } from './messages'; @@ -96,49 +82,7 @@ export async function activate(context: ExtensionContext) { context.subscriptions.push(window.registerTreeDataProvider('gitlens.gitExplorer', new GitExplorer(context, git))); context.subscriptions.push(commands.registerTextEditorCommand('gitlens.computingFileAnnotations', () => { })); - context.subscriptions.push(new CloseUnchangedFilesCommand(git)); - context.subscriptions.push(new ExternalDiffCommand(git)); - context.subscriptions.push(new OpenChangedFilesCommand(git)); - context.subscriptions.push(new CopyMessageToClipboardCommand(git)); - context.subscriptions.push(new CopyShaToClipboardCommand(git)); - context.subscriptions.push(new DiffDirectoryCommand(git)); - context.subscriptions.push(new DiffLineWithPreviousCommand(git)); - context.subscriptions.push(new DiffLineWithWorkingCommand(git)); - context.subscriptions.push(new DiffWithCommand(git)); - context.subscriptions.push(new DiffWithBranchCommand(git)); - context.subscriptions.push(new DiffWithNextCommand(git)); - context.subscriptions.push(new DiffWithPreviousCommand(git)); - context.subscriptions.push(new DiffWithRevisionCommand(git)); - context.subscriptions.push(new DiffWithWorkingCommand(git)); - context.subscriptions.push(new OpenBranchesInRemoteCommand(git)); - context.subscriptions.push(new OpenBranchInRemoteCommand(git)); - context.subscriptions.push(new OpenCommitInRemoteCommand(git)); - context.subscriptions.push(new OpenFileInRemoteCommand(git)); - context.subscriptions.push(new OpenFileRevisionCommand(annotationController)); - context.subscriptions.push(new OpenInRemoteCommand()); - context.subscriptions.push(new OpenRepoInRemoteCommand(git)); - context.subscriptions.push(new ClearFileAnnotationsCommand(annotationController)); - context.subscriptions.push(new ShowFileBlameCommand(annotationController)); - context.subscriptions.push(new ShowLineBlameCommand(currentLineController)); - context.subscriptions.push(new ToggleFileBlameCommand(annotationController)); - context.subscriptions.push(new ToggleFileRecentChangesCommand(annotationController)); - context.subscriptions.push(new ToggleLineBlameCommand(currentLineController)); - context.subscriptions.push(new ResetSuppressedWarningsCommand(context)); - context.subscriptions.push(new ShowBlameHistoryCommand(git)); - context.subscriptions.push(new ShowFileHistoryCommand(git)); - context.subscriptions.push(new ShowLastQuickPickCommand()); - context.subscriptions.push(new ShowQuickBranchHistoryCommand(git)); - context.subscriptions.push(new ShowQuickCurrentBranchHistoryCommand(git)); - context.subscriptions.push(new ShowQuickCommitDetailsCommand(git)); - context.subscriptions.push(new ShowQuickCommitFileDetailsCommand(git)); - context.subscriptions.push(new ShowCommitSearchCommand(git)); - context.subscriptions.push(new ShowQuickFileHistoryCommand(git)); - context.subscriptions.push(new ShowQuickRepoStatusCommand(git)); - context.subscriptions.push(new ShowQuickStashListCommand(git)); - context.subscriptions.push(new StashApplyCommand(git)); - context.subscriptions.push(new StashDeleteCommand(git)); - context.subscriptions.push(new StashSaveCommand(git)); - context.subscriptions.push(new ToggleCodeLensCommand(codeLensController)); + configureCommands(context, git, annotationController, currentLineController, codeLensController); // Constantly over my data cap so stop collecting initialized event // Telemetry.trackEvent('initialized', Objects.flatten(cfg, 'config', true)); diff --git a/src/git/gitUri.ts b/src/git/gitUri.ts index b741d76..4375ee8 100644 --- a/src/git/gitUri.ts +++ b/src/git/gitUri.ts @@ -12,7 +12,6 @@ interface UriEx { export class GitUri extends (Uri as UriEx) { - offset: number; repoPath?: string | undefined; sha?: string | undefined; @@ -29,32 +28,33 @@ export class GitUri extends (Uri as UriEx) { const data = GitService.fromGitContentUri(uri); super(uri.scheme, uri.authority, path.resolve(data.repoPath, data.originalFileName || data.fileName), uri.query, uri.fragment); - this.offset = (data.decoration && data.decoration.split('\n').length) || 0; if (!GitService.isUncommitted(data.sha)) { this.sha = data.sha; this.repoPath = data.repoPath; } + + return; } - else if (commitOrRepoPath) { - if (typeof commitOrRepoPath === 'string') { - super(uri.scheme, uri.authority, uri.path, uri.query, uri.fragment); - this.offset = 0; - this.repoPath = commitOrRepoPath; - } - else { - const commit = commitOrRepoPath; - super(uri.scheme, uri.authority, path.resolve(commit.repoPath, commit.originalFileName || commit.fileName || ''), uri.query, uri.fragment); - - this.offset = 0; - if (commit.repoPath !== undefined) { - this.repoPath = commit.repoPath; - } - - if (commit.sha !== undefined && !GitService.isUncommitted(commit.sha)) { - this.sha = commit.sha; - } - } + if (!commitOrRepoPath) return; + + if (typeof commitOrRepoPath === 'string') { + super(uri.scheme, uri.authority, uri.path, uri.query, uri.fragment); + + this.repoPath = commitOrRepoPath; + + return; + } + + const commit = commitOrRepoPath; + super(uri.scheme, uri.authority, path.resolve(commit.repoPath, commit.originalFileName || commit.fileName || ''), uri.query, uri.fragment); + + if (commit.repoPath !== undefined) { + this.repoPath = commit.repoPath; + } + + if (commit.sha !== undefined && !GitService.isUncommitted(commit.sha)) { + this.sha = commit.sha; } } @@ -173,6 +173,4 @@ export interface IGitUriData { fileName: string; repoPath: string; originalFileName?: string; - index?: number; - decoration?: string; } diff --git a/src/git/models/blameCommit.ts b/src/git/models/blameCommit.ts index 640eae0..d172881 100644 --- a/src/git/models/blameCommit.ts +++ b/src/git/models/blameCommit.ts @@ -1,5 +1,5 @@ 'use strict'; -import { GitCommit, GitCommitLine } from './commit'; +import { GitCommit, GitCommitLine, GitCommitType } from './commit'; export class GitBlameCommit extends GitCommit { @@ -15,6 +15,6 @@ export class GitBlameCommit extends GitCommit { previousSha?: string, previousFileName?: string ) { - super('blame', repoPath, sha, fileName, author, date, message, originalFileName, previousSha, previousFileName); + super(GitCommitType.Blame, repoPath, sha, fileName, author, date, message, originalFileName, previousSha, previousFileName); } } \ No newline at end of file diff --git a/src/git/models/commit.ts b/src/git/models/commit.ts index a7706b2..51bccb6 100644 --- a/src/git/models/commit.ts +++ b/src/git/models/commit.ts @@ -19,7 +19,12 @@ export interface GitCommitLine { code?: string; } -export type GitCommitType = 'blame' | 'branch' | 'file' | 'stash'; +export enum GitCommitType { + Blame = 'blame', + Branch = 'branch', + File = 'file', + Stash = 'stash' +} export class GitCommit { diff --git a/src/git/models/remote.ts b/src/git/models/remote.ts index 6a00fd5..03fb772 100644 --- a/src/git/models/remote.ts +++ b/src/git/models/remote.ts @@ -1,7 +1,10 @@ 'use strict'; import { RemoteProvider, RemoteProviderFactory } from '../remotes/factory'; -export type GitRemoteType = 'fetch' | 'push'; +export enum GitRemoteType { + Fetch = 'fetch', + Push = 'push' +} export class GitRemote { diff --git a/src/git/models/stashCommit.ts b/src/git/models/stashCommit.ts index 301124c..43be399 100644 --- a/src/git/models/stashCommit.ts +++ b/src/git/models/stashCommit.ts @@ -1,4 +1,5 @@ 'use strict'; +import { GitCommitType } from './commit'; import { GitLogCommit } from './logCommit'; import { GitStatusFileStatus, IGitStatusFile } from './status'; @@ -17,7 +18,7 @@ export class GitStashCommit extends GitLogCommit { previousSha?: string, previousFileName?: string ) { - super('stash', repoPath, sha, fileName, 'You', date, message, status, fileStatuses, originalFileName, previousSha, previousFileName); + super(GitCommitType.Stash, repoPath, sha, fileName, 'You', date, message, status, fileStatuses, originalFileName, previousSha, previousFileName); } get shortSha() { diff --git a/src/git/remotes/provider.ts b/src/git/remotes/provider.ts index f98aec4..665971e 100644 --- a/src/git/remotes/provider.ts +++ b/src/git/remotes/provider.ts @@ -3,23 +3,31 @@ import { commands, Range, Uri } from 'vscode'; import { BuiltInCommands } from '../../constants'; import { GitLogCommit } from '../../gitService'; -export type RemoteResourceType = 'branch' | 'branches' | 'commit' | 'file' | 'repo' | 'revision'; +export enum RemoteResourceType { + Branch = 'branch', + Branches = 'branches', + Commit = 'commit', + File = 'file', + Repo = 'repo', + Revision = 'revision' +} + export type RemoteResource = - { type: 'branch', branch: string } | - { type: 'branches' } | - { type: 'commit', sha: string } | - { type: 'file', branch?: string, fileName: string, range?: Range } | - { type: 'repo' } | - { type: 'revision', branch?: string, commit?: GitLogCommit, fileName: string, range?: Range, sha?: string }; + { type: RemoteResourceType.Branch, branch: string } | + { type: RemoteResourceType.Branches } | + { type: RemoteResourceType.Commit, sha: string } | + { type: RemoteResourceType.File, branch?: string, fileName: string, range?: Range } | + { type: RemoteResourceType.Repo } | + { type: RemoteResourceType.Revision, branch?: string, commit?: GitLogCommit, fileName: string, range?: Range, sha?: string }; export function getNameFromRemoteResource(resource: RemoteResource) { switch (resource.type) { - case 'branch': return 'Branch'; - case 'branches': return 'Branches'; - case 'commit': return 'Commit'; - case 'file': return 'File'; - case 'repo': return 'Repository'; - case 'revision': return 'Revision'; + case RemoteResourceType.Branch: return 'Branch'; + case RemoteResourceType.Branches: return 'Branches'; + case RemoteResourceType.Commit: return 'Commit'; + case RemoteResourceType.File: return 'File'; + case RemoteResourceType.Repo: return 'Repository'; + case RemoteResourceType.Revision: return 'Revision'; default: return ''; } } @@ -69,12 +77,12 @@ export abstract class RemoteProvider { open(resource: RemoteResource): Promise<{} | undefined> { switch (resource.type) { - case 'branch': return this.openBranch(resource.branch); - case 'branches': return this.openBranches(); - case 'commit': return this.openCommit(resource.sha); - case 'file': return this.openFile(resource.fileName, resource.branch, undefined, resource.range); - case 'repo': return this.openRepo(); - case 'revision': return this.openFile(resource.fileName, resource.branch, resource.sha, resource.range); + case RemoteResourceType.Branch: return this.openBranch(resource.branch); + case RemoteResourceType.Branches: return this.openBranches(); + case RemoteResourceType.Commit: return this.openCommit(resource.sha); + case RemoteResourceType.File: return this.openFile(resource.fileName, resource.branch, undefined, resource.range); + case RemoteResourceType.Repo: return this.openRepo(); + case RemoteResourceType.Revision: return this.openFile(resource.fileName, resource.branch, resource.sha, resource.range); } } diff --git a/src/gitCodeLensProvider.ts b/src/gitCodeLensProvider.ts index 300f3d6..2a34c7f 100644 --- a/src/gitCodeLensProvider.ts +++ b/src/gitCodeLensProvider.ts @@ -1,7 +1,7 @@ 'use strict'; import { Functions, Iterables } from './system'; import { CancellationToken, CodeLens, CodeLensProvider, Command, commands, DocumentSelector, Event, EventEmitter, ExtensionContext, Position, Range, SymbolInformation, SymbolKind, TextDocument, Uri, workspace } from 'vscode'; -import { Commands, DiffWithPreviousCommandArgs, ShowBlameHistoryCommandArgs, ShowFileHistoryCommandArgs, ShowQuickCommitDetailsCommandArgs, ShowQuickCommitFileDetailsCommandArgs, ShowQuickFileHistoryCommandArgs } from './commands'; +import { Commands, DiffWithPreviousCommandArgs, ShowQuickCommitDetailsCommandArgs, ShowQuickCommitFileDetailsCommandArgs, ShowQuickFileHistoryCommandArgs } from './commands'; import { BuiltInCommands, DocumentSchemes, ExtensionKey } from './constants'; import { CodeLensCommand, CodeLensLocations, ICodeLensLanguageLocation, IConfig } from './configuration'; import { GitBlame, GitBlameCommit, GitBlameLines, GitService, GitUri } from './gitService'; @@ -259,14 +259,12 @@ export class GitCodeLensProvider implements CodeLensProvider { } switch (this._config.codeLens.recentChange.command) { - case CodeLensCommand.BlameAnnotate: return this._applyBlameAnnotateCommand(title, lens, blame); - case CodeLensCommand.ShowBlameHistory: return this._applyShowBlameHistoryCommand(title, lens, blame, recentCommit); - case CodeLensCommand.ShowFileHistory: return this._applyShowFileHistoryCommand(title, lens, blame, recentCommit); case CodeLensCommand.DiffWithPrevious: return this._applyDiffWithPreviousCommand(title, lens, blame, recentCommit); case CodeLensCommand.ShowQuickCommitDetails: return this._applyShowQuickCommitDetailsCommand(title, lens, blame, recentCommit); case CodeLensCommand.ShowQuickCommitFileDetails: return this._applyShowQuickCommitFileDetailsCommand(title, lens, blame, recentCommit); + case CodeLensCommand.ShowQuickCurrentBranchHistory: return this._applyShowQuickCurrentBranchHistoryCommand(title, lens, blame, recentCommit); case CodeLensCommand.ShowQuickFileHistory: return this._applyShowQuickFileHistoryCommand(title, lens, blame, recentCommit); - case CodeLensCommand.ShowQuickCurrentBranchHistory: return this._applyShowQuickBranchHistoryCommand(title, lens, blame, recentCommit); + case CodeLensCommand.ToggleFileBlame: return this._applyToggleFileBlameCommand(title, lens, blame); default: return lens; } } @@ -282,78 +280,16 @@ export class GitCodeLensProvider implements CodeLensProvider { } switch (this._config.codeLens.authors.command) { - case CodeLensCommand.BlameAnnotate: return this._applyBlameAnnotateCommand(title, lens, blame); - case CodeLensCommand.ShowBlameHistory: return this._applyShowBlameHistoryCommand(title, lens, blame); - case CodeLensCommand.ShowFileHistory: return this._applyShowFileHistoryCommand(title, lens, blame); case CodeLensCommand.DiffWithPrevious: return this._applyDiffWithPreviousCommand(title, lens, blame); case CodeLensCommand.ShowQuickCommitDetails: return this._applyShowQuickCommitDetailsCommand(title, lens, blame); case CodeLensCommand.ShowQuickCommitFileDetails: return this._applyShowQuickCommitFileDetailsCommand(title, lens, blame); + case CodeLensCommand.ShowQuickCurrentBranchHistory: return this._applyShowQuickCurrentBranchHistoryCommand(title, lens, blame); case CodeLensCommand.ShowQuickFileHistory: return this._applyShowQuickFileHistoryCommand(title, lens, blame); - case CodeLensCommand.ShowQuickCurrentBranchHistory: return this._applyShowQuickBranchHistoryCommand(title, lens, blame); + case CodeLensCommand.ToggleFileBlame: return this._applyToggleFileBlameCommand(title, lens, blame); default: return lens; } } - _applyBlameAnnotateCommand(title: string, lens: T, blame: GitBlameLines): T { - lens.command = { - title: title, - command: Commands.ToggleFileBlame, - arguments: [Uri.file(lens.uri.fsPath)] - }; - return lens; - } - - _applyShowBlameHistoryCommand(title: string, lens: T, blame: GitBlameLines, commit?: GitBlameCommit): T { - let line = lens.range.start.line; - if (commit) { - const blameLine = commit.lines.find(_ => _.line === line); - if (blameLine) { - line = blameLine.originalLine; - } - } - - const position = lens.isFullRange ? new Position(1, 0) : lens.range.start; - lens.command = { - title: title, - command: Commands.ShowBlameHistory, - arguments: [ - Uri.file(lens.uri.fsPath), - { - line, - position, - range: lens.blameRange, - sha: commit && commit.sha - } as ShowBlameHistoryCommandArgs - ] - }; - return lens; - } - - _applyShowFileHistoryCommand(title: string, lens: T, blame: GitBlameLines, commit?: GitBlameCommit): T { - let line = lens.range.start.line; - if (commit) { - const blameLine = commit.lines.find(_ => _.line === line); - if (blameLine) { - line = blameLine.originalLine; - } - } - - const position = lens.isFullRange ? new Position(1, 0) : lens.range.start; - lens.command = { - title: title, - command: Commands.ShowFileHistory, - arguments: [ - Uri.file(lens.uri.fsPath), - { - line, - position, - sha: commit && commit.sha - } as ShowFileHistoryCommandArgs - ] - }; - return lens; - } - _applyDiffWithPreviousCommand(title: string, lens: T, blame: GitBlameLines, commit?: GitBlameCommit): T { if (commit === undefined) { const blameLine = blame.allLines[lens.range.start.line]; @@ -402,6 +338,15 @@ export class GitCodeLensProvider implements CodeLensProvider { return lens; } + _applyShowQuickCurrentBranchHistoryCommand(title: string, lens: T, blame: GitBlameLines, commit?: GitBlameCommit): T { + lens.command = { + title: title, + command: CodeLensCommand.ShowQuickCurrentBranchHistory, + arguments: [Uri.file(lens.uri.fsPath)] + }; + return lens; + } + _applyShowQuickFileHistoryCommand(title: string, lens: T, blame: GitBlameLines, commit?: GitBlameCommit): T { lens.command = { title: title, @@ -416,10 +361,10 @@ export class GitCodeLensProvider implements CodeLensProvider { return lens; } - _applyShowQuickBranchHistoryCommand(title: string, lens: T, blame: GitBlameLines, commit?: GitBlameCommit): T { + _applyToggleFileBlameCommand(title: string, lens: T, blame: GitBlameLines): T { lens.command = { title: title, - command: CodeLensCommand.ShowQuickCurrentBranchHistory, + command: Commands.ToggleFileBlame, arguments: [Uri.file(lens.uri.fsPath)] }; return lens; diff --git a/src/gitContentProvider.ts b/src/gitContentProvider.ts index f2894c1..359112a 100644 --- a/src/gitContentProvider.ts +++ b/src/gitContentProvider.ts @@ -13,15 +13,12 @@ export class GitContentProvider implements TextDocumentContentProvider { async provideTextDocumentContent(uri: Uri, token: CancellationToken): Promise { const data = GitService.fromGitContentUri(uri); + if (data.sha === GitService.fakeSha) return ''; + const fileName = data.originalFileName || data.fileName; + try { - let text = data.sha !== GitService.fakeSha - ? await this.git.getVersionedFileText(data.repoPath, fileName, data.sha) - : ''; - if (data.decoration) { - text = `${data.decoration}\n${text}`; - } - return text; + return await this.git.getVersionedFileText(data.repoPath, fileName, data.sha); } catch (ex) { Logger.error(ex, 'GitContentProvider', 'getVersionedFileText'); diff --git a/src/gitService.ts b/src/gitService.ts index a5e4d45..ecf46f4 100644 --- a/src/gitService.ts +++ b/src/gitService.ts @@ -1,10 +1,10 @@ 'use strict'; import { Functions, Iterables, Objects } from './system'; -import { Disposable, Event, EventEmitter, FileSystemWatcher, Location, Position, Range, TextDocument, TextDocumentChangeEvent, TextEditor, Uri, workspace } from 'vscode'; +import { Disposable, Event, EventEmitter, FileSystemWatcher, Range, TextDocument, TextDocumentChangeEvent, TextEditor, Uri, workspace } from 'vscode'; import { IConfig } from './configuration'; -import { DocumentSchemes, ExtensionKey, GlyphChars } from './constants'; +import { DocumentSchemes, ExtensionKey } from './constants'; import { RemoteProviderFactory } from './git/remotes/factory'; -import { Git, GitAuthor, GitBlame, GitBlameCommit, GitBlameLine, GitBlameLines, GitBlameParser, GitBranch, GitBranchParser, GitCommit, GitDiff, GitDiffChunkLine, GitDiffParser, GitDiffShortStat, GitLog, GitLogCommit, GitLogParser, GitRemote, GitRemoteParser, GitStash, GitStashParser, GitStatus, GitStatusFile, GitStatusParser, IGit, setDefaultEncoding } from './git/git'; +import { Git, GitAuthor, GitBlame, GitBlameCommit, GitBlameLine, GitBlameLines, GitBlameParser, GitBranch, GitBranchParser, GitCommit, GitCommitType, GitDiff, GitDiffChunkLine, GitDiffParser, GitDiffShortStat, GitLog, GitLogCommit, GitLogParser, GitRemote, GitRemoteParser, GitStash, GitStashParser, GitStatus, GitStatusFile, GitStatusParser, IGit, setDefaultEncoding } from './git/git'; import { GitUri, IGitCommitInfo, IGitUriData } from './git/gitUri'; import { Logger } from './logger'; import * as fs from 'fs'; @@ -15,7 +15,8 @@ export { GitUri, IGitCommitInfo }; export * from './git/models/models'; export * from './git/formatters/commit'; export * from './git/formatters/status'; -export { getNameFromRemoteResource, RemoteResource, RemoteProvider } from './git/remotes/provider'; +export { getNameFromRemoteResource, RemoteProvider, RemoteResource, RemoteResourceType } from './git/remotes/provider'; +export { RemoteProviderFactory } from './git/remotes/factory'; export * from './git/gitContextTracker'; class UriCacheEntry { @@ -56,20 +57,18 @@ enum RemoveCacheReason { DocumentSaved } -export type GitRepoSearchBy = 'author' | 'files' | 'message' | 'sha'; -export const GitRepoSearchBy = { - Author: 'author' as GitRepoSearchBy, - Files: 'files' as GitRepoSearchBy, - Message: 'message' as GitRepoSearchBy, - Sha: 'sha' as GitRepoSearchBy -}; - -export type RepoChangedReasons = 'remotes' | 'stash' | 'unknown'; -export const RepoChangedReasons = { - Remotes: 'remotes' as RepoChangedReasons, - Stash: 'stash' as RepoChangedReasons, - Unknown: 'unknown' as RepoChangedReasons -}; +export enum GitRepoSearchBy { + Author = 'author', + Files = 'files', + Message = 'message', + Sha = 'sha' +} + +export enum RepoChangedReasons { + Remotes = 'remotes', + Stash = 'stash', + Unknown = '' +} export class GitService extends Disposable { @@ -234,7 +233,7 @@ export class GitService extends Disposable { private _onRepoChanged(uri: Uri) { if (uri !== undefined && uri.path.endsWith('ref/stash')) { - this._fireRepoChange('stash'); + this._fireRepoChange(RepoChangedReasons.Stash); return; } @@ -262,7 +261,7 @@ export class GitService extends Disposable { private _fireRepoChangeDebounced: (() => void) | undefined = undefined; private _repoChangedReasons: RepoChangedReasons[] = []; - private _fireRepoChange(reason: RepoChangedReasons = 'unknown') { + private _fireRepoChange(reason: RepoChangedReasons = RepoChangedReasons.Unknown) { if (this._fireRepoChangeDebounced === undefined) { this._fireRepoChangeDebounced = Functions.debounce(this._fireRepoChangeCore, 50); } @@ -563,30 +562,6 @@ export class GitService extends Disposable { } as GitBlameLines; } - async getBlameLocations(uri: GitUri, range: Range, selectedSha?: string, line?: number): Promise { - Logger.log(`getBlameLocations('${uri.repoPath}', '${uri.fsPath}', [${range.start.line}, ${range.end.line}], ${uri.sha})`); - - const blame = await this.getBlameForRange(uri, range); - if (blame === undefined) return undefined; - - const commitCount = blame.commits.size; - const dateFormat = this.config.defaultDateFormat === null ? 'MMMM Do, YYYY h:MMa' : this.config.defaultDateFormat; - - const locations: Location[] = []; - Iterables.forEach(blame.commits.values(), (c, i) => { - if (c.isUncommitted) return; - - const decoration = `${GlyphChars.ArrowDropRight} ${c.author}, ${c.formatDate(dateFormat)}`; - const uri = GitService.toReferenceGitContentUri(c, i + 1, commitCount, c.originalFileName, decoration, dateFormat); - locations.push(new Location(uri, new Position(0, 0))); - if (c.sha === selectedSha) { - locations.push(new Location(uri, new Position((line || 0) + 1, 0))); - } - }); - - return locations; - } - async getBranch(repoPath: string): Promise { Logger.log(`getBranch('${repoPath}')`); @@ -747,7 +722,7 @@ export class GitService extends Disposable { try { const data = await Git.log(repoPath, sha, maxCount, reverse); - const log = GitLogParser.parse(data, 'branch', repoPath, undefined, sha, maxCount, reverse, undefined); + const log = GitLogParser.parse(data, GitCommitType.Branch, repoPath, undefined, sha, maxCount, reverse, undefined); return log; } catch (ex) { @@ -781,7 +756,7 @@ export class GitService extends Disposable { try { const data = await Git.log_search(repoPath, searchArgs, maxCount); - const log = GitLogParser.parse(data, 'branch', repoPath, undefined, undefined, maxCount, false, undefined); + const log = GitLogParser.parse(data, GitCommitType.Branch, repoPath, undefined, undefined, maxCount, false, undefined); return log; } catch (ex) { @@ -867,7 +842,7 @@ export class GitService extends Disposable { try { const { range, ...opts } = options; const data = await Git.log_file(root, file, sha, { ...opts, ...{ startLine: range && range.start.line + 1, endLine: range && range.end.line + 1 } }); - const log = GitLogParser.parse(data, 'file', root, file, sha, options.maxCount, options.reverse!, range); + const log = GitLogParser.parse(data, GitCommitType.File, root, file, sha, options.maxCount, options.reverse!, range); return log; } catch (ex) { @@ -888,30 +863,6 @@ export class GitService extends Disposable { } } - async getLogLocations(uri: GitUri, selectedSha?: string, line?: number): Promise { - Logger.log(`getLogLocations('${uri.repoPath}', '${uri.fsPath}', ${uri.sha}, ${selectedSha}, ${line})`); - - const log = await this.getLogForFile(uri.repoPath, uri.fsPath, uri.sha); - if (log === undefined) return undefined; - - const commitCount = log.commits.size; - const dateFormat = this.config.defaultDateFormat === null ? 'MMMM Do, YYYY h:MMa' : this.config.defaultDateFormat; - - const locations: Location[] = []; - Iterables.forEach(log.commits.values(), (c, i) => { - if (c.isUncommitted) return; - - const decoration = `${GlyphChars.ArrowDropRight} ${c.author}, ${c.formatDate(dateFormat)}`; - const uri = GitService.toReferenceGitContentUri(c, i + 1, commitCount, c.originalFileName, decoration, dateFormat); - locations.push(new Location(uri, new Position(0, 0))); - if (c.sha === selectedSha) { - locations.push(new Location(uri, new Position((line || 0) + 1, 0))); - } - }); - - return locations; - } - hasRemotes(repoPath: string): boolean { const remotes = this._remotesCache.get(this.normalizeRepoPath(repoPath)); return remotes !== undefined && remotes.length > 0; @@ -1158,7 +1109,7 @@ export class GitService extends Disposable { shortSha = GitService.shortenSha(shaOrcommitOrUri); } else if (shaOrcommitOrUri instanceof GitCommit) { - data = GitService._toGitUriData(shaOrcommitOrUri, undefined, shaOrcommitOrUri.originalFileName); + data = GitService._toGitUriData(shaOrcommitOrUri, shaOrcommitOrUri.originalFileName); fileName = shaOrcommitOrUri.fileName; shortSha = shaOrcommitOrUri.shortSha; } @@ -1176,37 +1127,12 @@ export class GitService extends Disposable { return Uri.parse(`${DocumentSchemes.GitLensGit}:${path.basename(fileName!, extension)}:${shortSha}${extension}?${JSON.stringify(data)}`); } - static toReferenceGitContentUri(commit: GitCommit, index: number, commitCount: number, originalFileName: string | undefined, decoration: string, dateFormat: string | null): Uri { - return GitService._toReferenceGitContentUri(commit, DocumentSchemes.GitLensGit, commitCount, GitService._toGitUriData(commit, index, originalFileName, decoration), dateFormat); - } - - private static _toReferenceGitContentUri(commit: GitCommit, scheme: DocumentSchemes, commitCount: number, data: IGitUriData, dateFormat: string | null) { - const pad = (n: number) => ('0000000' + n).slice(-('' + commitCount).length); - const ext = path.extname(data.fileName); - const uriPath = `${path.relative(commit.repoPath, data.fileName.slice(0, -ext.length))}/${commit.shortSha}${ext}`; - - let message = commit.message; - if (message.length > 50) { - message = message.substring(0, 49) + GlyphChars.Ellipsis; - } - - if (dateFormat === null) { - dateFormat = 'MMMM Do, YYYY h:MMa'; - } - - // NOTE: Need to specify an index here, since I can't control the sort order -- just alphabetic or by file location - return Uri.parse(`${scheme}:${pad(data.index || 0)} ${GlyphChars.Dot} ${encodeURIComponent(message)} ${GlyphChars.Dot} ${commit.formatDate(dateFormat)} ${GlyphChars.Dot} ${encodeURIComponent(uriPath)}?${JSON.stringify(data)}`); - } - - private static _toGitUriData(commit: IGitUriData, index?: number, originalFileName?: string, decoration?: string): T { + private static _toGitUriData(commit: IGitUriData, originalFileName?: string): T { const fileName = Git.normalizePath(path.resolve(commit.repoPath, commit.fileName)); - const data = { repoPath: commit.repoPath, fileName: fileName, sha: commit.sha, index: index } as T; + const data = { repoPath: commit.repoPath, fileName: fileName, sha: commit.sha } as T; if (originalFileName) { data.originalFileName = Git.normalizePath(path.resolve(commit.repoPath, originalFileName)); } - if (decoration) { - data.decoration = decoration; - } return data; } diff --git a/src/logger.ts b/src/logger.ts index 8fc0005..28b512c 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -6,12 +6,11 @@ import { Telemetry } from './telemetry'; const ConsolePrefix = `[${ExtensionOutputChannelName}]`; -export type OutputLevel = 'silent' | 'errors' | 'verbose'; -export const OutputLevel = { - Silent: 'silent' as OutputLevel, - Errors: 'errors' as OutputLevel, - Verbose: 'verbose' as OutputLevel -}; +export enum OutputLevel { + Silent = 'silent', + Errors = 'errors', + Verbose = 'verbose' +} let debug = false; let level: OutputLevel = OutputLevel.Silent; diff --git a/src/messages.ts b/src/messages.ts index f4c15af..32760fe 100644 --- a/src/messages.ts +++ b/src/messages.ts @@ -4,24 +4,16 @@ import { BuiltInCommands } from './constants'; import { GitCommit } from './gitService'; import { Logger } from './logger'; -export type SuppressedKeys = 'suppressCommitHasNoPreviousCommitWarning' | - 'suppressCommitNotFoundWarning' | - 'suppressFileNotUnderSourceControlWarning' | - 'suppressGitVersionWarning' | - 'suppressLineUncommittedWarning' | - 'suppressNoRepositoryWarning' | - 'suppressUpdateNotice' | - 'suppressWelcomeNotice'; -export const SuppressedKeys = { - CommitHasNoPreviousCommitWarning: 'suppressCommitHasNoPreviousCommitWarning' as SuppressedKeys, - CommitNotFoundWarning: 'suppressCommitNotFoundWarning' as SuppressedKeys, - FileNotUnderSourceControlWarning: 'suppressFileNotUnderSourceControlWarning' as SuppressedKeys, - GitVersionWarning: 'suppressGitVersionWarning' as SuppressedKeys, - LineUncommittedWarning: 'suppressLineUncommittedWarning' as SuppressedKeys, - NoRepositoryWarning: 'suppressNoRepositoryWarning' as SuppressedKeys, - UpdateNotice: 'suppressUpdateNotice' as SuppressedKeys, - WelcomeNotice: 'suppressWelcomeNotice' as SuppressedKeys -}; +export enum SuppressedKeys { + CommitHasNoPreviousCommitWarning = 'suppressCommitHasNoPreviousCommitWarning', + CommitNotFoundWarning = 'suppressCommitNotFoundWarning', + FileNotUnderSourceControlWarning = 'suppressFileNotUnderSourceControlWarning', + GitVersionWarning = 'suppressGitVersionWarning', + LineUncommittedWarning = 'suppressLineUncommittedWarning', + NoRepositoryWarning = 'suppressNoRepositoryWarning', + UpdateNotice = 'suppressUpdateNotice', + WelcomeNotice = 'suppressWelcomeNotice' +} export class Messages { diff --git a/src/quickPicks/remotes.ts b/src/quickPicks/remotes.ts index 73f7f9a..5814966 100644 --- a/src/quickPicks/remotes.ts +++ b/src/quickPicks/remotes.ts @@ -4,7 +4,7 @@ import { QuickPickOptions, window } from 'vscode'; import { Commands, OpenInRemoteCommandArgs } from '../commands'; import { CommandQuickPickItem, getQuickPickIgnoreFocusOut } from './common'; import { GlyphChars } from '../constants'; -import { getNameFromRemoteResource, GitLogCommit, GitRemote, GitService, RemoteResource } from '../gitService'; +import { getNameFromRemoteResource, GitLogCommit, GitRemote, GitService, RemoteResource, RemoteResourceType } from '../gitService'; import * as path from 'path'; export class OpenRemoteCommandQuickPickItem extends CommandQuickPickItem { @@ -34,28 +34,28 @@ export class OpenRemotesCommandQuickPickItem extends CommandQuickPickItem { let description = ''; switch (resource.type) { - case 'branch': + case RemoteResourceType.Branch: description = `$(git-branch) ${resource.branch}`; break; - case 'branches': + case RemoteResourceType.Branches: description = `$(git-branch) Branches`; break; - case 'commit': + case RemoteResourceType.Commit: const shortSha = GitService.shortenSha(resource.sha); description = `$(git-commit) ${shortSha}`; break; - case 'file': + case RemoteResourceType.File: description = `$(file-text) ${path.basename(resource.fileName)}`; break; - case 'repo': + case RemoteResourceType.Repo: description = `$(repo) Repository`; break; - case 'revision': + case RemoteResourceType.Revision: if (resource.commit !== undefined && resource.commit instanceof GitLogCommit) { if (resource.commit.status === 'D') { resource.sha = resource.commit.previousSha; diff --git a/src/views/gitExplorer.ts b/src/views/gitExplorer.ts index 5154f71..312d108 100644 --- a/src/views/gitExplorer.ts +++ b/src/views/gitExplorer.ts @@ -10,15 +10,11 @@ import { GitService, GitUri, RepoChangedReasons } from '../gitService'; export * from './explorerNodes'; -export type GitExplorerView = - 'auto' | - 'history' | - 'repository'; -export const GitExplorerView = { - Auto: 'auto' as GitExplorerView, - History: 'history' as GitExplorerView, - Repository: 'repository' as GitExplorerView -}; +export enum GitExplorerView { + Auto = 'auto', + History = 'history', + Repository = 'repository' +} export interface OpenFileRevisionCommandArgs { uri?: Uri; diff --git a/src/views/remoteNode.ts b/src/views/remoteNode.ts index f23dce2..aab0cb0 100644 --- a/src/views/remoteNode.ts +++ b/src/views/remoteNode.ts @@ -4,7 +4,7 @@ import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; import { BranchHistoryNode } from './branchHistoryNode'; import { GlyphChars } from '../constants'; import { ExplorerNode, ResourceType } from './explorerNode'; -import { GitRemote, GitService, GitUri } from '../gitService'; +import { GitRemote, GitRemoteType, GitService, GitUri } from '../gitService'; export class RemoteNode extends ExplorerNode { @@ -28,8 +28,8 @@ export class RemoteNode extends ExplorerNode { } getTreeItem(): TreeItem { - const fetch = this.remote.types.includes('push'); - const push = this.remote.types.includes('push'); + const fetch = this.remote.types.includes(GitRemoteType.Push); + const push = this.remote.types.includes(GitRemoteType.Push); let separator; if (fetch && push) { diff --git a/src/views/statusFilesNode.ts b/src/views/statusFilesNode.ts index 7a5482d..c3de00a 100644 --- a/src/views/statusFilesNode.ts +++ b/src/views/statusFilesNode.ts @@ -4,7 +4,7 @@ import { ExtensionContext, TreeItem, TreeItemCollapsibleState, Uri } from 'vscod import { GitExplorerFilesLayout } from '../configuration'; import { ExplorerNode, ResourceType, ShowAllNode } from './explorerNode'; import { FolderNode, IFileExplorerNode } from './folderNode'; -import { GitBranch, GitLog, GitLogCommit, GitService, GitStatus, GitUri, IGitStatusFileWithCommit } from '../gitService'; +import { GitBranch, GitCommitType, GitLog, GitLogCommit, GitService, GitStatus, GitUri, IGitStatusFileWithCommit } from '../gitService'; import { StatusFileCommitsNode } from './statusFileCommitsNode'; import * as path from 'path'; @@ -47,7 +47,7 @@ export class StatusFilesNode extends ExplorerNode { statuses.splice(0, 0, ...this.status.files.map(s => { return { ...s, - commit: new GitLogCommit('file', repoPath, GitService.uncommittedSha, s.fileName, 'You', new Date(), '', s.status, [s], s.originalFileName, 'HEAD', s.fileName) + commit: new GitLogCommit(GitCommitType.File, repoPath, GitService.uncommittedSha, s.fileName, 'You', new Date(), '', s.status, [s], s.originalFileName, 'HEAD', s.fileName) } as IGitStatusFileWithCommit; })); }