diff --git a/images/dark/icon-commit.svg b/images/dark/icon-commit.svg
new file mode 100644
index 0000000..33f77ba
--- /dev/null
+++ b/images/dark/icon-commit.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/images/dark/icon-refresh.svg b/images/dark/icon-refresh.svg
new file mode 100644
index 0000000..e69de29
diff --git a/images/light/icon-commit.svg b/images/light/icon-commit.svg
new file mode 100644
index 0000000..ac914a4
--- /dev/null
+++ b/images/light/icon-commit.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/package.json b/package.json
index a5fe99a..db68bf2 100644
--- a/package.json
+++ b/package.json
@@ -1,1384 +1,1445 @@
-{
- "name": "gitlens",
- "version": "4.2.0",
- "author": {
- "name": "Eric Amodio",
- "email": "eamodio@gmail.com"
- },
- "publisher": "eamodio",
- "engines": {
- "vscode": "^1.12.0"
- },
- "license": "SEE LICENSE IN LICENSE",
- "displayName": "Git Lens \u2014 git blame annotations, code lens, and more",
- "description": "Supercharge Visual Studio Code's Git capabilities \u2014 Visualize code authorship at a glance via Git blame annotations and code lens, seamlessly navigate and explore the history of a file or branch, gain valuable insights via powerful comparison commands, and so much more",
- "badges": [
- {
- "url": "https://badges.gitter.im/vscode-gitlens/Lobby.svg",
- "href": "https://gitter.im/vscode-gitlens/Lobby",
- "description": "Chat at https://gitter.im/vscode-gitlens/Lobby"
- }
- ],
- "categories": [
- "Other"
- ],
- "keywords": [
- "git",
- "code lens",
- "blame",
- "history",
- "annotation",
- "log",
- "inline blame",
- "compare",
- "diff"
- ],
- "galleryBanner": {
- "color": "#56098c",
- "theme": "dark"
- },
- "icon": "images/gitlens-icon.png",
- "preview": false,
- "homepage": "https://github.com/eamodio/vscode-gitlens/blob/master/README.md",
- "bugs": {
- "url": "https://github.com/eamodio/vscode-gitlens/issues"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/eamodio/vscode-gitlens.git"
- },
- "main": "./out/src/extension",
- "contributes": {
- "configuration": {
- "type": "object",
- "title": "GitLens configuration",
- "properties": {
- "gitlens.debug": {
- "type": "boolean",
- "default": false,
- "description": "Specifies debug mode"
- },
- "gitlens.insiders": {
- "type": "boolean",
- "default": false,
- "description": "Specifies whether or not to enable new experimental features (expect there to be issues)"
- },
- "gitlens.outputLevel": {
- "type": "string",
- "default": "silent",
- "enum": [
- "silent",
- "errors",
- "verbose"
- ],
- "description": "Specifies how much (if any) output will be sent to the GitLens output channel"
- },
- "gitlens.annotations.file.gutter.format": {
- "type": "string",
- "default": "${message|40?} ${ago|14-}",
- "description": "Specifies the format of the gutter blame annotations\nAvailable tokens\n ${id} - commit id\n ${author} - commit author\n ${message} - commit message\n ${ago} - relative commit date (e.g. 1 day ago)\n ${date} - formatted commit date (format specified by `gitlens.annotations.file.gutter.dateFormat`)\n ${authorAgo} - commit author, relative commit date\nSee https://github.com/eamodio/vscode-gitlens/wiki/Advanced-Formatting for advanced formatting"
- },
- "gitlens.annotations.file.gutter.dateFormat": {
- "type": "string",
- "default": null,
- "description": "Specifies how to format absolute dates (using the `${date}` token) in gutter blame annotations\nSee https://momentjs.com/docs/#/displaying/format/ for valid formats"
- },
- "gitlens.annotations.file.gutter.compact": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to compact (deduplicate) matching adjacent gutter blame annotations"
- },
- "gitlens.annotations.file.gutter.heatmap.enabled": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to provide a heatmap indicator in the gutter blame annotations"
- },
- "gitlens.annotations.file.gutter.heatmap.location": {
- "type": "string",
- "default": "right",
- "enum": [
- "left",
- "right"
- ],
- "description": "Specifies where the heatmap indicators will be shown in the gutter blame annotations\n `left` - adds a heatmap indicator on the left edge of the gutter blame annotations\n `right` - adds a heatmap indicator on the right edge of the gutter blame annotations"
- },
- "gitlens.annotations.file.gutter.hover.details": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to provide a commit details hover annotation over the gutter blame annotations"
- },
- "gitlens.annotations.file.gutter.hover.wholeLine": {
- "type": "boolean",
- "default": false,
- "description": "Specifies whether or not to trigger hover annotations over the whole line"
- },
- "gitlens.annotations.file.hover.heatmap.enabled": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to provide heatmap indicators on the left edge of each line"
- },
- "gitlens.annotations.file.hover.wholeLine": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to trigger hover annotations over the whole line"
- },
- "gitlens.annotations.file.recentChanges.hover.details": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to provide a commit details hover annotation"
- },
- "gitlens.annotations.file.recentChanges.hover.changes": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to provide a changes (diff) hover annotation"
- },
- "gitlens.annotations.file.recentChanges.hover.wholeLine": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to trigger hover annotations over the whole line"
- },
- "gitlens.annotations.line.hover.details": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to provide a commit details hover annotation for the current line"
- },
- "gitlens.annotations.line.hover.changes": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to provide a changes (diff) hover annotation for the current line"
- },
- "gitlens.annotations.line.trailing.format": {
- "type": "string",
- "default": "${authorAgo} \u2022 ${message}",
- "description": "Specifies the format of the trailing blame annotations\nAvailable tokens\n ${id} - commit id\n ${author} - commit author\n ${message} - commit message\n ${ago} - relative commit date (e.g. 1 day ago)\n ${date} - formatted commit date (format specified by `gitlens.annotations.line.trailing.dateFormat`)\n ${authorAgo} - commit author, relative commit date\nSee https://github.com/eamodio/vscode-gitlens/wiki/Advanced-Formatting for advanced formatting"
- },
- "gitlens.annotations.line.trailing.dateFormat": {
- "type": "string",
- "default": null,
- "description": "Specifies how to format absolute dates (using the `${date}` token) in trailing blame annotations\nSee https://momentjs.com/docs/#/displaying/format/ for valid formats"
- },
- "gitlens.annotations.line.trailing.hover.details": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to provide a commit details hover annotation over the trailing blame annotations"
- },
- "gitlens.annotations.line.trailing.hover.changes": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to provide a changes (diff) hover annotation over the trailing blame annotations"
- },
- "gitlens.annotations.line.trailing.hover.wholeLine": {
- "type": "boolean",
- "default": false,
- "description": "Specifies whether or not to trigger hover annotations over the whole line"
- },
- "gitlens.blame.file.annotationType": {
- "type": "string",
- "default": "gutter",
- "enum": [
- "gutter",
- "hover"
- ],
- "description": "Specifies the type of blame annotations that will be shown for the current file\n `gutter` - adds an annotation to the beginning of each line\n `hover` - shows annotations when hovering over each line"
- },
- "gitlens.blame.file.lineHighlight.enabled": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to highlight lines associated with the current line"
- },
- "gitlens.blame.file.lineHighlight.locations": {
- "type": "array",
- "default": [
- "gutter",
- "line",
- "overviewRuler"
- ],
- "items": {
- "type": "string",
- "enum": [
- "gutter",
- "line",
- "overviewRuler"
- ]
- },
- "minItems": 1,
- "maxItems": 3,
- "uniqueItems": true,
- "description": "Specifies where the associated line highlights will be shown\n `gutter` - adds a gutter glyph\n `line` - adds a full-line highlight background color\n `overviewRuler` - adds a decoration to the overviewRuler (scroll bar)"
- },
- "gitlens.blame.line.enabled": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to provide a blame annotation for the current line, by default\nUse the `gitlens.toggleLineBlame` command to toggle the annotations on and off for the current session"
- },
- "gitlens.blame.line.annotationType": {
- "type": "string",
- "default": "trailing",
- "enum": [
- "trailing",
- "hover"
- ],
- "description": "Specifies the type of blame annotations that will be shown for the current line\n `trailing` - adds an annotation to the end of the current line\n `hover` - shows annotations when hovering over the current line"
- },
- "gitlens.recentChanges.file.lineHighlight.locations": {
- "type": "array",
- "default": [
- "gutter",
- "line",
- "overviewRuler"
- ],
- "items": {
- "type": "string",
- "enum": [
- "gutter",
- "line",
- "overviewRuler"
- ]
- },
- "minItems": 1,
- "maxItems": 3,
- "uniqueItems": true,
- "description": "Specifies where the highlights of the recently changed lines will be shown\n `gutter` - adds a gutter glyph\n `line` - adds a full-line highlight background color\n `overviewRuler` - adds a decoration to the overviewRuler (scroll bar)"
- },
- "gitlens.codeLens.enabled": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to provide any Git code lens, by default\nUse the `gitlens.toggleCodeLens` command to toggle the Git code lens on and off for the current session"
- },
- "gitlens.codeLens.recentChange.enabled": {
- "type": "boolean",
- "default": true,
- "description": "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": {
- "type": "string",
- "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"
- },
- "gitlens.codeLens.authors.enabled": {
- "type": "boolean",
- "default": true,
- "description": "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": {
- "type": "string",
- "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"
- },
- "gitlens.codeLens.locations": {
- "type": "array",
- "default": [
- "document",
- "containers"
- ],
- "items": {
- "type": "string",
- "enum": [
- "document",
- "containers",
- "blocks",
- "custom"
- ]
- },
- "minItems": 1,
- "maxItems": 4,
- "uniqueItems": true,
- "description": "Specifies where Git code lens will be shown in the document\n `document` - adds code lens at the top of the document\n `containers` - adds code lens at the start of container-like symbols (modules, classes, interfaces, etc)\n `blocks` - adds code lens at the start of block-like symbols (functions, methods, properties, etc) lines\n `custom` - adds code lens at the start of symbols contained in `gitlens.codeLens.locationCustomSymbols`"
- },
- "gitlens.codeLens.customLocationSymbols": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "uniqueItems": true,
- "description": "Specifies the set of document symbols where Git code lens will be shown in the document\nMust be a member of `SymbolKind`"
- },
- "gitlens.codeLens.perLanguageLocations": {
- "type": "array",
- "default": [
- {
- "language": "css",
- "locations": [
- "document"
- ]
- },
- {
- "language": "html",
- "locations": [
- "document"
- ]
- },
- {
- "language": "json",
- "locations": [
- "document"
- ]
- },
- {
- "language": "less",
- "locations": [
- "document"
- ]
- },
- {
- "language": "scss",
- "locations": [
- "document"
- ]
- },
- {
- "language": "vue",
- "locations": [
- "document"
- ]
- }
- ],
- "items": {
- "type": "object",
- "required": [
- "language",
- "locations"
- ],
- "properties": {
- "language": {
- "type": "string",
- "description": "Specifies the language to which this code lens override applies"
- },
- "locations": {
- "type": "array",
- "default": [
- "document",
- "containers"
- ],
- "items": {
- "type": "string",
- "enum": [
- "document",
- "containers",
- "blocks",
- "custom"
- ]
- },
- "minItems": 1,
- "maxItems": 4,
- "uniqueItems": true,
- "description": "Specifies where Git code lens will be shown in the document for the specified language\n `document` - adds code lens at the top of the document\n `containers` - adds code lens at the start of container-like symbols (modules, classes, interfaces, etc)\n `blocks` - adds code lens at the start of block-like symbols (functions, methods, properties, etc) lines\n `custom` - adds code lens at the start of symbols contained in `customSymbols`"
- },
- "customSymbols": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "uniqueItems": true,
- "description": "Specifies the set of document symbols where Git code lens will be shown in the document for the specified language\nMust be a member of `SymbolKind`"
- }
- }
- },
- "uniqueItems": true,
- "description": "Specifies where Git code lens will be shown in the document for the specified languages"
- },
- "gitlens.codeLens.debug": {
- "type": "boolean",
- "default": false,
- "description": "Specifies whether or not to show debug information in code lens"
- },
- "gitlens.defaultDateFormat": {
- "type": "string",
- "default": null,
- "description": "Specifies how all absolute dates will be formatted by default\nSee https://momentjs.com/docs/#/displaying/format/ for valid formats"
- },
- "gitlens.statusBar.enabled": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to provide blame information on the status bar"
- },
- "gitlens.statusBar.alignment": {
- "type": "string",
- "default": "right",
- "enum": [
- "left",
- "right"
- ],
- "description": "Specifies the blame alignment in the status bar\n `left` - align to the left\n `right` - align to the right"
- },
- "gitlens.statusBar.command": {
- "type": "string",
- "default": "gitlens.showQuickCommitDetails",
- "enum": [
- "gitlens.toggleFileBlame",
- "gitlens.showBlameHistory",
- "gitlens.showFileHistory",
- "gitlens.diffWithPrevious",
- "gitlens.diffWithWorking",
- "gitlens.toggleCodeLens",
- "gitlens.showQuickCommitDetails",
- "gitlens.showQuickCommitFileDetails",
- "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"
- },
- "gitlens.statusBar.format": {
- "type": "string",
- "default": "${authorAgo}",
- "description": "Specifies the format of the status bar blame information\nAvailable tokens\n ${id} - commit id\n ${author} - commit author\n ${message} - commit message\n ${ago} - relative commit date (e.g. 1 day ago)\n ${date} - formatted commit date (format specified by `gitlens.statusBar.dateFormat`)\n ${authorAgo} - commit author, relative commit date\nSee https://github.com/eamodio/vscode-gitlens/wiki/Advanced-Formatting for advanced formatting"
- },
- "gitlens.statusBar.dateFormat": {
- "type": "string",
- "default": null,
- "description": "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"
- },
- "gitlens.strings.codeLens.unsavedChanges.recentChangeAndAuthors": {
- "type": "string",
- "default": "Cannot determine recent change or authors (unsaved changes)",
- "description": "Specifies the string to be shown in place of both the `recent change` and `authors` code lens when there are unsaved changes"
- },
- "gitlens.strings.codeLens.unsavedChanges.recentChangeOnly": {
- "type": "string",
- "default": "Cannot determine recent change (unsaved changes)",
- "description": "Specifies the string to be shown in place of the `recent change` code lens when there are unsaved changes"
- },
- "gitlens.strings.codeLens.unsavedChanges.authorsOnly": {
- "type": "string",
- "default": "Cannot determine authors (unsaved changes)",
- "description": "Specifies the string to be shown in place of the `authors` code lens when there are unsaved changes"
- },
- "gitlens.theme.annotations.file.gutter.separateLines": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not gutter blame annotations will be separated by a small gap"
- },
- "gitlens.theme.annotations.file.gutter.dark.backgroundColor": {
- "type": "string",
- "default": "rgba(255, 255, 255, 0.075)",
- "description": "Specifies the dark theme background color of the gutter blame annotations. Must be a valid css color"
- },
- "gitlens.theme.annotations.file.gutter.light.backgroundColor": {
- "type": "string",
- "default": "rgba(0, 0, 0, 0.05)",
- "description": "Specifies the light theme background color of the gutter blame annotations. Must be a valid css color"
- },
- "gitlens.theme.annotations.file.gutter.dark.foregroundColor": {
- "type": "string",
- "default": "rgb(190, 190, 190)",
- "description": "Specifies the dark theme foreground color of the gutter blame annotations. Must be a valid css color"
- },
- "gitlens.theme.annotations.file.gutter.light.foregroundColor": {
- "type": "string",
- "default": "rgb(116, 116, 116)",
- "description": "Specifies the light theme foreground color of the gutter blame annotations. Must be a valid css color"
- },
- "gitlens.theme.annotations.file.gutter.dark.uncommittedForegroundColor": {
- "type": "string",
- "default": "rgba(0, 188, 242, 0.6)",
- "description": "Specifies the dark theme foreground color of an uncommitted line in the gutter blame annotations. Must be a valid css color"
- },
- "gitlens.theme.annotations.file.gutter.light.uncommittedForegroundColor": {
- "type": "string",
- "default": "rgba(0, 188, 242, 0.6)",
- "description": "Specifies the light theme foreground color of an uncommitted line in the gutter blame annotations. Must be a valid css color"
- },
- "gitlens.theme.annotations.file.hover.separateLines": {
- "type": "boolean",
- "default": false,
- "description": "Specifies whether or not hover blame annotations will be separated by a small gap (if heatmap is enabled)"
- },
- "gitlens.theme.annotations.line.trailing.dark.backgroundColor": {
- "type": "string",
- "default": null,
- "description": "Specifies the dark theme background color of the trailing blame annotation. Must be a valid css color"
- },
- "gitlens.theme.annotations.line.trailing.light.backgroundColor": {
- "type": "string",
- "default": null,
- "description": "Specifies the light theme background color of the trailing blame annotation. Must be a valid css color"
- },
- "gitlens.theme.annotations.line.trailing.dark.foregroundColor": {
- "type": "string",
- "default": "rgba(153, 153, 153, 0.35)",
- "description": "Specifies the dark theme foreground color of the trailing blame annotation. Must be a valid css color"
- },
- "gitlens.theme.annotations.line.trailing.light.foregroundColor": {
- "type": "string",
- "default": "rgba(153, 153, 153, 0.35)",
- "description": "Specifies the light theme foreground color of the trailing blame annotation. Must be a valid css color"
- },
- "gitlens.theme.lineHighlight.dark.backgroundColor": {
- "type": "string",
- "default": "rgba(0, 188, 242, 0.2)",
- "description": "Specifies the dark theme background color of the associated line highlights in blame annotations. Must be a valid css color"
- },
- "gitlens.theme.lineHighlight.light.backgroundColor": {
- "type": "string",
- "default": "rgba(0, 188, 242, 0.2)",
- "description": "Specifies the light theme background color of the associated line highlights in blame annotations. Must be a valid css color"
- },
- "gitlens.theme.lineHighlight.dark.overviewRulerColor": {
- "type": "string",
- "default": "rgba(0, 188, 242, 0.6)",
- "description": "Specifies the dark theme overview ruler color of the associated line highlights in blame annotations. Must be a valid css color"
- },
- "gitlens.theme.lineHighlight.light.overviewRulerColor": {
- "type": "string",
- "default": "rgba(0, 188, 242, 0.6)",
- "description": "Specifies the light theme overview ruler color of the associated line highlights in blame annotations. Must be a valid css color"
- },
- "gitlens.advanced.caching.enabled": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether git output will be cached"
- },
- "gitlens.advanced.caching.maxLines": {
- "type": "number",
- "default": 0,
- "description": "Specifies the threshold for caching larger documents"
- },
- "gitlens.advanced.git": {
- "type": "string",
- "default": null,
- "description": "Specifies the git path to use"
- },
- "gitlens.advanced.gitignore.enabled": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to parse the root .gitignore file for better performance (i.e. avoids blaming excluded files)"
- },
- "gitlens.advanced.maxQuickHistory": {
- "type": "number",
- "default": 200,
- "description": "Specifies the maximum number of QuickPick history entries to show"
- },
- "gitlens.advanced.menus": {
- "type": "object",
- "default": {
- "editorContext": {
- "blame": true,
- "copy": true,
- "details": true,
- "fileDiff": true,
- "history": true,
- "lineDiff": true,
- "remote": true
- },
- "editorTitle": {
- "blame": true,
- "fileDiff": true,
- "history": true,
- "remote": true,
- "status": true
- },
- "editorTitleContext": {
- "blame": true,
- "fileDiff": true,
- "history": true,
- "remote": true
- },
- "explorerContext": {
- "fileDiff": true,
- "history": true,
- "remote": true
- }
- },
- "description": "Specifies which commands will be added to which menus",
- "properties": {
- "editorContext": {
- "type": "object",
- "default": {
- "blame": true,
- "copy": true,
- "details": true,
- "fileDiff": true,
- "history": true,
- "lineDiff": true,
- "remote": true
- },
- "properties": {
- "blame": {
- "type": "boolean",
- "default": true
- },
- "copy": {
- "type": "boolean",
- "default": true
- },
- "details": {
- "type": "boolean",
- "default": true
- },
- "fileDiff": {
- "type": "boolean",
- "default": true
- },
- "history": {
- "type": "boolean",
- "default": true
- },
- "lineDiff": {
- "type": "boolean",
- "default": true
- },
- "remote": {
- "type": "boolean",
- "default": true
- }
- }
- },
- "editorTitle": {
- "type": "object",
- "default": {
- "blame": true,
- "fileDiff": true,
- "history": true,
- "remote": true,
- "status": true
- },
- "properties": {
- "blame": {
- "type": "boolean",
- "default": true
- },
- "fileDiff": {
- "type": "boolean",
- "default": true
- },
- "history": {
- "type": "boolean",
- "default": true
- },
- "remote": {
- "type": "boolean",
- "default": true
- },
- "status": {
- "type": "boolean",
- "default": true
- }
- }
- },
- "editorTitleContext": {
- "type": "object",
- "default": {
- "blame": true,
- "fileDiff": true,
- "history": true,
- "remote": true
- },
- "properties": {
- "blame": {
- "type": "boolean",
- "default": true
- },
- "fileDiff": {
- "type": "boolean",
- "default": true
- },
- "history": {
- "type": "boolean",
- "default": true
- },
- "remote": {
- "type": "boolean",
- "default": true
- }
- }
- },
- "explorerContext": {
- "type": "object",
- "default": {
- "fileDiff": true,
- "history": true,
- "remote": true
- },
- "properties": {
- "fileDiff": {
- "type": "boolean",
- "default": true
- },
- "history": {
- "type": "boolean",
- "default": true
- },
- "remote": {
- "type": "boolean",
- "default": true
- }
- }
- }
- }
- },
- "gitlens.advanced.quickPick.closeOnFocusOut": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to close the QuickPick menu when focus is lost"
- },
- "gitlens.advanced.telemetry.enabled": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to enable GitLens telemetry (even if enabled still abides by the overall `telemetry.enableTelemetry` setting"
- },
- "gitlens.advanced.toggleWhitespace.enabled": {
- "type": "boolean",
- "default": true,
- "description": "Specifies whether or not to toggle whitespace off then showing blame annotations (*may* be required by certain fonts/themes)"
- }
- }
- },
- "commands": [
- {
- "command": "gitlens.diffDirectory",
- "title": "Directory Compare",
- "category": "GitLens"
- },
- {
- "command": "gitlens.diffWithBranch",
- "title": "Compare File with Branch...",
- "category": "GitLens"
- },
- {
- "command": "gitlens.diffWithNext",
- "title": "Compare File with Next Commit",
- "category": "GitLens"
- },
- {
- "command": "gitlens.diffWithPrevious",
- "title": "Compare File with Previous",
- "category": "GitLens"
- },
- {
- "command": "gitlens.diffLineWithPrevious",
- "title": "Compare Line Commit with Previous",
- "category": "GitLens"
- },
- {
- "command": "gitlens.diffWithRevision",
- "title": "Compare File with Revision...",
- "category": "GitLens"
- },
- {
- "command": "gitlens.diffWithWorking",
- "title": "Compare File with Working Tree",
- "category": "GitLens"
- },
- {
- "command": "gitlens.diffLineWithWorking",
- "title": "Compare Line Commit with Working Tree",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showFileBlame",
- "title": "Show File Blame Annotations",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showLineBlame",
- "title": "Show Line Blame Annotations",
- "category": "GitLens"
- },
- {
- "command": "gitlens.toggleFileBlame",
- "title": "Toggle File Blame Annotations",
- "category": "GitLens",
- "icon": {
- "dark": "images/dark/git-icon.svg",
- "light": "images/light/git-icon.svg"
- }
- },
- {
- "command": "gitlens.toggleFileRecentChanges",
- "title": "Toggle Recent File Changes Annotations",
- "category": "GitLens",
- "icon": {
- "dark": "images/dark/git-icon.svg",
- "light": "images/light/git-icon.svg"
- }
- },
- {
- "command": "gitlens.toggleLineBlame",
- "title": "Toggle Line Blame Annotations",
- "category": "GitLens"
- },
- {
- "command": "gitlens.toggleCodeLens",
- "title": "Toggle Git Code Lens",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showBlameHistory",
- "title": "Open Blame History Explorer",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showCommitSearch",
- "title": "Search Commits",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showFileHistory",
- "title": "Open File History Explorer",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showLastQuickPick",
- "title": "Show Last Opened Quick Pick",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showQuickCommitDetails",
- "title": "Show Commit Details",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showQuickCommitFileDetails",
- "title": "Show Commit File Details",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showQuickFileHistory",
- "title": "Show File History",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showQuickBranchHistory",
- "title": "Show Branch History",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showQuickRepoHistory",
- "title": "Show Current Branch History",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showQuickRepoStatus",
- "title": "Show Repository Status",
- "category": "GitLens"
- },
- {
- "command": "gitlens.showQuickStashList",
- "title": "Show Stashed Changes",
- "category": "GitLens"
- },
- {
- "command": "gitlens.copyShaToClipboard",
- "title": "Copy Commit ID to Clipboard",
- "category": "GitLens"
- },
- {
- "command": "gitlens.copyMessageToClipboard",
- "title": "Copy Commit Message to Clipboard",
- "category": "GitLens"
- },
- {
- "command": "gitlens.closeUnchangedFiles",
- "title": "Close Unchanged Files",
- "category": "GitLens"
- },
- {
- "command": "gitlens.openChangedFiles",
- "title": "Open Changed Files",
- "category": "GitLens"
- },
- {
- "command": "gitlens.openBranchInRemote",
- "title": "Open Branch in Remote",
- "category": "GitLens"
- },
- {
- "command": "gitlens.openCommitInRemote",
- "title": "Open Commit in Remote",
- "category": "GitLens"
- },
- {
- "command": "gitlens.openFileInRemote",
- "title": "Open File in Remote",
- "category": "GitLens"
- },
- {
- "command": "gitlens.openRepoInRemote",
- "title": "Open Repository in Remote",
- "category": "GitLens"
- },
- {
- "command": "gitlens.stashApply",
- "title": "Apply Stashed Changes",
- "category": "GitLens"
- },
- {
- "command": "gitlens.stashSave",
- "title": "Stash Changes",
- "category": "GitLens"
- },
- {
- "command": "gitlens.resetSuppressedWarnings",
- "title": "Reset Suppressed Warnings",
- "category": "GitLens"
- }
- ],
- "menus": {
- "commandPalette": [
- {
- "command": "gitlens.diffDirectory",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.diffWithBranch",
- "when": "gitlens:isTracked"
- },
- {
- "command": "gitlens.diffWithNext",
- "when": "gitlens:isTracked"
- },
- {
- "command": "gitlens.diffWithPrevious",
- "when": "gitlens:isTracked"
- },
- {
- "command": "gitlens.diffLineWithPrevious",
- "when": "gitlens:isBlameable"
- },
- {
- "command": "gitlens.diffWithRevision",
- "when": "gitlens:isTracked"
- },
- {
- "command": "gitlens.diffWithWorking",
- "when": "gitlens:isTracked"
- },
- {
- "command": "gitlens.diffLineWithWorking",
- "when": "gitlens:isBlameable"
- },
- {
- "command": "gitlens.showFileBlame",
- "when": "gitlens:isBlameable"
- },
- {
- "command": "gitlens.showLineBlame",
- "when": "gitlens:isBlameable"
- },
- {
- "command": "gitlens.toggleFileBlame",
- "when": "gitlens:isBlameable"
- },
- {
- "command": "gitlens.toggleFileRecentChanges",
- "when": "gitlens:isTracked"
- },
- {
- "command": "gitlens.toggleLineBlame",
- "when": "gitlens:isBlameable"
- },
- {
- "command": "gitlens.toggleCodeLens",
- "when": "gitlens:isTracked && gitlens:canToggleCodeLens"
- },
- {
- "command": "gitlens.showBlameHistory",
- "when": "gitlens:isBlameable"
- },
- {
- "command": "gitlens.showFileHistory",
- "when": "gitlens:isTracked"
- },
- {
- "command": "gitlens.showLastQuickPick",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.showQuickCommitDetails",
- "when": "gitlens:isBlameable"
- },
- {
- "command": "gitlens.showQuickCommitFileDetails",
- "when": "gitlens:isBlameable"
- },
- {
- "command": "gitlens.showQuickFileHistory",
- "when": "gitlens:isTracked"
- },
- {
- "command": "gitlens.showQuickBranchHistory",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.showQuickRepoHistory",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.showQuickRepoStatus",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.showQuickStashList",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.copyShaToClipboard",
- "when": "gitlens:isBlameable"
- },
- {
- "command": "gitlens.copyMessageToClipboard",
- "when": "gitlens:isBlameable"
- },
- {
- "command": "gitlens.closeUnchangedFiles",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.openChangedFiles",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.openBranchInRemote",
- "when": "gitlens:hasRemotes"
- },
- {
- "command": "gitlens.openCommitInRemote",
- "when": "gitlens:isBlameable && gitlens:hasRemotes"
- },
- {
- "command": "gitlens.openFileInRemote",
- "when": "gitlens:isTracked && gitlens:hasRemotes"
- },
- {
- "command": "gitlens.openRepoInRemote",
- "when": "gitlens:hasRemotes"
- },
- {
- "command": "gitlens.stashApply",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.stashSave",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.resetSuppressedWarnings",
- "when": "gitlens:enabled"
- }
- ],
- "editor/context": [
- {
- "command": "gitlens.openFileInRemote",
- "when": "editorTextFocus && gitlens:isTracked && gitlens:hasRemotes && config.gitlens.advanced.menus.editorContext.remote",
- "group": "navigation@100"
- },
- {
- "command": "gitlens.diffLineWithPrevious",
- "when": "editorTextFocus && gitlens:isBlameable && config.gitlens.advanced.menus.editorContext.lineDiff",
- "group": "1_gitlens@1"
- },
- {
- "command": "gitlens.diffLineWithWorking",
- "when": "editorTextFocus && gitlens:isBlameable && config.gitlens.advanced.menus.editorContext.lineDiff",
- "group": "1_gitlens@2"
- },
- {
- "command": "gitlens.showQuickCommitFileDetails",
- "when": "editorTextFocus && gitlens:isBlameable && config.gitlens.advanced.menus.editorContext.details",
- "group": "1_gitlens@3"
- },
- {
- "command": "gitlens.diffWithPrevious",
- "when": "editorTextFocus && gitlens:isTracked && config.gitlens.advanced.menus.editorContext.fileDiff",
- "group": "1_gitlens_1@1"
- },
- {
- "command": "gitlens.diffWithWorking",
- "when": "editorTextFocus && gitlens:isTracked && config.gitlens.advanced.menus.editorContext.fileDiff",
- "group": "1_gitlens_1@2"
- },
- {
- "command": "gitlens.showQuickFileHistory",
- "when": "gitlens:isTracked && config.gitlens.advanced.menus.editorContext.history",
- "group": "3_gitlens@1"
- },
- {
- "command": "gitlens.toggleFileBlame",
- "when": "editorTextFocus && gitlens:isBlameable && config.gitlens.advanced.menus.editorContext.blame",
- "group": "3_gitlens@2"
- },
- {
- "command": "gitlens.copyShaToClipboard",
- "when": "editorTextFocus && gitlens:isBlameable && config.gitlens.advanced.menus.editorContext.copy",
- "group": "9_gitlens@1"
- },
- {
- "command": "gitlens.copyMessageToClipboard",
- "when": "editorTextFocus && gitlens:isBlameable && config.gitlens.advanced.menus.editorContext.copy",
- "group": "9_gitlens@2"
- }
- ],
- "editor/title": [
- {
- "command": "gitlens.toggleFileBlame",
- "alt": "gitlens.toggleFileRecentChanges",
- "when": "gitlens:isBlameable && config.gitlens.advanced.menus.editorTitle.blame",
- "group": "navigation@100"
- },
- {
- "command": "gitlens.openFileInRemote",
- "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.remote",
- "group": "1_gitlens"
- },
- {
- "command": "gitlens.openRepoInRemote",
- "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.remote",
- "group": "1_gitlens"
- },
- {
- "command": "gitlens.diffWithPrevious",
- "when": "editorTextFocus && gitlens:isTracked && config.gitlens.advanced.menus.editorTitle.fileDiff",
- "group": "2_gitlens"
- },
- {
- "command": "gitlens.diffWithWorking",
- "when": "editorTextFocus && gitlens:isTracked && config.gitlens.advanced.menus.editorTitle.fileDiff",
- "group": "2_gitlens"
- },
- {
- "command": "gitlens.showQuickFileHistory",
- "when": "editorFocus && gitlens:isTracked && config.gitlens.advanced.menus.editorTitle.history",
- "group": "2_gitlens_1"
- },
- {
- "command": "gitlens.showQuickRepoHistory",
- "when": "!editorFocus && gitlens:enabled && config.gitlens.advanced.menus.editorTitle.history",
- "group": "2_gitlens_1"
- },
- {
- "command": "gitlens.showQuickRepoStatus",
- "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitle.status",
- "group": "2_gitlens_1"
- }
- ],
- "editor/title/context": [
- {
- "command": "gitlens.openFileInRemote",
- "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.remote",
- "group": "1_gitlens"
- },
- {
- "command": "gitlens.diffWithPrevious",
- "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.fileDiff",
- "group": "1_gitlens_1@1"
- },
- {
- "command": "gitlens.diffWithWorking",
- "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.fileDiff",
- "group": "1_gitlens_1@2"
- },
- {
- "command": "gitlens.showQuickFileHistory",
- "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.history",
- "group": "1_gitlens_2@1"
- },
- {
- "command": "gitlens.toggleFileBlame",
- "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.blame",
- "group": "1_gitlens_2@2"
- }
- ],
- "explorer/context": [
- {
- "command": "gitlens.openFileInRemote",
- "when": "gitlens:enabled && config.gitlens.advanced.menus.explorerContext.remote",
- "group": "navigation@100"
- },
- {
- "command": "gitlens.diffWithPrevious",
- "when": "gitlens:enabled && config.gitlens.advanced.menus.explorerContext.fileDiff",
- "group": "1_gitlens@1"
- },
- {
- "command": "gitlens.diffWithWorking",
- "when": "gitlens:enabled && config.gitlens.advanced.menus.explorerContext.fileDiff",
- "group": "1_gitlens@2"
- },
- {
- "command": "gitlens.showQuickFileHistory",
- "when": "gitlens:enabled && config.gitlens.advanced.menus.explorerContext.history",
- "group": "1_gitlens_1@1"
- }
- ],
- "scm/resourceGroup/context": [
- {
- "command": "gitlens.openChangedFiles",
- "when": "gitlens:enabled",
- "group": "1_gitlens@1"
- },
- {
- "command": "gitlens.closeUnchangedFiles",
- "when": "gitlens:enabled",
- "group": "1_gitlens@2"
- }
- ],
- "scm/resourceState/context": [
- {
- "command": "gitlens.openFileInRemote",
- "when": "gitlens:enabled && gitlens:hasRemotes",
- "group": "navigation"
- },
- {
- "command": "gitlens.diffWithRevision",
- "when": "gitlens:enabled",
- "group": "1_gitlens@1"
- },
- {
- "command": "gitlens.showQuickFileHistory",
- "when": "gitlens:enabled",
- "group": "1_gitlens_1@1"
- }
- ]
- },
- "keybindings": [
- {
- "command": "gitlens.key.left",
- "key": "alt+left",
- "when": "gitlens:key:left"
- },
- {
- "command": "gitlens.key.right",
- "key": "alt+right",
- "when": "gitlens:key:right"
- },
- {
- "command": "gitlens.key.,",
- "key": "alt+,",
- "when": "gitlens:key:,"
- },
- {
- "command": "gitlens.key..",
- "key": "alt+.",
- "when": "gitlens:key:."
- },
- {
- "command": "gitlens.key.escape",
- "key": "escape",
- "when": "gitlens:key:escape"
- },
- {
- "command": "gitlens.toggleFileBlame",
- "key": "alt+b",
- "when": "editorTextFocus && gitlens:isTracked"
- },
- {
- "command": "gitlens.toggleCodeLens",
- "key": "shift+alt+b",
- "when": "editorTextFocus && gitlens:isTracked && gitlens:canToggleCodeLens"
- },
- {
- "command": "gitlens.showLastQuickPick",
- "key": "alt+-",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.showCommitSearch",
- "key": "alt+/",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.showQuickFileHistory",
- "key": "alt+h",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.showQuickRepoHistory",
- "key": "shift+alt+h",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.showQuickRepoStatus",
- "key": "alt+s",
- "when": "gitlens:enabled"
- },
- {
- "command": "gitlens.showQuickCommitFileDetails",
- "key": "alt+c",
- "when": "editorTextFocus && gitlens:enabled"
- },
- {
- "command": "gitlens.diffWithNext",
- "key": "alt+.",
- "when": "editorTextFocus && gitlens:isTracked"
- },
- {
- "command": "gitlens.diffLineWithPrevious",
- "key": "shift+alt+,",
- "when": "editorTextFocus && gitlens:isTracked"
- },
- {
- "command": "gitlens.diffWithPrevious",
- "key": "alt+,",
- "when": "editorTextFocus && gitlens:isTracked"
- },
- {
- "command": "gitlens.diffLineWithWorking",
- "key": "alt+w",
- "when": "editorTextFocus && gitlens:isTracked"
- },
- {
- "command": "gitlens.diffWithWorking",
- "key": "shift+alt+w",
- "when": "editorTextFocus && gitlens:isTracked"
- }
- ]
- },
- "activationEvents": [
- "*"
- ],
- "scripts": {
- "clean": "git clean -xdf",
- "compile": "tslint --project tslint.json && tsc -p ./",
- "watch": "tsc -watch -p ./",
- "lint": "tslint --project tslint.json",
- "pack": "git clean -xdf && vsce package",
- "postinstall": "node ./node_modules/vscode/bin/install",
- "pub": "git clean -xdf && vsce publish",
- "reset": "git clean -xdf && npm install",
- "vscode:prepublish": "npm install --no-save && npm run compile"
- },
- "dependencies": {
- "applicationinsights": "0.21.0",
- "copy-paste": "1.3.0",
- "iconv-lite": "0.4.18",
- "ignore": "3.3.3",
- "lodash.debounce": "4.0.8",
- "lodash.escaperegexp": "4.1.2",
- "lodash.isequal": "4.5.0",
- "lodash.once": "4.1.1",
- "moment": "2.18.1",
- "spawn-rx": "2.0.11",
- "tmp": "0.0.31"
- },
- "devDependencies": {
- "@types/copy-paste": "1.1.30",
- "@types/iconv-lite": "0.0.1",
- "@types/mocha": "2.2.41",
- "@types/node": "8.0.7",
- "@types/tmp": "0.0.33",
- "mocha": "3.4.2",
- "tslint": "5.4.3",
- "typescript": "2.4.1",
- "vscode": "1.1.1"
- }
-}
+{
+ "name": "gitlens",
+ "version": "4.2.0",
+ "author": {
+ "name": "Eric Amodio",
+ "email": "eamodio@gmail.com"
+ },
+ "publisher": "eamodio",
+ "engines": {
+ "vscode": "^1.13.0"
+ },
+ "license": "SEE LICENSE IN LICENSE",
+ "displayName": "Git Lens \u2014 git blame annotations, code lens, and more",
+ "description": "Supercharge Visual Studio Code's Git capabilities \u2014 Visualize code authorship at a glance via Git blame annotations and code lens, seamlessly navigate and explore the history of a file or branch, gain valuable insights via powerful comparison commands, and so much more",
+ "badges": [
+ {
+ "url": "https://badges.gitter.im/vscode-gitlens/Lobby.svg",
+ "href": "https://gitter.im/vscode-gitlens/Lobby",
+ "description": "Chat at https://gitter.im/vscode-gitlens/Lobby"
+ }
+ ],
+ "categories": [
+ "Other"
+ ],
+ "keywords": [
+ "git",
+ "code lens",
+ "blame",
+ "history",
+ "annotation",
+ "log",
+ "inline blame",
+ "compare",
+ "diff"
+ ],
+ "galleryBanner": {
+ "color": "#56098c",
+ "theme": "dark"
+ },
+ "icon": "images/gitlens-icon.png",
+ "preview": false,
+ "homepage": "https://github.com/eamodio/vscode-gitlens/blob/master/README.md",
+ "bugs": {
+ "url": "https://github.com/eamodio/vscode-gitlens/issues"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/eamodio/vscode-gitlens.git"
+ },
+ "main": "./out/src/extension",
+ "contributes": {
+ "configuration": {
+ "type": "object",
+ "title": "GitLens configuration",
+ "properties": {
+ "gitlens.debug": {
+ "type": "boolean",
+ "default": false,
+ "description": "Specifies debug mode"
+ },
+ "gitlens.insiders": {
+ "type": "boolean",
+ "default": false,
+ "description": "Specifies whether or not to enable new experimental features (expect there to be issues)"
+ },
+ "gitlens.outputLevel": {
+ "type": "string",
+ "default": "silent",
+ "enum": [
+ "silent",
+ "errors",
+ "verbose"
+ ],
+ "description": "Specifies how much (if any) output will be sent to the GitLens output channel"
+ },
+ "gitlens.annotations.file.gutter.format": {
+ "type": "string",
+ "default": "${message|40?} ${ago|14-}",
+ "description": "Specifies the format of the gutter blame annotations\nAvailable tokens\n ${id} - commit id\n ${author} - commit author\n ${message} - commit message\n ${ago} - relative commit date (e.g. 1 day ago)\n ${date} - formatted commit date (format specified by `gitlens.annotations.file.gutter.dateFormat`)\n ${authorAgo} - commit author, relative commit date\nSee https://github.com/eamodio/vscode-gitlens/wiki/Advanced-Formatting for advanced formatting"
+ },
+ "gitlens.annotations.file.gutter.dateFormat": {
+ "type": "string",
+ "default": null,
+ "description": "Specifies how to format absolute dates (using the `${date}` token) in gutter blame annotations\nSee https://momentjs.com/docs/#/displaying/format/ for valid formats"
+ },
+ "gitlens.annotations.file.gutter.compact": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to compact (deduplicate) matching adjacent gutter blame annotations"
+ },
+ "gitlens.annotations.file.gutter.heatmap.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to provide a heatmap indicator in the gutter blame annotations"
+ },
+ "gitlens.annotations.file.gutter.heatmap.location": {
+ "type": "string",
+ "default": "right",
+ "enum": [
+ "left",
+ "right"
+ ],
+ "description": "Specifies where the heatmap indicators will be shown in the gutter blame annotations\n `left` - adds a heatmap indicator on the left edge of the gutter blame annotations\n `right` - adds a heatmap indicator on the right edge of the gutter blame annotations"
+ },
+ "gitlens.annotations.file.gutter.hover.details": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to provide a commit details hover annotation over the gutter blame annotations"
+ },
+ "gitlens.annotations.file.gutter.hover.wholeLine": {
+ "type": "boolean",
+ "default": false,
+ "description": "Specifies whether or not to trigger hover annotations over the whole line"
+ },
+ "gitlens.annotations.file.hover.heatmap.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to provide heatmap indicators on the left edge of each line"
+ },
+ "gitlens.annotations.file.hover.wholeLine": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to trigger hover annotations over the whole line"
+ },
+ "gitlens.annotations.file.recentChanges.hover.details": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to provide a commit details hover annotation"
+ },
+ "gitlens.annotations.file.recentChanges.hover.changes": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to provide a changes (diff) hover annotation"
+ },
+ "gitlens.annotations.file.recentChanges.hover.wholeLine": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to trigger hover annotations over the whole line"
+ },
+ "gitlens.annotations.line.hover.details": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to provide a commit details hover annotation for the current line"
+ },
+ "gitlens.annotations.line.hover.changes": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to provide a changes (diff) hover annotation for the current line"
+ },
+ "gitlens.annotations.line.trailing.format": {
+ "type": "string",
+ "default": "${authorAgo} \u2022 ${message}",
+ "description": "Specifies the format of the trailing blame annotations\nAvailable tokens\n ${id} - commit id\n ${author} - commit author\n ${message} - commit message\n ${ago} - relative commit date (e.g. 1 day ago)\n ${date} - formatted commit date (format specified by `gitlens.annotations.line.trailing.dateFormat`)\n ${authorAgo} - commit author, relative commit date\nSee https://github.com/eamodio/vscode-gitlens/wiki/Advanced-Formatting for advanced formatting"
+ },
+ "gitlens.annotations.line.trailing.dateFormat": {
+ "type": "string",
+ "default": null,
+ "description": "Specifies how to format absolute dates (using the `${date}` token) in trailing blame annotations\nSee https://momentjs.com/docs/#/displaying/format/ for valid formats"
+ },
+ "gitlens.annotations.line.trailing.hover.details": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to provide a commit details hover annotation over the trailing blame annotations"
+ },
+ "gitlens.annotations.line.trailing.hover.changes": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to provide a changes (diff) hover annotation over the trailing blame annotations"
+ },
+ "gitlens.annotations.line.trailing.hover.wholeLine": {
+ "type": "boolean",
+ "default": false,
+ "description": "Specifies whether or not to trigger hover annotations over the whole line"
+ },
+ "gitlens.blame.file.annotationType": {
+ "type": "string",
+ "default": "gutter",
+ "enum": [
+ "gutter",
+ "hover"
+ ],
+ "description": "Specifies the type of blame annotations that will be shown for the current file\n `gutter` - adds an annotation to the beginning of each line\n `hover` - shows annotations when hovering over each line"
+ },
+ "gitlens.blame.file.lineHighlight.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to highlight lines associated with the current line"
+ },
+ "gitlens.blame.file.lineHighlight.locations": {
+ "type": "array",
+ "default": [
+ "gutter",
+ "line",
+ "overviewRuler"
+ ],
+ "items": {
+ "type": "string",
+ "enum": [
+ "gutter",
+ "line",
+ "overviewRuler"
+ ]
+ },
+ "minItems": 1,
+ "maxItems": 3,
+ "uniqueItems": true,
+ "description": "Specifies where the associated line highlights will be shown\n `gutter` - adds a gutter glyph\n `line` - adds a full-line highlight background color\n `overviewRuler` - adds a decoration to the overviewRuler (scroll bar)"
+ },
+ "gitlens.blame.line.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to provide a blame annotation for the current line, by default\nUse the `gitlens.toggleLineBlame` command to toggle the annotations on and off for the current session"
+ },
+ "gitlens.blame.line.annotationType": {
+ "type": "string",
+ "default": "trailing",
+ "enum": [
+ "trailing",
+ "hover"
+ ],
+ "description": "Specifies the type of blame annotations that will be shown for the current line\n `trailing` - adds an annotation to the end of the current line\n `hover` - shows annotations when hovering over the current line"
+ },
+ "gitlens.recentChanges.file.lineHighlight.locations": {
+ "type": "array",
+ "default": [
+ "gutter",
+ "line",
+ "overviewRuler"
+ ],
+ "items": {
+ "type": "string",
+ "enum": [
+ "gutter",
+ "line",
+ "overviewRuler"
+ ]
+ },
+ "minItems": 1,
+ "maxItems": 3,
+ "uniqueItems": true,
+ "description": "Specifies where the highlights of the recently changed lines will be shown\n `gutter` - adds a gutter glyph\n `line` - adds a full-line highlight background color\n `overviewRuler` - adds a decoration to the overviewRuler (scroll bar)"
+ },
+ "gitlens.codeLens.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to provide any Git code lens, by default\nUse the `gitlens.toggleCodeLens` command to toggle the Git code lens on and off for the current session"
+ },
+ "gitlens.codeLens.recentChange.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "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": {
+ "type": "string",
+ "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"
+ },
+ "gitlens.codeLens.authors.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "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": {
+ "type": "string",
+ "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"
+ },
+ "gitlens.codeLens.locations": {
+ "type": "array",
+ "default": [
+ "document",
+ "containers"
+ ],
+ "items": {
+ "type": "string",
+ "enum": [
+ "document",
+ "containers",
+ "blocks",
+ "custom"
+ ]
+ },
+ "minItems": 1,
+ "maxItems": 4,
+ "uniqueItems": true,
+ "description": "Specifies where Git code lens will be shown in the document\n `document` - adds code lens at the top of the document\n `containers` - adds code lens at the start of container-like symbols (modules, classes, interfaces, etc)\n `blocks` - adds code lens at the start of block-like symbols (functions, methods, properties, etc) lines\n `custom` - adds code lens at the start of symbols contained in `gitlens.codeLens.locationCustomSymbols`"
+ },
+ "gitlens.codeLens.customLocationSymbols": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true,
+ "description": "Specifies the set of document symbols where Git code lens will be shown in the document\nMust be a member of `SymbolKind`"
+ },
+ "gitlens.codeLens.perLanguageLocations": {
+ "type": "array",
+ "default": [
+ {
+ "language": "css",
+ "locations": [
+ "document"
+ ]
+ },
+ {
+ "language": "html",
+ "locations": [
+ "document"
+ ]
+ },
+ {
+ "language": "json",
+ "locations": [
+ "document"
+ ]
+ },
+ {
+ "language": "less",
+ "locations": [
+ "document"
+ ]
+ },
+ {
+ "language": "scss",
+ "locations": [
+ "document"
+ ]
+ },
+ {
+ "language": "vue",
+ "locations": [
+ "document"
+ ]
+ }
+ ],
+ "items": {
+ "type": "object",
+ "required": [
+ "language",
+ "locations"
+ ],
+ "properties": {
+ "language": {
+ "type": "string",
+ "description": "Specifies the language to which this code lens override applies"
+ },
+ "locations": {
+ "type": "array",
+ "default": [
+ "document",
+ "containers"
+ ],
+ "items": {
+ "type": "string",
+ "enum": [
+ "document",
+ "containers",
+ "blocks",
+ "custom"
+ ]
+ },
+ "minItems": 1,
+ "maxItems": 4,
+ "uniqueItems": true,
+ "description": "Specifies where Git code lens will be shown in the document for the specified language\n `document` - adds code lens at the top of the document\n `containers` - adds code lens at the start of container-like symbols (modules, classes, interfaces, etc)\n `blocks` - adds code lens at the start of block-like symbols (functions, methods, properties, etc) lines\n `custom` - adds code lens at the start of symbols contained in `customSymbols`"
+ },
+ "customSymbols": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true,
+ "description": "Specifies the set of document symbols where Git code lens will be shown in the document for the specified language\nMust be a member of `SymbolKind`"
+ }
+ }
+ },
+ "uniqueItems": true,
+ "description": "Specifies where Git code lens will be shown in the document for the specified languages"
+ },
+ "gitlens.codeLens.debug": {
+ "type": "boolean",
+ "default": false,
+ "description": "Specifies whether or not to show debug information in code lens"
+ },
+ "gitlens.defaultDateFormat": {
+ "type": "string",
+ "default": null,
+ "description": "Specifies how all absolute dates will be formatted by default\nSee https://momentjs.com/docs/#/displaying/format/ for valid formats"
+ },
+ "gitlens.explorer.commitFormat": {
+ "type": "string",
+ "default": "${authorAgo} \u00a0\u2022\u00a0 ${message} \u00a0\u2022\u00a0 ${id}",
+ "description": "Specifies the format of a commit in the explorer view\nAvailable tokens\n ${id} - commit id\n ${author} - commit author\n ${message} - commit message\n ${ago} - relative commit date (e.g. 1 day ago)\n ${date} - formatted commit date (format specified by `gitlens.statusBar.dateFormat`)\n ${authorAgo} - commit author, relative commit date\nSee https://github.com/eamodio/vscode-gitlens/wiki/Advanced-Formatting for advanced formatting"
+ },
+ "gitlens.explorer.commitFileFormat": {
+ "type": "string",
+ "default": "${authorAgo} \u00a0\u2022\u00a0 ${message} \u00a0\u2022\u00a0 ${id}",
+ "description": "Specifies the format of a file commit in the explorer view\nAvailable tokens\n ${id} - commit id\n ${author} - commit author\n ${message} - commit message\n ${ago} - relative commit date (e.g. 1 day ago)\n ${date} - formatted commit date (format specified by `gitlens.statusBar.dateFormat`)\n ${authorAgo} - commit author, relative commit date\nSee https://github.com/eamodio/vscode-gitlens/wiki/Advanced-Formatting for advanced formatting"
+ },
+ "gitlens.explorer.stashFormat": {
+ "type": "string",
+ "default": "${authorAgo} \u00a0\u2022\u00a0 ${message} \u00a0\u2022\u00a0 ${id}",
+ "description": "Specifies the format of a stash in the explorer view\nAvailable tokens\n ${id} - commit id\n ${author} - commit author\n ${message} - commit message\n ${ago} - relative commit date (e.g. 1 day ago)\n ${date} - formatted commit date (format specified by `gitlens.statusBar.dateFormat`)\n ${authorAgo} - commit author, relative commit date\nSee https://github.com/eamodio/vscode-gitlens/wiki/Advanced-Formatting for advanced formatting"
+ },
+ "gitlens.statusBar.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to provide blame information on the status bar"
+ },
+ "gitlens.statusBar.alignment": {
+ "type": "string",
+ "default": "right",
+ "enum": [
+ "left",
+ "right"
+ ],
+ "description": "Specifies the blame alignment in the status bar\n `left` - align to the left\n `right` - align to the right"
+ },
+ "gitlens.statusBar.command": {
+ "type": "string",
+ "default": "gitlens.showQuickCommitDetails",
+ "enum": [
+ "gitlens.toggleFileBlame",
+ "gitlens.showBlameHistory",
+ "gitlens.showFileHistory",
+ "gitlens.diffWithPrevious",
+ "gitlens.diffWithWorking",
+ "gitlens.toggleCodeLens",
+ "gitlens.showQuickCommitDetails",
+ "gitlens.showQuickCommitFileDetails",
+ "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"
+ },
+ "gitlens.statusBar.format": {
+ "type": "string",
+ "default": "${authorAgo}",
+ "description": "Specifies the format of the status bar blame information\nAvailable tokens\n ${id} - commit id\n ${author} - commit author\n ${message} - commit message\n ${ago} - relative commit date (e.g. 1 day ago)\n ${date} - formatted commit date (format specified by `gitlens.statusBar.dateFormat`)\n ${authorAgo} - commit author, relative commit date\nSee https://github.com/eamodio/vscode-gitlens/wiki/Advanced-Formatting for advanced formatting"
+ },
+ "gitlens.statusBar.dateFormat": {
+ "type": "string",
+ "default": null,
+ "description": "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"
+ },
+ "gitlens.strings.codeLens.unsavedChanges.recentChangeAndAuthors": {
+ "type": "string",
+ "default": "Cannot determine recent change or authors (unsaved changes)",
+ "description": "Specifies the string to be shown in place of both the `recent change` and `authors` code lens when there are unsaved changes"
+ },
+ "gitlens.strings.codeLens.unsavedChanges.recentChangeOnly": {
+ "type": "string",
+ "default": "Cannot determine recent change (unsaved changes)",
+ "description": "Specifies the string to be shown in place of the `recent change` code lens when there are unsaved changes"
+ },
+ "gitlens.strings.codeLens.unsavedChanges.authorsOnly": {
+ "type": "string",
+ "default": "Cannot determine authors (unsaved changes)",
+ "description": "Specifies the string to be shown in place of the `authors` code lens when there are unsaved changes"
+ },
+ "gitlens.theme.annotations.file.gutter.separateLines": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not gutter blame annotations will be separated by a small gap"
+ },
+ "gitlens.theme.annotations.file.gutter.dark.backgroundColor": {
+ "type": "string",
+ "default": "rgba(255, 255, 255, 0.075)",
+ "description": "Specifies the dark theme background color of the gutter blame annotations. Must be a valid css color"
+ },
+ "gitlens.theme.annotations.file.gutter.light.backgroundColor": {
+ "type": "string",
+ "default": "rgba(0, 0, 0, 0.05)",
+ "description": "Specifies the light theme background color of the gutter blame annotations. Must be a valid css color"
+ },
+ "gitlens.theme.annotations.file.gutter.dark.foregroundColor": {
+ "type": "string",
+ "default": "rgb(190, 190, 190)",
+ "description": "Specifies the dark theme foreground color of the gutter blame annotations. Must be a valid css color"
+ },
+ "gitlens.theme.annotations.file.gutter.light.foregroundColor": {
+ "type": "string",
+ "default": "rgb(116, 116, 116)",
+ "description": "Specifies the light theme foreground color of the gutter blame annotations. Must be a valid css color"
+ },
+ "gitlens.theme.annotations.file.gutter.dark.uncommittedForegroundColor": {
+ "type": "string",
+ "default": "rgba(0, 188, 242, 0.6)",
+ "description": "Specifies the dark theme foreground color of an uncommitted line in the gutter blame annotations. Must be a valid css color"
+ },
+ "gitlens.theme.annotations.file.gutter.light.uncommittedForegroundColor": {
+ "type": "string",
+ "default": "rgba(0, 188, 242, 0.6)",
+ "description": "Specifies the light theme foreground color of an uncommitted line in the gutter blame annotations. Must be a valid css color"
+ },
+ "gitlens.theme.annotations.file.hover.separateLines": {
+ "type": "boolean",
+ "default": false,
+ "description": "Specifies whether or not hover blame annotations will be separated by a small gap (if heatmap is enabled)"
+ },
+ "gitlens.theme.annotations.line.trailing.dark.backgroundColor": {
+ "type": "string",
+ "default": null,
+ "description": "Specifies the dark theme background color of the trailing blame annotation. Must be a valid css color"
+ },
+ "gitlens.theme.annotations.line.trailing.light.backgroundColor": {
+ "type": "string",
+ "default": null,
+ "description": "Specifies the light theme background color of the trailing blame annotation. Must be a valid css color"
+ },
+ "gitlens.theme.annotations.line.trailing.dark.foregroundColor": {
+ "type": "string",
+ "default": "rgba(153, 153, 153, 0.35)",
+ "description": "Specifies the dark theme foreground color of the trailing blame annotation. Must be a valid css color"
+ },
+ "gitlens.theme.annotations.line.trailing.light.foregroundColor": {
+ "type": "string",
+ "default": "rgba(153, 153, 153, 0.35)",
+ "description": "Specifies the light theme foreground color of the trailing blame annotation. Must be a valid css color"
+ },
+ "gitlens.theme.lineHighlight.dark.backgroundColor": {
+ "type": "string",
+ "default": "rgba(0, 188, 242, 0.2)",
+ "description": "Specifies the dark theme background color of the associated line highlights in blame annotations. Must be a valid css color"
+ },
+ "gitlens.theme.lineHighlight.light.backgroundColor": {
+ "type": "string",
+ "default": "rgba(0, 188, 242, 0.2)",
+ "description": "Specifies the light theme background color of the associated line highlights in blame annotations. Must be a valid css color"
+ },
+ "gitlens.theme.lineHighlight.dark.overviewRulerColor": {
+ "type": "string",
+ "default": "rgba(0, 188, 242, 0.6)",
+ "description": "Specifies the dark theme overview ruler color of the associated line highlights in blame annotations. Must be a valid css color"
+ },
+ "gitlens.theme.lineHighlight.light.overviewRulerColor": {
+ "type": "string",
+ "default": "rgba(0, 188, 242, 0.6)",
+ "description": "Specifies the light theme overview ruler color of the associated line highlights in blame annotations. Must be a valid css color"
+ },
+ "gitlens.advanced.caching.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether git output will be cached"
+ },
+ "gitlens.advanced.caching.maxLines": {
+ "type": "number",
+ "default": 0,
+ "description": "Specifies the threshold for caching larger documents"
+ },
+ "gitlens.advanced.git": {
+ "type": "string",
+ "default": null,
+ "description": "Specifies the git path to use"
+ },
+ "gitlens.advanced.gitignore.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to parse the root .gitignore file for better performance (i.e. avoids blaming excluded files)"
+ },
+ "gitlens.advanced.maxQuickHistory": {
+ "type": "number",
+ "default": 200,
+ "description": "Specifies the maximum number of QuickPick history entries to show"
+ },
+ "gitlens.advanced.menus": {
+ "type": "object",
+ "default": {
+ "editorContext": {
+ "blame": true,
+ "copy": true,
+ "details": true,
+ "fileDiff": true,
+ "history": true,
+ "lineDiff": true,
+ "remote": true
+ },
+ "editorTitle": {
+ "blame": true,
+ "fileDiff": true,
+ "history": true,
+ "remote": true,
+ "status": true
+ },
+ "editorTitleContext": {
+ "blame": true,
+ "fileDiff": true,
+ "history": true,
+ "remote": true
+ },
+ "explorerContext": {
+ "fileDiff": true,
+ "history": true,
+ "remote": true
+ }
+ },
+ "description": "Specifies which commands will be added to which menus",
+ "properties": {
+ "editorContext": {
+ "type": "object",
+ "default": {
+ "blame": true,
+ "copy": true,
+ "details": true,
+ "fileDiff": true,
+ "history": true,
+ "lineDiff": true,
+ "remote": true
+ },
+ "properties": {
+ "blame": {
+ "type": "boolean",
+ "default": true
+ },
+ "copy": {
+ "type": "boolean",
+ "default": true
+ },
+ "details": {
+ "type": "boolean",
+ "default": true
+ },
+ "fileDiff": {
+ "type": "boolean",
+ "default": true
+ },
+ "history": {
+ "type": "boolean",
+ "default": true
+ },
+ "lineDiff": {
+ "type": "boolean",
+ "default": true
+ },
+ "remote": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ },
+ "editorTitle": {
+ "type": "object",
+ "default": {
+ "blame": true,
+ "fileDiff": true,
+ "history": true,
+ "remote": true,
+ "status": true
+ },
+ "properties": {
+ "blame": {
+ "type": "boolean",
+ "default": true
+ },
+ "fileDiff": {
+ "type": "boolean",
+ "default": true
+ },
+ "history": {
+ "type": "boolean",
+ "default": true
+ },
+ "remote": {
+ "type": "boolean",
+ "default": true
+ },
+ "status": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ },
+ "editorTitleContext": {
+ "type": "object",
+ "default": {
+ "blame": true,
+ "fileDiff": true,
+ "history": true,
+ "remote": true
+ },
+ "properties": {
+ "blame": {
+ "type": "boolean",
+ "default": true
+ },
+ "fileDiff": {
+ "type": "boolean",
+ "default": true
+ },
+ "history": {
+ "type": "boolean",
+ "default": true
+ },
+ "remote": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ },
+ "explorerContext": {
+ "type": "object",
+ "default": {
+ "fileDiff": true,
+ "history": true,
+ "remote": true
+ },
+ "properties": {
+ "fileDiff": {
+ "type": "boolean",
+ "default": true
+ },
+ "history": {
+ "type": "boolean",
+ "default": true
+ },
+ "remote": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ }
+ }
+ },
+ "gitlens.advanced.quickPick.closeOnFocusOut": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to close the QuickPick menu when focus is lost"
+ },
+ "gitlens.advanced.telemetry.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to enable GitLens telemetry (even if enabled still abides by the overall `telemetry.enableTelemetry` setting"
+ },
+ "gitlens.advanced.toggleWhitespace.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "Specifies whether or not to toggle whitespace off then showing blame annotations (*may* be required by certain fonts/themes)"
+ }
+ }
+ },
+ "commands": [
+ {
+ "command": "gitlens.diffDirectory",
+ "title": "Directory Compare",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.diffWithBranch",
+ "title": "Compare File with Branch...",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.diffWithNext",
+ "title": "Compare File with Next Commit",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.diffWithPrevious",
+ "title": "Compare File with Previous",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.diffLineWithPrevious",
+ "title": "Compare Line Commit with Previous",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.diffWithRevision",
+ "title": "Compare File with Revision...",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.diffWithWorking",
+ "title": "Compare File with Working Tree",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.diffLineWithWorking",
+ "title": "Compare Line Commit with Working Tree",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showFileBlame",
+ "title": "Show File Blame Annotations",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showLineBlame",
+ "title": "Show Line Blame Annotations",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.toggleFileBlame",
+ "title": "Toggle File Blame Annotations",
+ "category": "GitLens",
+ "icon": {
+ "dark": "images/dark/git-icon.svg",
+ "light": "images/light/git-icon.svg"
+ }
+ },
+ {
+ "command": "gitlens.toggleFileRecentChanges",
+ "title": "Toggle Recent File Changes Annotations",
+ "category": "GitLens",
+ "icon": {
+ "dark": "images/dark/git-icon.svg",
+ "light": "images/light/git-icon.svg"
+ }
+ },
+ {
+ "command": "gitlens.toggleLineBlame",
+ "title": "Toggle Line Blame Annotations",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.toggleCodeLens",
+ "title": "Toggle Git Code Lens",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showBlameHistory",
+ "title": "Open Blame History Explorer",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showCommitSearch",
+ "title": "Search Commits",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showFileHistory",
+ "title": "Show File History in Explorer",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showLastQuickPick",
+ "title": "Show Last Opened Quick Pick",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showQuickCommitDetails",
+ "title": "Show Commit Details",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showQuickCommitFileDetails",
+ "title": "Show Commit File Details",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showQuickFileHistory",
+ "title": "Show File History",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showQuickBranchHistory",
+ "title": "Show Branch History",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showQuickRepoHistory",
+ "title": "Show Current Branch History",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showQuickRepoStatus",
+ "title": "Show Repository Status",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showQuickStashList",
+ "title": "Show Stashed Changes",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.showStashList",
+ "title": "Show Stashed Changes in Explorer",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.copyShaToClipboard",
+ "title": "Copy Commit ID to Clipboard",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.copyMessageToClipboard",
+ "title": "Copy Commit Message to Clipboard",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.closeUnchangedFiles",
+ "title": "Close Unchanged Files",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.openChangedFiles",
+ "title": "Open Changed Files",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.openBranchInRemote",
+ "title": "Open Branch in Remote",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.openCommitInRemote",
+ "title": "Open Commit in Remote",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.openFileInRemote",
+ "title": "Open File in Remote",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.openRepoInRemote",
+ "title": "Open Repository in Remote",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.stashApply",
+ "title": "Apply Stashed Changes",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.stashSave",
+ "title": "Stash Changes",
+ "category": "GitLens"
+ },
+ {
+ "command": "gitlens.resetSuppressedWarnings",
+ "title": "Reset Suppressed Warnings",
+ "category": "GitLens"
+ }
+ ],
+ "menus": {
+ "commandPalette": [
+ {
+ "command": "gitlens.diffDirectory",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.diffWithBranch",
+ "when": "gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.diffWithNext",
+ "when": "gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.diffWithPrevious",
+ "when": "gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.diffLineWithPrevious",
+ "when": "gitlens:isBlameable"
+ },
+ {
+ "command": "gitlens.diffWithRevision",
+ "when": "gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.diffWithWorking",
+ "when": "gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.diffLineWithWorking",
+ "when": "gitlens:isBlameable"
+ },
+ {
+ "command": "gitlens.showFileBlame",
+ "when": "gitlens:isBlameable"
+ },
+ {
+ "command": "gitlens.showLineBlame",
+ "when": "gitlens:isBlameable"
+ },
+ {
+ "command": "gitlens.toggleFileBlame",
+ "when": "gitlens:isBlameable"
+ },
+ {
+ "command": "gitlens.toggleFileRecentChanges",
+ "when": "gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.toggleLineBlame",
+ "when": "gitlens:isBlameable"
+ },
+ {
+ "command": "gitlens.toggleCodeLens",
+ "when": "gitlens:isTracked && gitlens:canToggleCodeLens"
+ },
+ {
+ "command": "gitlens.showBlameHistory",
+ "when": "gitlens:isBlameable"
+ },
+ {
+ "command": "gitlens.showFileHistory",
+ "when": "gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.showLastQuickPick",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.showQuickCommitDetails",
+ "when": "gitlens:isBlameable"
+ },
+ {
+ "command": "gitlens.showQuickCommitFileDetails",
+ "when": "gitlens:isBlameable"
+ },
+ {
+ "command": "gitlens.showQuickFileHistory",
+ "when": "gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.showQuickBranchHistory",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.showQuickRepoHistory",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.showQuickRepoStatus",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.showQuickStashList",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.showStashList",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.copyShaToClipboard",
+ "when": "gitlens:isBlameable"
+ },
+ {
+ "command": "gitlens.copyMessageToClipboard",
+ "when": "gitlens:isBlameable"
+ },
+ {
+ "command": "gitlens.closeUnchangedFiles",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.openChangedFiles",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.openBranchInRemote",
+ "when": "gitlens:hasRemotes"
+ },
+ {
+ "command": "gitlens.openCommitInRemote",
+ "when": "gitlens:isBlameable && gitlens:hasRemotes"
+ },
+ {
+ "command": "gitlens.openFileInRemote",
+ "when": "gitlens:isTracked && gitlens:hasRemotes"
+ },
+ {
+ "command": "gitlens.openRepoInRemote",
+ "when": "gitlens:hasRemotes"
+ },
+ {
+ "command": "gitlens.stashApply",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.stashSave",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.resetSuppressedWarnings",
+ "when": "gitlens:enabled"
+ }
+ ],
+ "editor/context": [
+ {
+ "command": "gitlens.openFileInRemote",
+ "when": "editorTextFocus && gitlens:isTracked && gitlens:hasRemotes && config.gitlens.advanced.menus.editorContext.remote",
+ "group": "navigation@100"
+ },
+ {
+ "command": "gitlens.diffLineWithPrevious",
+ "when": "editorTextFocus && gitlens:isBlameable && config.gitlens.advanced.menus.editorContext.lineDiff",
+ "group": "1_gitlens@1"
+ },
+ {
+ "command": "gitlens.diffLineWithWorking",
+ "when": "editorTextFocus && gitlens:isBlameable && config.gitlens.advanced.menus.editorContext.lineDiff",
+ "group": "1_gitlens@2"
+ },
+ {
+ "command": "gitlens.showQuickCommitFileDetails",
+ "when": "editorTextFocus && gitlens:isBlameable && config.gitlens.advanced.menus.editorContext.details",
+ "group": "1_gitlens@3"
+ },
+ {
+ "command": "gitlens.diffWithPrevious",
+ "when": "editorTextFocus && gitlens:isTracked && config.gitlens.advanced.menus.editorContext.fileDiff",
+ "group": "1_gitlens_1@1"
+ },
+ {
+ "command": "gitlens.diffWithWorking",
+ "when": "editorTextFocus && gitlens:isTracked && config.gitlens.advanced.menus.editorContext.fileDiff",
+ "group": "1_gitlens_1@2"
+ },
+ {
+ "command": "gitlens.showQuickFileHistory",
+ "when": "gitlens:isTracked && config.gitlens.advanced.menus.editorContext.history",
+ "group": "3_gitlens@1"
+ },
+ {
+ "command": "gitlens.toggleFileBlame",
+ "when": "editorTextFocus && gitlens:isBlameable && config.gitlens.advanced.menus.editorContext.blame",
+ "group": "3_gitlens@2"
+ },
+ {
+ "command": "gitlens.copyShaToClipboard",
+ "when": "editorTextFocus && gitlens:isBlameable && config.gitlens.advanced.menus.editorContext.copy",
+ "group": "9_gitlens@1"
+ },
+ {
+ "command": "gitlens.copyMessageToClipboard",
+ "when": "editorTextFocus && gitlens:isBlameable && config.gitlens.advanced.menus.editorContext.copy",
+ "group": "9_gitlens@2"
+ }
+ ],
+ "editor/title": [
+ {
+ "command": "gitlens.toggleFileBlame",
+ "alt": "gitlens.toggleFileRecentChanges",
+ "when": "gitlens:isBlameable && config.gitlens.advanced.menus.editorTitle.blame",
+ "group": "navigation@100"
+ },
+ {
+ "command": "gitlens.openFileInRemote",
+ "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.remote",
+ "group": "1_gitlens"
+ },
+ {
+ "command": "gitlens.openRepoInRemote",
+ "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.remote",
+ "group": "1_gitlens"
+ },
+ {
+ "command": "gitlens.diffWithPrevious",
+ "when": "editorTextFocus && gitlens:isTracked && config.gitlens.advanced.menus.editorTitle.fileDiff",
+ "group": "2_gitlens"
+ },
+ {
+ "command": "gitlens.diffWithWorking",
+ "when": "editorTextFocus && gitlens:isTracked && config.gitlens.advanced.menus.editorTitle.fileDiff",
+ "group": "2_gitlens"
+ },
+ {
+ "command": "gitlens.showQuickFileHistory",
+ "when": "editorFocus && gitlens:isTracked && config.gitlens.advanced.menus.editorTitle.history",
+ "group": "2_gitlens_1"
+ },
+ {
+ "command": "gitlens.showQuickRepoHistory",
+ "when": "!editorFocus && gitlens:enabled && config.gitlens.advanced.menus.editorTitle.history",
+ "group": "2_gitlens_1"
+ },
+ {
+ "command": "gitlens.showQuickRepoStatus",
+ "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitle.status",
+ "group": "2_gitlens_1"
+ }
+ ],
+ "editor/title/context": [
+ {
+ "command": "gitlens.openFileInRemote",
+ "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.remote",
+ "group": "1_gitlens"
+ },
+ {
+ "command": "gitlens.diffWithPrevious",
+ "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.fileDiff",
+ "group": "1_gitlens_1@1"
+ },
+ {
+ "command": "gitlens.diffWithWorking",
+ "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.fileDiff",
+ "group": "1_gitlens_1@2"
+ },
+ {
+ "command": "gitlens.showQuickFileHistory",
+ "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.history",
+ "group": "1_gitlens_2@1"
+ },
+ {
+ "command": "gitlens.toggleFileBlame",
+ "when": "gitlens:enabled && config.gitlens.advanced.menus.editorTitleContext.blame",
+ "group": "1_gitlens_2@2"
+ }
+ ],
+ "explorer/context": [
+ {
+ "command": "gitlens.openFileInRemote",
+ "when": "gitlens:enabled && config.gitlens.advanced.menus.explorerContext.remote",
+ "group": "navigation@100"
+ },
+ {
+ "command": "gitlens.diffWithPrevious",
+ "when": "gitlens:enabled && config.gitlens.advanced.menus.explorerContext.fileDiff",
+ "group": "1_gitlens@1"
+ },
+ {
+ "command": "gitlens.diffWithWorking",
+ "when": "gitlens:enabled && config.gitlens.advanced.menus.explorerContext.fileDiff",
+ "group": "1_gitlens@2"
+ },
+ {
+ "command": "gitlens.showQuickFileHistory",
+ "when": "gitlens:enabled && config.gitlens.advanced.menus.explorerContext.history",
+ "group": "1_gitlens_1@1"
+ }
+ ],
+ "scm/resourceGroup/context": [
+ {
+ "command": "gitlens.openChangedFiles",
+ "when": "gitlens:enabled",
+ "group": "1_gitlens@1"
+ },
+ {
+ "command": "gitlens.closeUnchangedFiles",
+ "when": "gitlens:enabled",
+ "group": "1_gitlens@2"
+ }
+ ],
+ "scm/resourceState/context": [
+ {
+ "command": "gitlens.openFileInRemote",
+ "when": "gitlens:enabled && gitlens:hasRemotes",
+ "group": "navigation"
+ },
+ {
+ "command": "gitlens.diffWithRevision",
+ "when": "gitlens:enabled",
+ "group": "1_gitlens@1"
+ },
+ {
+ "command": "gitlens.showQuickFileHistory",
+ "when": "gitlens:enabled",
+ "group": "1_gitlens_1@1"
+ }
+ ],
+ "view/title": [
+ {
+ "command": "gitlens.showQuickRepoHistory",
+ "when": "gitlens:enabled && view == gitlens-explorer",
+ "group": "1_gitlens@1"
+ }
+ ],
+ "view/item/context": [
+ {
+ "command": "gitlens.openCommitInRemote",
+ "when": "gitlens:enabled && view == gitlens-explorer && viewItem == commit",
+ "group": "1_gitlens@1"
+ },
+ {
+ "command": "gitlens.openFileInRemote",
+ "when": "gitlens:enabled && view == gitlens-explorer && viewItem == commit-file",
+ "group": "1_gitlens@2"
+ },
+ {
+ "command": "gitlens.diffWithPrevious",
+ "when": "gitlens:enabled && view == gitlens-explorer && viewItem == commit-file",
+ "group": "2_gitlens@1"
+ },
+ {
+ "command": "gitlens.diffWithWorking",
+ "when": "gitlens:enabled && view == gitlens-explorer && viewItem == commit-file",
+ "group": "2_gitlens@2"
+ }
+ ]
+ },
+ "keybindings": [
+ {
+ "command": "gitlens.key.left",
+ "key": "alt+left",
+ "when": "gitlens:key:left"
+ },
+ {
+ "command": "gitlens.key.right",
+ "key": "alt+right",
+ "when": "gitlens:key:right"
+ },
+ {
+ "command": "gitlens.key.,",
+ "key": "alt+,",
+ "when": "gitlens:key:,"
+ },
+ {
+ "command": "gitlens.key..",
+ "key": "alt+.",
+ "when": "gitlens:key:."
+ },
+ {
+ "command": "gitlens.key.escape",
+ "key": "escape",
+ "when": "gitlens:key:escape"
+ },
+ {
+ "command": "gitlens.toggleFileBlame",
+ "key": "alt+b",
+ "when": "editorTextFocus && gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.toggleCodeLens",
+ "key": "shift+alt+b",
+ "when": "editorTextFocus && gitlens:isTracked && gitlens:canToggleCodeLens"
+ },
+ {
+ "command": "gitlens.showLastQuickPick",
+ "key": "alt+-",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.showCommitSearch",
+ "key": "alt+/",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.showQuickFileHistory",
+ "key": "alt+h",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.showQuickRepoHistory",
+ "key": "shift+alt+h",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.showQuickRepoStatus",
+ "key": "alt+s",
+ "when": "gitlens:enabled"
+ },
+ {
+ "command": "gitlens.showQuickCommitFileDetails",
+ "key": "alt+c",
+ "when": "editorTextFocus && gitlens:enabled"
+ },
+ {
+ "command": "gitlens.diffWithNext",
+ "key": "alt+.",
+ "when": "editorTextFocus && gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.diffLineWithPrevious",
+ "key": "shift+alt+,",
+ "when": "editorTextFocus && gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.diffWithPrevious",
+ "key": "alt+,",
+ "when": "editorTextFocus && gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.diffLineWithWorking",
+ "key": "alt+w",
+ "when": "editorTextFocus && gitlens:isTracked"
+ },
+ {
+ "command": "gitlens.diffWithWorking",
+ "key": "shift+alt+w",
+ "when": "editorTextFocus && gitlens:isTracked"
+ }
+ ],
+ "views": {
+ "explorer": [
+ {
+ "id": "gitlens-explorer",
+ "name": "GitLens Explorer"
+ }
+ ]
+ }
+ },
+ "activationEvents": [
+ "*"
+ ],
+ "scripts": {
+ "clean": "git clean -xdf",
+ "compile": "tslint --project tslint.json && tsc -p ./",
+ "watch": "tsc -watch -p ./",
+ "lint": "tslint --project tslint.json",
+ "pack": "git clean -xdf && vsce package",
+ "postinstall": "node ./node_modules/vscode/bin/install",
+ "pub": "git clean -xdf && vsce publish",
+ "reset": "git clean -xdf && npm install",
+ "vscode:prepublish": "npm install --no-save && npm run compile"
+ },
+ "dependencies": {
+ "applicationinsights": "0.21.0",
+ "copy-paste": "1.3.0",
+ "iconv-lite": "0.4.18",
+ "ignore": "3.3.3",
+ "lodash.debounce": "4.0.8",
+ "lodash.escaperegexp": "4.1.2",
+ "lodash.isequal": "4.5.0",
+ "lodash.once": "4.1.1",
+ "moment": "2.18.1",
+ "spawn-rx": "2.0.11",
+ "tmp": "0.0.31"
+ },
+ "devDependencies": {
+ "@types/copy-paste": "1.1.30",
+ "@types/iconv-lite": "0.0.1",
+ "@types/mocha": "2.2.41",
+ "@types/node": "8.0.7",
+ "@types/tmp": "0.0.33",
+ "mocha": "3.4.2",
+ "tslint": "5.4.3",
+ "typescript": "2.4.1",
+ "vscode": "1.1.1"
+ }
+}
diff --git a/src/commands.ts b/src/commands.ts
index b46c171..90a2cbf 100644
--- a/src/commands.ts
+++ b/src/commands.ts
@@ -32,6 +32,7 @@ export * from './commands/showQuickCurrentBranchHistory';
export * from './commands/showQuickFileHistory';
export * from './commands/showQuickRepoStatus';
export * from './commands/showQuickStashList';
+export * from './commands/showStashList';
export * from './commands/stashApply';
export * from './commands/stashDelete';
export * from './commands/stashSave';
diff --git a/src/commands/common.ts b/src/commands/common.ts
index 7970052..391ce6d 100644
--- a/src/commands/common.ts
+++ b/src/commands/common.ts
@@ -1,5 +1,6 @@
'use strict';
import { commands, Disposable, SourceControlResourceGroup, SourceControlResourceState, TextDocumentShowOptions, TextEditor, TextEditorEdit, Uri, window, workspace } from 'vscode';
+import { ExplorerNode } from '../views/gitExplorerNodes';
import { Logger } from '../logger';
import { Telemetry } from '../telemetry';
@@ -34,6 +35,7 @@ export type Commands = 'gitlens.closeUnchangedFiles' |
'gitlens.showQuickRepoHistory' |
'gitlens.showQuickRepoStatus' |
'gitlens.showQuickStashList' |
+ 'gitlens.showStashList' |
'gitlens.stashApply' |
'gitlens.stashDelete' |
'gitlens.stashSave' |
@@ -73,6 +75,7 @@ export const Commands = {
ShowQuickCurrentBranchHistory: 'gitlens.showQuickRepoHistory' as Commands,
ShowQuickRepoStatus: 'gitlens.showQuickRepoStatus' as Commands,
ShowQuickStashList: 'gitlens.showQuickStashList' as Commands,
+ ShowStashList: 'gitlens.showStashList' as Commands,
StashApply: 'gitlens.stashApply' as Commands,
StashDelete: 'gitlens.stashDelete' as Commands,
StashSave: 'gitlens.stashSave' as Commands,
@@ -116,7 +119,12 @@ export interface CommandUriContext extends CommandBaseContext {
type: 'uri';
}
-export type CommandContext = CommandScmGroupsContext | CommandScmStatesContext | CommandUnknownContext | CommandUriContext;
+export interface CommandViewContext extends CommandBaseContext {
+ type: 'view';
+ node: ExplorerNode;
+}
+
+export type CommandContext = CommandScmGroupsContext | CommandScmStatesContext | CommandUnknownContext | CommandUriContext | CommandViewContext;
function isScmResourceGroup(group: any): group is SourceControlResourceGroup {
if (group === undefined) return false;
@@ -180,6 +188,11 @@ export abstract class Command extends Disposable {
return [{ type: 'uri', editor: editor, uri: uri }, rest];
}
+ if (firstArg instanceof ExplorerNode) {
+ const [node, ...rest] = args as [ExplorerNode, any];
+ return [{ type: 'view', node: node, uri: node.uri }, rest];
+ }
+
if (isScmResourceState(firstArg)) {
const states = [];
let count = 0;
diff --git a/src/commands/openCommitInRemote.ts b/src/commands/openCommitInRemote.ts
index 17a600e..d99d7fe 100644
--- a/src/commands/openCommitInRemote.ts
+++ b/src/commands/openCommitInRemote.ts
@@ -1,11 +1,16 @@
'use strict';
import { Arrays } from '../system';
import { commands, TextEditor, Uri, window } from 'vscode';
-import { ActiveEditorCommand, Commands, getCommandUri } from './common';
+import { ActiveEditorCommand, CommandContext, Commands, getCommandUri } from './common';
import { GitBlameCommit, GitService, GitUri } from '../gitService';
import { Logger } from '../logger';
import { Messages } from '../messages';
import { OpenInRemoteCommandArgs } from './openInRemote';
+import { CommitNode } from '../views/gitExplorer';
+
+export interface OpenCommitInRemoteCommandArgs {
+ sha?: string;
+}
export class OpenCommitInRemoteCommand extends ActiveEditorCommand {
@@ -13,7 +18,17 @@ export class OpenCommitInRemoteCommand extends ActiveEditorCommand {
super(Commands.OpenCommitInRemote);
}
- async execute(editor?: TextEditor, uri?: Uri) {
+ protected async preExecute(context: CommandContext, args: OpenCommitInRemoteCommandArgs = {}): Promise {
+ if (context.type === 'view' && context.node instanceof CommitNode) {
+ args = { ...args };
+ args.sha = context.node.commit.sha;
+ return this.execute(context.editor, context.node.commit.uri, args);
+ }
+
+ return this.execute(context.editor, context.uri, args);
+ }
+
+ async execute(editor?: TextEditor, uri?: Uri, args: OpenCommitInRemoteCommandArgs = {}) {
uri = getCommandUri(uri, editor);
if (uri === undefined) return undefined;
if (editor !== undefined && editor.document !== undefined && editor.document.isDirty) return undefined;
@@ -21,26 +36,29 @@ export class OpenCommitInRemoteCommand extends ActiveEditorCommand {
const gitUri = await GitUri.fromUri(uri, this.git);
if (!gitUri.repoPath) return undefined;
- const line = editor === undefined ? gitUri.offset : editor.selection.active.line;
-
try {
- const blameline = line - gitUri.offset;
- if (blameline < 0) return undefined;
+ if (args.sha === undefined) {
+ const line = editor === undefined ? gitUri.offset : editor.selection.active.line;
+ const blameline = line - gitUri.offset;
+ if (blameline < 0) return undefined;
- const blame = await this.git.getBlameForLine(gitUri, blameline);
- if (blame === undefined) return Messages.showFileNotUnderSourceControlWarningMessage('Unable to open commit in remote provider');
+ const blame = await this.git.getBlameForLine(gitUri, blameline);
+ if (blame === undefined) return Messages.showFileNotUnderSourceControlWarningMessage('Unable to open commit in remote provider');
- let commit = blame.commit;
- // If the line is uncommitted, find the previous commit
- if (commit.isUncommitted) {
- commit = new GitBlameCommit(commit.repoPath, commit.previousSha!, commit.previousFileName!, commit.author, commit.date, commit.message, []);
+ let commit = blame.commit;
+ // If the line is uncommitted, find the previous commit
+ if (commit.isUncommitted) {
+ commit = new GitBlameCommit(commit.repoPath, commit.previousSha!, commit.previousFileName!, commit.author, commit.date, commit.message, []);
+ }
+
+ args.sha = commit.sha;
}
const remotes = Arrays.uniqueBy(await this.git.getRemotes(gitUri.repoPath), _ => _.url, _ => !!_.provider);
return commands.executeCommand(Commands.OpenInRemote, uri, {
resource: {
type: 'commit',
- sha: commit.sha
+ sha: args.sha
},
remotes
} as OpenInRemoteCommandArgs);
diff --git a/src/commands/showFileHistory.ts b/src/commands/showFileHistory.ts
index eeee559..19df42b 100644
--- a/src/commands/showFileHistory.ts
+++ b/src/commands/showFileHistory.ts
@@ -2,6 +2,7 @@
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';
@@ -14,7 +15,7 @@ export interface ShowFileHistoryCommandArgs {
export class ShowFileHistoryCommand extends EditorCommand {
- constructor(private git: GitService) {
+ constructor(private git: GitService, private explorer?: GitExplorer) {
super(Commands.ShowFileHistory);
}
@@ -32,6 +33,11 @@ export class ShowFileHistoryCommand extends EditorCommand {
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');
diff --git a/src/commands/showStashList.ts b/src/commands/showStashList.ts
new file mode 100644
index 0000000..a46f177
--- /dev/null
+++ b/src/commands/showStashList.ts
@@ -0,0 +1,30 @@
+'use strict';
+import { TextEditor, TextEditorEdit, Uri, window } from 'vscode';
+import { Commands, EditorCommand, getCommandUri } from './common';
+import { GitExplorer } from '../views/gitExplorer';
+import { GitService, GitUri } from '../gitService';
+import { Messages } from '../messages';
+import { Logger } from '../logger';
+
+export class ShowStashListCommand extends EditorCommand {
+
+ constructor(private git: GitService, private explorer: GitExplorer) {
+ super(Commands.ShowStashList);
+ }
+
+ async execute(editor: TextEditor, edit: TextEditorEdit, uri?: Uri) {
+ uri = getCommandUri(uri, editor);
+
+ try {
+ const repoPath = await this.git.getRepoPathFromUri(uri);
+ if (!repoPath) return Messages.showNoRepositoryWarningMessage(`Unable to show stashed changes`);
+
+ this.explorer.addStash(new GitUri(uri, { repoPath: repoPath, fileName: uri!.fsPath }));
+ return undefined;
+ }
+ catch (ex) {
+ Logger.error(ex, 'ShowStashListCommand');
+ return window.showErrorMessage(`Unable to show stash list. See output channel for more details`);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/configuration.ts b/src/configuration.ts
index fe7acc9..650c27b 100644
--- a/src/configuration.ts
+++ b/src/configuration.ts
@@ -303,6 +303,13 @@ export interface IConfig {
defaultDateFormat: string | null;
+ explorer: {
+ commitFormat: string;
+ commitFileFormat: string;
+ stashFormat: string;
+ // dateFormat: string | null;
+ };
+
statusBar: {
enabled: boolean;
alignment: 'left' | 'right';
diff --git a/src/extension.ts b/src/extension.ts
index b8817da..8eedece 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -12,13 +12,14 @@ 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 { ShowQuickRepoStatusCommand, ShowQuickStashListCommand, ShowStashListCommand } from './commands';
import { StashApplyCommand, StashDeleteCommand, StashSaveCommand } from './commands';
import { ToggleCodeLensCommand } from './commands';
import { CodeLensLocations, IConfig, LineHighlightLocations } from './configuration';
import { ApplicationInsightsKey, CommandContext, ExtensionKey, QualifiedExtensionId, setCommandContext, WorkspaceState } from './constants';
import { CurrentLineController, LineAnnotationType } from './currentLineController';
import { GitContentProvider } from './gitContentProvider';
+import { GitExplorer } from './views/gitExplorer';
import { GitRevisionCodeLensProvider } from './gitRevisionCodeLensProvider';
import { GitContextTracker, GitService } from './gitService';
import { Keyboard } from './keyboard';
@@ -87,6 +88,12 @@ export async function activate(context: ExtensionContext) {
context.subscriptions.push(new Keyboard());
+ let explorer: GitExplorer | undefined = undefined;
+ if (cfg.insiders) {
+ explorer = new GitExplorer(context, git);
+ context.subscriptions.push(window.registerTreeDataProvider('gitlens-explorer', explorer));
+ }
+
context.subscriptions.push(new CloseUnchangedFilesCommand(git));
context.subscriptions.push(new OpenChangedFilesCommand(git));
context.subscriptions.push(new CopyMessageToClipboardCommand(git));
@@ -111,7 +118,7 @@ export async function activate(context: ExtensionContext) {
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 ShowFileHistoryCommand(git, explorer));
context.subscriptions.push(new ShowLastQuickPickCommand());
context.subscriptions.push(new ShowQuickBranchHistoryCommand(git));
context.subscriptions.push(new ShowQuickCurrentBranchHistoryCommand(git));
@@ -121,6 +128,9 @@ export async function activate(context: ExtensionContext) {
context.subscriptions.push(new ShowQuickFileHistoryCommand(git));
context.subscriptions.push(new ShowQuickRepoStatusCommand(git));
context.subscriptions.push(new ShowQuickStashListCommand(git));
+ if (cfg.insiders) {
+ context.subscriptions.push(new ShowStashListCommand(git, explorer!));
+ }
context.subscriptions.push(new StashApplyCommand(git));
context.subscriptions.push(new StashDeleteCommand(git));
context.subscriptions.push(new StashSaveCommand(git));
diff --git a/src/views/commitFileNode.ts b/src/views/commitFileNode.ts
new file mode 100644
index 0000000..1eead62
--- /dev/null
+++ b/src/views/commitFileNode.ts
@@ -0,0 +1,41 @@
+'use strict';
+import { Command, ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode';
+import { Commands, DiffWithPreviousCommandArgs } from '../commands';
+import { ExplorerNode, ResourceType } from './explorerNode';
+import { GitCommit, GitService, GitUri, IGitStatusFile } from '../gitService';
+
+export class CommitFileNode extends ExplorerNode {
+
+ readonly resourceType: ResourceType = 'commit-file';
+ command: Command;
+
+ constructor(public status: IGitStatusFile, public commit: GitCommit, uri: GitUri, context: ExtensionContext, git: GitService) {
+ super(uri, context, git);
+
+ this.command = {
+ title: 'Compare File with Previous',
+ command: Commands.DiffWithPrevious,
+ arguments: [
+ GitUri.fromFileStatus(this.status, this.commit.repoPath),
+ {
+ commit: commit,
+ showOptions: {
+ preserveFocus: true,
+ preview: true
+ }
+ } as DiffWithPreviousCommandArgs
+ ]
+ };
+ }
+
+ getChildren(): Promise {
+ return Promise.resolve([]);
+ }
+
+ getTreeItem(): TreeItem {
+ const item = new TreeItem(`${GitUri.getFormattedPath(this.status.fileName)}`, TreeItemCollapsibleState.None);
+ item.contextValue = this.resourceType;
+ item.command = this.command;
+ return item;
+ }
+}
\ No newline at end of file
diff --git a/src/views/commitNode.ts b/src/views/commitNode.ts
new file mode 100644
index 0000000..ed17d32
--- /dev/null
+++ b/src/views/commitNode.ts
@@ -0,0 +1,54 @@
+'use strict';
+import { Iterables } from '../system';
+import { Command, ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode';
+import { CommitFileNode } from './commitFileNode';
+import { ExplorerNode, ResourceType } from './explorerNode';
+import { CommitFormatter, GitCommit, GitService, GitUri } from '../gitService';
+
+export class CommitNode extends ExplorerNode {
+
+ readonly resourceType: ResourceType = 'commit';
+ command: Command;
+
+ constructor(public commit: GitCommit, uri: GitUri, context: ExtensionContext, git: GitService) {
+ super(uri, context, git);
+
+ // this.command = {
+ // title: 'Compare File with Previous',
+ // command: Commands.DiffWithPrevious,
+ // arguments: [
+ // Uri.file(commit.uri.fsPath),
+ // {
+ // commit: commit,
+ // showOptions: {
+ // preserveFocus: true,
+ // preview: true
+ // }
+ // } as DiffWithPreviousCommandArgs
+ // ]
+ // };
+ }
+
+ async getChildren(): Promise {
+ const log = await this.git.getLogForRepo(this.commit.repoPath, this.commit.sha, 1);
+ if (log === undefined) return [];
+
+ const commit = Iterables.first(log.commits.values());
+ if (commit === undefined) return [];
+
+ return [...Iterables.map(commit.fileStatuses, s => new CommitFileNode(s, commit, this.uri, this.context, this.git))];
+ }
+
+ getTreeItem(): TreeItem {
+ const label = CommitFormatter.fromTemplate(this.git.config.explorer.commitFormat, this.commit, this.git.config.defaultDateFormat);
+
+ const item = new TreeItem(label, TreeItemCollapsibleState.Collapsed);
+ item.contextValue = this.resourceType;
+ item.iconPath = {
+ dark: this.context.asAbsolutePath('images/dark/icon-commit.svg'),
+ light: this.context.asAbsolutePath('images/light/icon-commit.svg')
+ };
+ item.command = this.command;
+ return item;
+ }
+}
\ No newline at end of file
diff --git a/src/views/explorerNode.ts b/src/views/explorerNode.ts
new file mode 100644
index 0000000..e2f1230
--- /dev/null
+++ b/src/views/explorerNode.ts
@@ -0,0 +1,15 @@
+'use strict';
+import { ExtensionContext, TreeItem } from 'vscode';
+import { GitService, GitUri } from '../gitService';
+
+export declare type ResourceType = 'status' | 'branches' | 'repository' | 'branch-history' | 'file-history' | 'stash-history' | 'commit' | 'stash-commit' | 'commit-file';
+
+export abstract class ExplorerNode {
+
+ abstract readonly resourceType: ResourceType;
+
+ constructor(public uri: GitUri, protected context: ExtensionContext, protected git: GitService) { }
+
+ abstract getChildren(): ExplorerNode[] | Promise;
+ abstract getTreeItem(): TreeItem | Promise;
+}
\ No newline at end of file
diff --git a/src/views/fileHistoryNode.ts b/src/views/fileHistoryNode.ts
new file mode 100644
index 0000000..a45a03c
--- /dev/null
+++ b/src/views/fileHistoryNode.ts
@@ -0,0 +1,29 @@
+'use strict';
+import { Iterables } from '../system';
+import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode';
+import { CommitNode } from './commitNode';
+import { ExplorerNode, ResourceType } from './explorerNode';
+import { GitService, GitUri } from '../gitService';
+
+export class FileHistoryNode extends ExplorerNode {
+
+ static readonly rootType: ResourceType = 'file-history';
+ readonly resourceType: ResourceType = 'file-history';
+
+ constructor(uri: GitUri, context: ExtensionContext, git: GitService) {
+ super(uri, context, git);
+ }
+
+ async getChildren(): Promise {
+ const log = await this.git.getLogForFile(this.uri.repoPath, this.uri.fsPath, this.uri.sha);
+ if (log === undefined) return [];
+
+ return [...Iterables.map(log.commits.values(), c => new CommitNode(c, this.uri, this.context, this.git))];
+ }
+
+ getTreeItem(): TreeItem {
+ const item = new TreeItem(`History of ${this.uri.getFormattedPath()}`, TreeItemCollapsibleState.Expanded);
+ item.contextValue = this.resourceType;
+ return item;
+ }
+}
\ No newline at end of file
diff --git a/src/views/gitExplorer.ts b/src/views/gitExplorer.ts
new file mode 100644
index 0000000..fbd0220
--- /dev/null
+++ b/src/views/gitExplorer.ts
@@ -0,0 +1,62 @@
+'use strict';
+import { Event, EventEmitter, ExtensionContext, TreeDataProvider, TreeItem, Uri, window } from 'vscode';
+import { UriComparer } from '../comparers';
+import { ExplorerNode, FileHistoryNode, RepositoryNode, ResourceType, StashNode } from './gitExplorerNodes';
+import { GitService, GitUri } from '../gitService';
+
+export * from './gitExplorerNodes';
+
+export class GitExplorer implements TreeDataProvider {
+
+ private _onDidChangeTreeData = new EventEmitter();
+ public get onDidChangeTreeData(): Event {
+ return this._onDidChangeTreeData.event;
+ }
+
+ private _roots: ExplorerNode[] = [];
+
+ constructor(private context: ExtensionContext, private git: GitService) {
+ const editor = window.activeTextEditor;
+
+ const uri = (editor !== undefined && editor.document !== undefined)
+ ? new GitUri(editor.document.uri, { repoPath: git.repoPath, fileName: editor.document.uri.fsPath })
+ : new GitUri(Uri.file(git.repoPath), { repoPath: git.repoPath, fileName: git.repoPath });
+
+ this._roots.push(new RepositoryNode(uri, context, git));
+ }
+
+ async getTreeItem(node: ExplorerNode): Promise {
+ return node.getTreeItem();
+ }
+
+ async getChildren(node?: ExplorerNode): Promise {
+ if (this._roots.length === 0) return [];
+ if (node === undefined) return this._roots;
+
+ return node.getChildren();
+ }
+
+ addHistory(uri: GitUri) {
+ this._add(uri, FileHistoryNode);
+ }
+
+ addStash(uri: GitUri) {
+ this._add(uri, StashNode);
+ }
+
+ private _add(uri: GitUri, type: { new (uri: GitUri, context: ExtensionContext, git: GitService): T, rootType: ResourceType }) {
+ if (!this._roots.some(_ => _.resourceType === type.rootType && UriComparer.equals(uri, _.uri))) {
+ this._roots.push(new type(uri, this.context, this.git));
+ }
+ this._onDidChangeTreeData.fire();
+ }
+
+ clear() {
+ this._roots = [];
+ this._onDidChangeTreeData.fire();
+ }
+
+ refresh() {
+ this._onDidChangeTreeData.fire();
+ }
+}
\ No newline at end of file
diff --git a/src/views/gitExplorerNodes.ts b/src/views/gitExplorerNodes.ts
new file mode 100644
index 0000000..49a3806
--- /dev/null
+++ b/src/views/gitExplorerNodes.ts
@@ -0,0 +1,9 @@
+'use strict';
+
+export * from './explorerNode';
+export * from './commitFileNode';
+export * from './commitNode';
+export * from './fileHistoryNode';
+export * from './repositoryNode';
+export * from './stashCommitNode';
+export * from './stashNode';
\ No newline at end of file
diff --git a/src/views/repositoryNode.ts b/src/views/repositoryNode.ts
new file mode 100644
index 0000000..c5655ba
--- /dev/null
+++ b/src/views/repositoryNode.ts
@@ -0,0 +1,105 @@
+'use strict';
+import { Iterables, Strings } from '../system';
+import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode';
+import { CommitNode } from './commitNode';
+import { GlyphChars } from '../constants';
+import { ExplorerNode, ResourceType } from './explorerNode';
+import { GitBranch, GitService, GitUri } from '../gitService';
+import { StashNode } from './stashNode';
+
+export class RepositoryNode extends ExplorerNode {
+
+ static readonly rootType: ResourceType = 'repository';
+ readonly resourceType: ResourceType = 'repository';
+
+ constructor(uri: GitUri, context: ExtensionContext, git: GitService) {
+ super(uri, context, git);
+ }
+
+ async getChildren(): Promise {
+ return [
+ new StatusNode(this.uri, this.context, this.git),
+ new StashNode(this.uri, this.context, this.git),
+ new BranchesNode(this.uri, this.context, this.git)
+ ];
+ }
+
+ getTreeItem(): TreeItem {
+ const item = new TreeItem(`Repository ${GlyphChars.Dash} ${this.uri.repoPath}`, TreeItemCollapsibleState.Expanded);
+ item.contextValue = this.resourceType;
+ return item;
+ }
+}
+
+export class BranchesNode extends ExplorerNode {
+
+ readonly resourceType: ResourceType = 'branches';
+
+ constructor(uri: GitUri, context: ExtensionContext, git: GitService) {
+ super(uri, context, git);
+ }
+
+ async getChildren(): Promise {
+ const branches = await this.git.getBranches(this.uri.repoPath!);
+ if (branches === undefined) return [];
+
+ return [...Iterables.filterMap(branches.sort(_ => _.current ? 0 : 1), b => b.remote ? undefined : new BranchHistoryNode(b, this.uri, this.context, this.git))];
+ }
+
+ getTreeItem(): TreeItem {
+ const item = new TreeItem(`Branches`, TreeItemCollapsibleState.Collapsed);
+ item.contextValue = this.resourceType;
+ return item;
+ }
+}
+
+export class BranchHistoryNode extends ExplorerNode {
+
+ readonly resourceType: ResourceType = 'branch-history';
+
+ constructor(public branch: GitBranch, uri: GitUri, context: ExtensionContext, git: GitService) {
+ super(uri, context, git);
+ }
+
+ async getChildren(): Promise {
+ const log = await this.git.getLogForRepo(this.uri.repoPath!, this.branch.name);
+ if (log === undefined) return [];
+
+ return [...Iterables.map(log.commits.values(), c => new CommitNode(c, this.uri, this.context, this.git))];
+ }
+
+ getTreeItem(): TreeItem {
+ const item = new TreeItem(`${this.branch.name}${this.branch.current ? ` ${GlyphChars.Dash} current` : ''}`, TreeItemCollapsibleState.Collapsed);
+ item.contextValue = this.resourceType;
+ return item;
+ }
+}
+
+export class StatusNode extends ExplorerNode {
+
+ readonly resourceType: ResourceType = 'status';
+
+ constructor(uri: GitUri, context: ExtensionContext, git: GitService) {
+ super(uri, context, git);
+ }
+
+ async getChildren(): Promise {
+ return [];
+ // const status = await this.git.getStatusForRepo(this.uri.repoPath!);
+ // if (status === undefined) return [];
+
+ // return [...Iterables.map(status.files, b => new CommitFile(b, this.uri, this.context, this.git))];
+ }
+
+ async getTreeItem(): Promise {
+ const status = await this.git.getStatusForRepo(this.uri.repoPath!);
+ let suffix = '';
+ if (status !== undefined) {
+ suffix = ` ${GlyphChars.Dash} ${GlyphChars.ArrowUp} ${status.state.ahead} ${GlyphChars.ArrowDown} ${status.state.behind} ${Strings.pad(GlyphChars.Dot, 1, 1)} ${status.branch} ${GlyphChars.ArrowLeftRight} ${status.upstream}`;
+ }
+
+ const item = new TreeItem(`Status${suffix}`, TreeItemCollapsibleState.Collapsed);
+ item.contextValue = this.resourceType;
+ return item;
+ }
+}
diff --git a/src/views/stashCommitNode.ts b/src/views/stashCommitNode.ts
new file mode 100644
index 0000000..89b19f9
--- /dev/null
+++ b/src/views/stashCommitNode.ts
@@ -0,0 +1,40 @@
+'use strict';
+import { Command, ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode';
+import { CommitFileNode } from './commitFileNode';
+import { ExplorerNode, ResourceType } from './explorerNode';
+import { CommitFormatter, GitService, GitStashCommit, GitUri } from '../gitService';
+
+export class StashCommitNode extends ExplorerNode {
+
+ readonly resourceType: ResourceType = 'stash-commit';
+ command: Command;
+
+ constructor(public commit: GitStashCommit, uri: GitUri, context: ExtensionContext, git: GitService) {
+ super(uri, context, git);
+
+ // this.command = {
+ // title: 'Show Stash Details',
+ // command: Commands.ShowQuickCommitDetails,
+ // arguments: [
+ // new GitUri(commit.uri, commit),
+ // {
+ // commit: commit,
+ // sha: commit.sha
+ // } as ShowQuickCommitDetailsCommandArgs
+ // ]
+ // };
+ }
+
+ getChildren(): Promise {
+ return Promise.resolve((this.commit as GitStashCommit).fileStatuses.map(_ => new CommitFileNode(_, this.commit, this.uri, this.context, this.git)));
+ }
+
+ getTreeItem(): TreeItem {
+ const label = CommitFormatter.fromTemplate(this.git.config.explorer.stashFormat, this.commit, this.git.config.defaultDateFormat);
+
+ const item = new TreeItem(label, TreeItemCollapsibleState.Collapsed);
+ item.contextValue = this.resourceType;
+ item.command = this.command;
+ return item;
+ }
+}
\ No newline at end of file
diff --git a/src/views/stashNode.ts b/src/views/stashNode.ts
new file mode 100644
index 0000000..c1891a2
--- /dev/null
+++ b/src/views/stashNode.ts
@@ -0,0 +1,29 @@
+'use strict';
+import { Iterables } from '../system';
+import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode';
+import { ExplorerNode, ResourceType } from './explorerNode';
+import { GitService, GitUri } from '../gitService';
+import { StashCommitNode } from './stashCommitNode';
+
+export class StashNode extends ExplorerNode {
+
+ static readonly rootType: ResourceType = 'stash-history';
+ readonly resourceType: ResourceType = 'stash-history';
+
+ constructor(uri: GitUri, context: ExtensionContext, git: GitService) {
+ super(uri, context, git);
+ }
+
+ async getChildren(): Promise {
+ const stash = await this.git.getStashList(this.uri.repoPath!);
+ if (stash === undefined) return [];
+
+ return [...Iterables.map(stash.commits.values(), c => new StashCommitNode(c, this.uri, this.context, this.git))];
+ }
+
+ getTreeItem(): TreeItem {
+ const item = new TreeItem(`Stashed Changes`, TreeItemCollapsibleState.Collapsed);
+ item.contextValue = this.resourceType;
+ return item;
+ }
+}
\ No newline at end of file