Workspaces sidebar view (#2650)
* Adds workspaces view
Adds skeleton UX outline with hardcoded sample
Pull workspaces from api (hacky version)
Barebones workspace service, api support to get cloud workspaces
Fixes node/api interaction
Makes virtual repo nodes for repos using remote url
Clean up formatting, rename types, add path provider skeleton
Adds workspaces local provider, loads local workspaces, uses saved repo paths
Add local path provider, use to resolve paths
Adds some handling of workspace repo node types
- Adds context of workspace to repo node
- Adds missing repo node for when the repo isn't located
- Adds green decorator for when the repo is in the current workspace (hacky)
Adds locate command for workspace repos
Use correct refresh trigger on repo node path change
Adds other workspaces api functions, splits calls for workspaces and their repos
Adds ux for creating/deleting cloud workspaces
Adds UX for adding and removing repos from cloud workspaces
Moves locate repo logic to service
Makes top-level refresh more functional
Fixes a few broken calls
Adds sub state responsiveness, UX for plus feature, empty workspace msg
Fixes bad request formats, saves on calls to api
Adds UX to include all open supported repos in new workspace
Pass workspace id down repository node hierarchy
Prevents id conflicts when two or more workspaces have the same repo
Cleanup
More informative tooltip, identify shared workspaces from cloud
Splits out web and local path providers
Adds more error logging and handling
Fixes path provider naming
Send workspace fetch info to view,
Fixes path formatting
Add commands to context menu of items
Adds the ability to open workspace as a code workspace file
Fixes redundant api calls and bad paths, adds logging for getRepos
Preserves settings if overwriting existing code-workspace
* Refines menus/toolbars
* Adds sign in action to message node
* Renames & moves Workspaces to GitLens container
* Renames command for opening as vscode workspace
* Collapses repo nodes in workspaces by default
* Removes unnecessary messaging for missing local workspaces
* Disables virtual repo support for now
* Fixes "open as vs code workspace" appearing on missing repo nodes
* Adds "open repo in new/current window" to workspace repos
* Adds "add repo to workspace" to workspace repo context menu
* Saves workspace id in settings when converting to code-workspace
* Updates namespace of settings key
* Adds option to locate all repos in workspace using parent path
* Adds current window node and "convert to gk workspace" action
* Fixes issue with single repo locate
* Improves missing repo nodes, removes deletion from inline
* Hides inline items which should not appear without plus account
* wip
* wip2
* wip 3
* Fixes issue with adding repos to created workspace
* Moves cache reset on sub change to service
* Fixes bug with legacy local workspaces mapping filepath
---------
Co-authored-by: Eric Amodio <eamodio@gmail.com> 1 year ago |
|
- import type { ViewShowBranchComparison } from './config';
- import type { Environment } from './container';
- import type { StoredSearchQuery } from './git/search';
- import type { Subscription } from './subscription';
- import type { TrackedUsage, TrackedUsageKeys } from './telemetry/usageTracker';
-
- export const extensionPrefix = 'gitlens';
- export const quickPickTitleMaxChars = 80;
-
- export const ImageMimetypes: Record<string, string> = {
- '.png': 'image/png',
- '.gif': 'image/gif',
- '.jpg': 'image/jpeg',
- '.jpeg': 'image/jpeg',
- '.jpe': 'image/jpeg',
- '.webp': 'image/webp',
- '.tif': 'image/tiff',
- '.tiff': 'image/tiff',
- '.bmp': 'image/bmp',
- };
-
- export const enum CharCode {
- /**
- * The `#` character.
- */
- Hash = 35,
- /**
- * The `/` character.
- */
- Slash = 47,
- Digit0 = 48,
- Digit1 = 49,
- Digit2 = 50,
- Digit3 = 51,
- Digit4 = 52,
- Digit5 = 53,
- Digit6 = 54,
- Digit7 = 55,
- Digit8 = 56,
- Digit9 = 57,
- /**
- * The `\` character.
- */
- Backslash = 92,
- A = 65,
- B = 66,
- C = 67,
- D = 68,
- E = 69,
- F = 70,
- Z = 90,
- a = 97,
- b = 98,
- c = 99,
- d = 100,
- e = 101,
- f = 102,
- z = 122,
- }
-
- export type Colors =
- | `${typeof extensionPrefix}.closedAutolinkedIssueIconColor`
- | `${typeof extensionPrefix}.closedPullRequestIconColor`
- | `${typeof extensionPrefix}.decorations.addedForegroundColor`
- | `${typeof extensionPrefix}.decorations.branchAheadForegroundColor`
- | `${typeof extensionPrefix}.decorations.branchBehindForegroundColor`
- | `${typeof extensionPrefix}.decorations.branchDivergedForegroundColor`
- | `${typeof extensionPrefix}.decorations.branchMissingUpstreamForegroundColor`
- | `${typeof extensionPrefix}.decorations.branchUpToDateForegroundColor`
- | `${typeof extensionPrefix}.decorations.branchUnpublishedForegroundColor`
- | `${typeof extensionPrefix}.decorations.copiedForegroundColor`
- | `${typeof extensionPrefix}.decorations.deletedForegroundColor`
- | `${typeof extensionPrefix}.decorations.ignoredForegroundColor`
- | `${typeof extensionPrefix}.decorations.modifiedForegroundColor`
- | `${typeof extensionPrefix}.decorations.statusMergingOrRebasingConflictForegroundColor`
- | `${typeof extensionPrefix}.decorations.statusMergingOrRebasingForegroundColor`
- | `${typeof extensionPrefix}.decorations.renamedForegroundColor`
- | `${typeof extensionPrefix}.decorations.untrackedForegroundColor`
- | `${typeof extensionPrefix}.decorations.workspaceCurrentForegroundColor`
- | `${typeof extensionPrefix}.decorations.workspaceRepoMissingForegroundColor`
- | `${typeof extensionPrefix}.decorations.workspaceRepoOpenForegroundColor`
- | `${typeof extensionPrefix}.decorations.worktreeHasUncommittedChangesForegroundColor`
- | `${typeof extensionPrefix}.decorations.worktreeMissingForegroundColor`
- | `${typeof extensionPrefix}.gutterBackgroundColor`
- | `${typeof extensionPrefix}.gutterForegroundColor`
- | `${typeof extensionPrefix}.gutterUncommittedForegroundColor`
- | `${typeof extensionPrefix}.lineHighlightBackgroundColor`
- | `${typeof extensionPrefix}.lineHighlightOverviewRulerColor`
- | `${typeof extensionPrefix}.mergedPullRequestIconColor`
- | `${typeof extensionPrefix}.openAutolinkedIssueIconColor`
- | `${typeof extensionPrefix}.openPullRequestIconColor`
- | `${typeof extensionPrefix}.trailingLineBackgroundColor`
- | `${typeof extensionPrefix}.trailingLineForegroundColor`
- | `${typeof extensionPrefix}.unpublishedChangesIconColor`
- | `${typeof extensionPrefix}.unpublishedCommitIconColor`
- | `${typeof extensionPrefix}.unpulledChangesIconColor`;
-
- export type CoreColors =
- | 'editorOverviewRuler.addedForeground'
- | 'editorOverviewRuler.deletedForeground'
- | 'editorOverviewRuler.modifiedForeground'
- | 'list.foreground'
- | 'list.warningForeground'
- | 'statusBarItem.warningBackground';
-
- export const enum Commands {
- ActionPrefix = 'gitlens.action.',
-
- AddAuthors = 'gitlens.addAuthors',
- BrowseRepoAtRevision = 'gitlens.browseRepoAtRevision',
- BrowseRepoAtRevisionInNewWindow = 'gitlens.browseRepoAtRevisionInNewWindow',
- BrowseRepoBeforeRevision = 'gitlens.browseRepoBeforeRevision',
- BrowseRepoBeforeRevisionInNewWindow = 'gitlens.browseRepoBeforeRevisionInNewWindow',
- ClearFileAnnotations = 'gitlens.clearFileAnnotations',
- CloseUnchangedFiles = 'gitlens.closeUnchangedFiles',
- CloseWelcomeView = 'gitlens.closeWelcomeView',
- CompareWith = 'gitlens.compareWith',
- CompareHeadWith = 'gitlens.compareHeadWith',
- CompareWorkingWith = 'gitlens.compareWorkingWith',
- ComputingFileAnnotations = 'gitlens.computingFileAnnotations',
- ConnectRemoteProvider = 'gitlens.connectRemoteProvider',
- CopyAutolinkUrl = 'gitlens.copyAutolinkUrl',
- CopyCurrentBranch = 'gitlens.copyCurrentBranch',
- CopyDeepLinkToBranch = 'gitlens.copyDeepLinkToBranch',
- CopyDeepLinkToCommit = 'gitlens.copyDeepLinkToCommit',
- CopyDeepLinkToComparison = 'gitlens.copyDeepLinkToComparison',
- CopyDeepLinkToRepo = 'gitlens.copyDeepLinkToRepo',
- CopyDeepLinkToTag = 'gitlens.copyDeepLinkToTag',
- CopyDeepLinkToWorkspace = 'gitlens.copyDeepLinkToWorkspace',
- CopyMessageToClipboard = 'gitlens.copyMessageToClipboard',
- CopyRemoteBranchesUrl = 'gitlens.copyRemoteBranchesUrl',
- CopyRemoteBranchUrl = 'gitlens.copyRemoteBranchUrl',
- CopyRemoteCommitUrl = 'gitlens.copyRemoteCommitUrl',
- CopyRemoteComparisonUrl = 'gitlens.copyRemoteComparisonUrl',
- CopyRemoteFileUrl = 'gitlens.copyRemoteFileUrlToClipboard',
- CopyRemoteFileUrlWithoutRange = 'gitlens.copyRemoteFileUrlWithoutRange',
- CopyRemoteFileUrlFrom = 'gitlens.copyRemoteFileUrlFrom',
- CopyRemoteIssueUrl = 'gitlens.copyRemoteIssueUrl',
- CopyRemotePullRequestUrl = 'gitlens.copyRemotePullRequestUrl',
- CopyRemoteRepositoryUrl = 'gitlens.copyRemoteRepositoryUrl',
- CopyShaToClipboard = 'gitlens.copyShaToClipboard',
- CopyRelativePathToClipboard = 'gitlens.copyRelativePathToClipboard',
- CreatePullRequestOnRemote = 'gitlens.createPullRequestOnRemote',
- DiffDirectory = 'gitlens.diffDirectory',
- DiffDirectoryWithHead = 'gitlens.diffDirectoryWithHead',
- DiffWith = 'gitlens.diffWith',
- DiffWithNext = 'gitlens.diffWithNext',
- DiffWithNextInDiffLeft = 'gitlens.diffWithNextInDiffLeft',
- DiffWithNextInDiffRight = 'gitlens.diffWithNextInDiffRight',
- DiffWithPrevious = 'gitlens.diffWithPrevious',
- DiffWithPreviousInDiffLeft = 'gitlens.diffWithPreviousInDiffLeft',
- DiffWithPreviousInDiffRight = 'gitlens.diffWithPreviousInDiffRight',
- DiffLineWithPrevious = 'gitlens.diffLineWithPrevious',
- DiffWithRevision = 'gitlens.diffWithRevision',
- DiffWithRevisionFrom = 'gitlens.diffWithRevisionFrom',
- DiffWithWorking = 'gitlens.diffWithWorking',
- DiffWithWorkingInDiffLeft = 'gitlens.diffWithWorkingInDiffLeft',
- DiffWithWorkingInDiffRight = 'gitlens.diffWithWorkingInDiffRight',
- DiffLineWithWorking = 'gitlens.diffLineWithWorking',
- DisconnectRemoteProvider = 'gitlens.disconnectRemoteProvider',
- DisableDebugLogging = 'gitlens.disableDebugLogging',
- EnableDebugLogging = 'gitlens.enableDebugLogging',
- DisableRebaseEditor = 'gitlens.disableRebaseEditor',
- EnableRebaseEditor = 'gitlens.enableRebaseEditor',
- ExternalDiff = 'gitlens.externalDiff',
- ExternalDiffAll = 'gitlens.externalDiffAll',
- FetchRepositories = 'gitlens.fetchRepositories',
- GenerateCommitMessage = 'gitlens.generateCommitMessage',
- GetStarted = 'gitlens.getStarted',
- InviteToLiveShare = 'gitlens.inviteToLiveShare',
- OpenAutolinkUrl = 'gitlens.openAutolinkUrl',
- OpenBlamePriorToChange = 'gitlens.openBlamePriorToChange',
- OpenBranchesOnRemote = 'gitlens.openBranchesOnRemote',
- OpenBranchOnRemote = 'gitlens.openBranchOnRemote',
- OpenCurrentBranchOnRemote = 'gitlens.openCurrentBranchOnRemote',
- OpenChangedFiles = 'gitlens.openChangedFiles',
- OpenCommitOnRemote = 'gitlens.openCommitOnRemote',
- OpenComparisonOnRemote = 'gitlens.openComparisonOnRemote',
- OpenFileHistory = 'gitlens.openFileHistory',
- OpenFileFromRemote = 'gitlens.openFileFromRemote',
- OpenFileOnRemote = 'gitlens.openFileOnRemote',
- OpenFileOnRemoteFrom = 'gitlens.openFileOnRemoteFrom',
- OpenFileAtRevision = 'gitlens.openFileRevision',
- OpenFileAtRevisionFrom = 'gitlens.openFileRevisionFrom',
- OpenFolderHistory = 'gitlens.openFolderHistory',
- OpenOnRemote = 'gitlens.openOnRemote',
- OpenIssueOnRemote = 'gitlens.openIssueOnRemote',
- OpenPullRequestOnRemote = 'gitlens.openPullRequestOnRemote',
- OpenAssociatedPullRequestOnRemote = 'gitlens.openAssociatedPullRequestOnRemote',
- OpenRepoOnRemote = 'gitlens.openRepoOnRemote',
- OpenRevisionFile = 'gitlens.openRevisionFile',
- OpenRevisionFileInDiffLeft = 'gitlens.openRevisionFileInDiffLeft',
- OpenRevisionFileInDiffRight = 'gitlens.openRevisionFileInDiffRight',
- OpenWalkthrough = 'gitlens.openWalkthrough',
- OpenWorkingFile = 'gitlens.openWorkingFile',
- OpenWorkingFileInDiffLeft = 'gitlens.openWorkingFileInDiffLeft',
- OpenWorkingFileInDiffRight = 'gitlens.openWorkingFileInDiffRight',
- PullRepositories = 'gitlens.pullRepositories',
- PushRepositories = 'gitlens.pushRepositories',
- GitCommands = 'gitlens.gitCommands',
- GitCommandsBranch = 'gitlens.gitCommands.branch',
- GitCommandsCherryPick = 'gitlens.gitCommands.cherryPick',
- GitCommandsMerge = 'gitlens.gitCommands.merge',
- GitCommandsRebase = 'gitlens.gitCommands.rebase',
- GitCommandsReset = 'gitlens.gitCommands.reset',
- GitCommandsRevert = 'gitlens.gitCommands.revert',
- GitCommandsSwitch = 'gitlens.gitCommands.switch',
- GitCommandsTag = 'gitlens.gitCommands.tag',
- GitCommandsWorktree = 'gitlens.gitCommands.worktree',
- GitCommandsWorktreeOpen = 'gitlens.gitCommands.worktree.open',
- OpenOrCreateWorktreeForGHPR = 'gitlens.ghpr.views.openOrCreateWorktree',
- PlusHide = 'gitlens.plus.hide',
- PlusLoginOrSignUp = 'gitlens.plus.loginOrSignUp',
- PlusLogout = 'gitlens.plus.logout',
- PlusManage = 'gitlens.plus.manage',
- PlusPurchase = 'gitlens.plus.purchase',
- PlusResendVerification = 'gitlens.plus.resendVerification',
- PlusRestore = 'gitlens.plus.restore',
- PlusShowPlans = 'gitlens.plus.showPlans',
- PlusStartPreviewTrial = 'gitlens.plus.startPreviewTrial',
- PlusValidate = 'gitlens.plus.validate',
- QuickOpenFileHistory = 'gitlens.quickOpenFileHistory',
- RefreshFocus = 'gitlens.focus.refresh',
- RefreshGraph = 'gitlens.graph.refresh',
- RefreshHover = 'gitlens.refreshHover',
- ResetAvatarCache = 'gitlens.resetAvatarCache',
- ResetAIKey = 'gitlens.resetAIKey',
- ResetSuppressedWarnings = 'gitlens.resetSuppressedWarnings',
- ResetTrackedUsage = 'gitlens.resetTrackedUsage',
- ResetViewsLayout = 'gitlens.resetViewsLayout',
- RevealCommitInView = 'gitlens.revealCommitInView',
- SearchCommits = 'gitlens.showCommitSearch',
- SearchCommitsInView = 'gitlens.views.searchAndCompare.searchCommits',
- ShowBranchesView = 'gitlens.showBranchesView',
- ShowCommitDetailsView = 'gitlens.showCommitDetailsView',
- ShowCommitInView = 'gitlens.showCommitInView',
- ShowCommitsInView = 'gitlens.showCommitsInView',
- ShowCommitsView = 'gitlens.showCommitsView',
- ShowContributorsView = 'gitlens.showContributorsView',
- ShowFileHistoryView = 'gitlens.showFileHistoryView',
- ShowFocusPage = 'gitlens.showFocusPage',
- ShowGraph = 'gitlens.showGraph',
- ShowGraphPage = 'gitlens.showGraphPage',
- ShowGraphView = 'gitlens.showGraphView',
- ShowHomeView = 'gitlens.showHomeView',
- ShowAccountView = 'gitlens.showAccountView',
- ShowInCommitGraph = 'gitlens.showInCommitGraph',
- ShowInCommitGraphView = 'gitlens.showInCommitGraphView',
- ShowInDetailsView = 'gitlens.showInDetailsView',
- ShowInTimeline = 'gitlens.showInTimeline',
- ShowLastQuickPick = 'gitlens.showLastQuickPick',
- ShowLineCommitInView = 'gitlens.showLineCommitInView',
- ShowLineHistoryView = 'gitlens.showLineHistoryView',
- OpenOnlyChangedFiles = 'gitlens.openOnlyChangedFiles',
- ShowQuickBranchHistory = 'gitlens.showQuickBranchHistory',
- ShowQuickCommit = 'gitlens.showQuickCommitDetails',
- ShowQuickCommitFile = 'gitlens.showQuickCommitFileDetails',
- ShowQuickCurrentBranchHistory = 'gitlens.showQuickRepoHistory',
- ShowQuickFileHistory = 'gitlens.showQuickFileHistory',
- ShowQuickRepoStatus = 'gitlens.showQuickRepoStatus',
- ShowQuickCommitRevision = 'gitlens.showQuickRevisionDetails',
- ShowQuickCommitRevisionInDiffLeft = 'gitlens.showQuickRevisionDetailsInDiffLeft',
- ShowQuickCommitRevisionInDiffRight = 'gitlens.showQuickRevisionDetailsInDiffRight',
- ShowQuickStashList = 'gitlens.showQuickStashList',
- ShowRemotesView = 'gitlens.showRemotesView',
- ShowRepositoriesView = 'gitlens.showRepositoriesView',
- ShowSearchAndCompareView = 'gitlens.showSearchAndCompareView',
- ShowSettingsPage = 'gitlens.showSettingsPage',
- ShowSettingsPageAndJumpToBranchesView = 'gitlens.showSettingsPage#branches-view',
- ShowSettingsPageAndJumpToCommitsView = 'gitlens.showSettingsPage#commits-view',
- ShowSettingsPageAndJumpToContributorsView = 'gitlens.showSettingsPage#contributors-view',
- ShowSettingsPageAndJumpToFileHistoryView = 'gitlens.showSettingsPage#file-history-view',
- ShowSettingsPageAndJumpToLineHistoryView = 'gitlens.showSettingsPage#line-history-view',
- ShowSettingsPageAndJumpToRemotesView = 'gitlens.showSettingsPage#remotes-view',
- ShowSettingsPageAndJumpToRepositoriesView = 'gitlens.showSettingsPage#repositories-view',
- ShowSettingsPageAndJumpToSearchAndCompareView = 'gitlens.showSettingsPage#search-compare-view',
- ShowSettingsPageAndJumpToStashesView = 'gitlens.showSettingsPage#stashes-view',
- ShowSettingsPageAndJumpToTagsView = 'gitlens.showSettingsPage#tags-view',
- ShowSettingsPageAndJumpToWorkTreesView = 'gitlens.showSettingsPage#worktrees-view',
- ShowSettingsPageAndJumpToViews = 'gitlens.showSettingsPage#views',
- ShowSettingsPageAndJumpToCommitGraph = 'gitlens.showSettingsPage#commit-graph',
- ShowSettingsPageAndJumpToAutolinks = 'gitlens.showSettingsPage#autolinks',
- ShowStashesView = 'gitlens.showStashesView',
- ShowTagsView = 'gitlens.showTagsView',
- ShowTimelinePage = 'gitlens.showTimelinePage',
- ShowTimelineView = 'gitlens.showTimelineView',
- ShowWelcomePage = 'gitlens.showWelcomePage',
- ShowWorktreesView = 'gitlens.showWorktreesView',
- ShowWorkspacesView = 'gitlens.showWorkspacesView',
- StashApply = 'gitlens.stashApply',
- StashSave = 'gitlens.stashSave',
- StashSaveFiles = 'gitlens.stashSaveFiles',
- SwitchAIModel = 'gitlens.switchAIModel',
- SwitchMode = 'gitlens.switchMode',
- ToggleCodeLens = 'gitlens.toggleCodeLens',
- ToggleFileBlame = 'gitlens.toggleFileBlame',
- ToggleFileBlameInDiffLeft = 'gitlens.toggleFileBlameInDiffLeft',
- ToggleFileBlameInDiffRight = 'gitlens.toggleFileBlameInDiffRight',
- ToggleFileChanges = 'gitlens.toggleFileChanges',
- ToggleFileChangesOnly = 'gitlens.toggleFileChangesOnly',
- ToggleFileHeatmap = 'gitlens.toggleFileHeatmap',
- ToggleFileHeatmapInDiffLeft = 'gitlens.toggleFileHeatmapInDiffLeft',
- ToggleFileHeatmapInDiffRight = 'gitlens.toggleFileHeatmapInDiffRight',
- ToggleGraph = 'gitlens.toggleGraph',
- ToggleMaximizedGraph = 'gitlens.toggleMaximizedGraph',
- ToggleLineBlame = 'gitlens.toggleLineBlame',
- ToggleReviewMode = 'gitlens.toggleReviewMode',
- ToggleZenMode = 'gitlens.toggleZenMode',
- ViewsCopy = 'gitlens.views.copy',
- ViewsOpenDirectoryDiff = 'gitlens.views.openDirectoryDiff',
- ViewsOpenDirectoryDiffWithWorking = 'gitlens.views.openDirectoryDiffWithWorking',
-
- Deprecated_DiffHeadWith = 'gitlens.diffHeadWith',
- Deprecated_DiffWorkingWith = 'gitlens.diffWorkingWith',
- Deprecated_OpenBranchesInRemote = 'gitlens.openBranchesInRemote',
- Deprecated_OpenBranchInRemote = 'gitlens.openBranchInRemote',
- Deprecated_OpenCommitInRemote = 'gitlens.openCommitInRemote',
- Deprecated_OpenFileInRemote = 'gitlens.openFileInRemote',
- Deprecated_OpenInRemote = 'gitlens.openInRemote',
- Deprecated_OpenRepoInRemote = 'gitlens.openRepoInRemote',
- Deprecated_ShowFileHistoryInView = 'gitlens.showFileHistoryInView',
- }
-
- export type TreeViewCommands = `gitlens.views.${
- | `branches.${
- | 'copy'
- | 'refresh'
- | `setLayoutTo${'List' | 'Tree'}`
- | `setFilesLayoutTo${'Auto' | 'List' | 'Tree'}`
- | `setShowAvatars${'On' | 'Off'}`
- | `setShowBranchComparison${'On' | 'Off'}`
- | `setShowBranchPullRequest${'On' | 'Off'}`}`
- | `commits.${
- | 'copy'
- | 'refresh'
- | `setFilesLayoutTo${'Auto' | 'List' | 'Tree'}`
- | `setCommitsFilter${'Authors' | 'Off'}`
- | `setShowAvatars${'On' | 'Off'}`
- | `setShowBranchComparison${'On' | 'Off'}`
- | `setShowBranchPullRequest${'On' | 'Off'}`
- | `setShowMergeCommits${'On' | 'Off'}`}`
- | `contributors.${
- | 'copy'
- | 'refresh'
- | `setFilesLayoutTo${'Auto' | 'List' | 'Tree'}`
- | `setShowAllBranches${'On' | 'Off'}`
- | `setShowAvatars${'On' | 'Off'}`
- | `setShowStatistics${'On' | 'Off'}`}`
- | `fileHistory.${
- | 'copy'
- | 'refresh'
- | 'changeBase'
- | `setCursorFollowing${'On' | 'Off'}`
- | `setEditorFollowing${'On' | 'Off'}`
- | `setRenameFollowing${'On' | 'Off'}`
- | `setShowAllBranches${'On' | 'Off'}`
- | `setShowMergeCommits${'On' | 'Off'}`
- | `setShowAvatars${'On' | 'Off'}`}`
- | `lineHistory.${
- | 'copy'
- | 'refresh'
- | 'changeBase'
- | `setEditorFollowing${'On' | 'Off'}`
- | `setShowAvatars${'On' | 'Off'}`}`
- | `remotes.${
- | 'copy'
- | 'refresh'
- | `setLayoutTo${'List' | 'Tree'}`
- | `setFilesLayoutTo${'Auto' | 'List' | 'Tree'}`
- | `setShowAvatars${'On' | 'Off'}`
- | `setShowBranchPullRequest${'On' | 'Off'}`}`
- | `repositories.${
- | 'copy'
- | 'refresh'
- | `setBranchesLayoutTo${'List' | 'Tree'}`
- | `setFilesLayoutTo${'Auto' | 'List' | 'Tree'}`
- | `setAutoRefreshTo${'On' | 'Off'}`
- | `setShowAvatars${'On' | 'Off'}`
- | `setShowBranchComparison${'On' | 'Off'}`
- | `setBranchesShowBranchComparison${'On' | 'Off'}`
- | `setShowBranches${'On' | 'Off'}`
- | `setShowCommits${'On' | 'Off'}`
- | `setShowContributors${'On' | 'Off'}`
- | `setShowRemotes${'On' | 'Off'}`
- | `setShowStashes${'On' | 'Off'}`
- | `setShowTags${'On' | 'Off'}`
- | `setShowWorktrees${'On' | 'Off'}`
- | `setShowUpstreamStatus${'On' | 'Off'}`
- | `setShowSectionOff`}`
- | `searchAndCompare.${
- | 'copy'
- | 'refresh'
- | 'clear'
- | 'pin'
- | 'unpin'
- | 'swapComparison'
- | 'selectForCompare'
- | 'compareWithSelected'
- | `setFilesLayoutTo${'Auto' | 'List' | 'Tree'}`
- | `setKeepResultsTo${'On' | 'Off'}`
- | `setShowAvatars${'On' | 'Off'}`
- | `setFilesFilterOn${'Left' | 'Right'}`
- | 'setFilesFilterOff'}`
- | `stashes.${'copy' | 'refresh' | `setFilesLayoutTo${'Auto' | 'List' | 'Tree'}`}`
- | `tags.${
- | 'copy'
- | 'refresh'
- | `setLayoutTo${'List' | 'Tree'}`
- | `setFilesLayoutTo${'Auto' | 'List' | 'Tree'}`
- | `setShowAvatars${'On' | 'Off'}`}`
- | `workspaces.${
- | 'info'
- | 'copy'
- | 'refresh'
- | 'addRepos'
- | 'addReposFromLinked'
- | 'changeAutoAddSetting'
- | 'convert'
- | 'create'
- | 'createLocal'
- | 'delete'
- | 'locateAllRepos'
- | 'openLocal'
- | 'openLocalNewWindow'
- | `repo.${'locate' | 'open' | 'openInNewWindow' | 'addToWindow' | 'remove'}`}`
- | `worktrees.${
- | 'copy'
- | 'refresh'
- | `setFilesLayoutTo${'Auto' | 'List' | 'Tree'}`
- | `setShowAvatars${'On' | 'Off'}`
- | `setShowBranchComparison${'On' | 'Off'}`
- | `setShowBranchPullRequest${'On' | 'Off'}`}`}`;
-
- type ExtractSuffix<Prefix extends string, U> = U extends `${Prefix}${infer V}` ? V : never;
- type FilterCommands<Prefix extends string, U> = U extends `${Prefix}${infer V}` ? `${Prefix}${V}` : never;
-
- export type TreeViewCommandsByViewId<T extends TreeViewIds> = FilterCommands<T, TreeViewCommands>;
- export type TreeViewCommandsByViewType<T extends TreeViewTypes> = FilterCommands<
- `gitlens.views.${T}.`,
- TreeViewCommands
- >;
- export type TreeViewCommandSuffixesByViewType<T extends TreeViewTypes> = ExtractSuffix<
- `gitlens.views.${T}.`,
- FilterCommands<`gitlens.views.${T}.`, TreeViewCommands>
- >;
-
- export type CustomEditorTypes = 'rebase';
- export type CustomEditorIds = `gitlens.${CustomEditorTypes}`;
-
- export type TreeViewTypes =
- | 'branches'
- | 'commits'
- | 'contributors'
- | 'fileHistory'
- | 'lineHistory'
- | 'remotes'
- | 'repositories'
- | 'searchAndCompare'
- | 'stashes'
- | 'tags'
- | 'workspaces'
- | 'worktrees';
- export type TreeViewIds = `gitlens.views.${TreeViewTypes}`;
-
- export type WebviewTypes = 'graph' | 'settings' | 'timeline' | 'welcome' | 'focus';
- export type WebviewIds = `gitlens.${WebviewTypes}`;
-
- export type WebviewViewTypes = 'account' | 'commitDetails' | 'graph' | 'graphDetails' | 'home' | 'timeline';
- export type WebviewViewIds = `gitlens.views.${WebviewViewTypes}`;
-
- export type ViewTypes = TreeViewTypes | WebviewViewTypes;
- export type ViewIds = TreeViewIds | WebviewViewIds;
-
- export type ViewContainerTypes = 'gitlens' | 'gitlensInspect' | 'gitlensPanel';
- export type ViewContainerIds = `workbench.view.extension.${ViewContainerTypes}`;
-
- export type CoreViewContainerTypes = 'scm';
- export type CoreViewContainerIds = `workbench.view.${CoreViewContainerTypes}`;
-
- // export const viewTypes: ViewTypes[] = [
- // 'account',
- // 'branches',
- // 'commits',
- // 'commitDetails',
- // 'contributors',
- // 'fileHistory',
- // 'graph',
- // 'graphDetails',
- // 'home',
- // 'lineHistory',
- // 'remotes',
- // 'repositories',
- // 'searchAndCompare',
- // 'stashes',
- // 'tags',
- // 'timeline',
- // 'workspaces',
- // 'worktrees',
- // ];
-
- export const viewIdsByDefaultContainerId = new Map<ViewContainerIds | CoreViewContainerIds, ViewTypes[]>([
- [
- 'workbench.view.scm',
- ['branches', 'commits', 'remotes', 'repositories', 'stashes', 'tags', 'worktrees', 'contributors'],
- ],
- ['workbench.view.extension.gitlensPanel', ['graph', 'graphDetails']],
- [
- 'workbench.view.extension.gitlensInspect',
- ['commitDetails', 'fileHistory', 'lineHistory', 'timeline', 'searchAndCompare'],
- ],
- ['workbench.view.extension.gitlens', ['home', 'workspaces', 'account']],
- ]);
-
- export type TreeViewRefNodeTypes = 'branch' | 'commit' | 'stash' | 'tag';
- export type TreeViewRefFileNodeTypes = 'commit-file' | 'file-commit' | 'results-file' | 'stash-file';
- export type TreeViewFileNodeTypes =
- | TreeViewRefFileNodeTypes
- | 'conflict-file'
- | 'folder'
- | 'status-file'
- | 'uncommitted-file';
- export type TreeViewSubscribableNodeTypes =
- | 'compare-branch'
- | 'compare-results'
- | 'file-history'
- | 'file-history-tracker'
- | 'line-history'
- | 'line-history-tracker'
- | 'repositories'
- | 'repository'
- | 'repo-folder'
- | 'search-results'
- | 'workspace';
- export type TreeViewNodeTypes =
- | TreeViewRefNodeTypes
- | TreeViewFileNodeTypes
- | TreeViewSubscribableNodeTypes
- | 'autolink'
- | 'autolinks'
- | 'branch-tag-folder'
- | 'branches'
- | 'compare-picker'
- | 'contributor'
- | 'contributors'
- | 'conflict-files'
- | 'conflict-current-changes'
- | 'conflict-incoming-changes'
- | 'merge-status'
- | 'message'
- | 'pager'
- | 'pullrequest'
- | 'rebase-status'
- | 'reflog'
- | 'reflog-record'
- | 'remote'
- | 'remotes'
- | 'results-commits'
- | 'results-files'
- | 'search-compare'
- | 'stashes'
- | 'status-files'
- | 'tags'
- | 'tracking-status'
- | 'tracking-status-files'
- | 'uncommitted-files'
- | 'workspace-missing-repository'
- | 'workspaces-view'
- | 'worktree'
- | 'worktrees';
-
- export type ContextKeys =
- | `${typeof extensionPrefix}:action:${string}`
- | `${typeof extensionPrefix}:key:${Keys}`
- | `${typeof extensionPrefix}:webview:${WebviewTypes | CustomEditorTypes}:visible`
- | `${typeof extensionPrefix}:webviewView:${WebviewViewTypes}:visible`
- | `${typeof extensionPrefix}:activeFileStatus`
- | `${typeof extensionPrefix}:annotationStatus`
- | `${typeof extensionPrefix}:debugging`
- | `${typeof extensionPrefix}:disabledToggleCodeLens`
- | `${typeof extensionPrefix}:disabled`
- | `${typeof extensionPrefix}:enabled`
- | `${typeof extensionPrefix}:hasConnectedRemotes`
- | `${typeof extensionPrefix}:hasRemotes`
- | `${typeof extensionPrefix}:hasRichRemotes`
- | `${typeof extensionPrefix}:hasVirtualFolders`
- | `${typeof extensionPrefix}:prerelease`
- | `${typeof extensionPrefix}:readonly`
- | `${typeof extensionPrefix}:untrusted`
- | `${typeof extensionPrefix}:views:canCompare`
- | `${typeof extensionPrefix}:views:canCompare:file`
- | `${typeof extensionPrefix}:views:commits:filtered`
- | `${typeof extensionPrefix}:views:commits:hideMergeCommits`
- | `${typeof extensionPrefix}:views:fileHistory:canPin`
- | `${typeof extensionPrefix}:views:fileHistory:cursorFollowing`
- | `${typeof extensionPrefix}:views:fileHistory:editorFollowing`
- | `${typeof extensionPrefix}:views:lineHistory:editorFollowing`
- | `${typeof extensionPrefix}:views:repositories:autoRefresh`
- | `${typeof extensionPrefix}:vsls`
- | `${typeof extensionPrefix}:plus`
- | `${typeof extensionPrefix}:plus:disallowedRepos`
- | `${typeof extensionPrefix}:plus:enabled`
- | `${typeof extensionPrefix}:plus:required`
- | `${typeof extensionPrefix}:plus:state`;
-
- export type CoreCommands =
- | 'cursorMove'
- | 'editor.action.showHover'
- | 'editor.action.showReferences'
- | 'editor.action.webvieweditor.showFind'
- | 'editorScroll'
- | 'list.collapseAllToFocus'
- | 'openInTerminal'
- | 'revealFileInOS'
- | 'revealInExplorer'
- | 'revealLine'
- | 'setContext'
- | 'vscode.open'
- | 'vscode.openFolder'
- | 'vscode.openWith'
- | 'vscode.diff'
- | 'vscode.executeCodeLensProvider'
- | 'vscode.executeDocumentSymbolProvider'
- | 'vscode.moveViews'
- | 'vscode.previewHtml'
- | 'workbench.action.closeActiveEditor'
- | 'workbench.action.closeAllEditors'
- | 'workbench.action.closePanel'
- | 'workbench.action.nextEditor'
- | 'workbench.action.openWalkthrough'
- | 'workbench.action.toggleMaximizedPanel'
- | 'workbench.extensions.installExtension'
- | 'workbench.extensions.uninstallExtension'
- | 'workbench.files.action.focusFilesExplorer'
- | 'workbench.view.explorer'
- | 'workbench.view.scm'
- | `${ViewContainerIds | CoreViewContainerIds}.resetViewContainerLocation`
- | `${ViewIds}.${'focus' | 'removeView' | 'resetViewLocation' | 'toggleVisibility'}`;
-
- export type CoreGitCommands =
- | 'git.fetch'
- | 'git.publish'
- | 'git.pull'
- | 'git.pullRebase'
- | 'git.push'
- | 'git.pushForce'
- | 'git.undoCommit';
-
- export type CoreConfiguration =
- | 'editor.letterSpacing'
- | 'files.encoding'
- | 'files.exclude'
- | 'http.proxy'
- | 'http.proxySupport'
- | 'http.proxyStrictSSL'
- | 'search.exclude'
- | 'workbench.editorAssociations'
- | 'workbench.tree.renderIndentGuides';
-
- export type CoreGitConfiguration =
- | 'git.autoRepositoryDetection'
- | 'git.enabled'
- | 'git.fetchOnPull'
- | 'git.path'
- | 'git.pullTags'
- | 'git.repositoryScanIgnoredFolders'
- | 'git.repositoryScanMaxDepth'
- | 'git.useForcePushWithLease';
-
- export const enum GlyphChars {
- AngleBracketLeftHeavy = '\u2770',
- AngleBracketRightHeavy = '\u2771',
- ArrowBack = '\u21a9',
- ArrowDown = '\u2193',
- ArrowDownUp = '\u21F5',
- ArrowDropRight = '\u2937',
- ArrowHeadRight = '\u27A4',
- ArrowLeft = '\u2190',
- ArrowLeftDouble = '\u21d0',
- ArrowLeftRight = '\u2194',
- ArrowLeftRightDouble = '\u21d4',
- ArrowLeftRightDoubleStrike = '\u21ce',
- ArrowLeftRightLong = '\u27f7',
- ArrowRight = '\u2192',
- ArrowRightDouble = '\u21d2',
- ArrowRightHollow = '\u21e8',
- ArrowUp = '\u2191',
- ArrowUpDown = '\u21C5',
- ArrowUpRight = '\u2197',
- ArrowsHalfLeftRight = '\u21cb',
- ArrowsHalfRightLeft = '\u21cc',
- ArrowsLeftRight = '\u21c6',
- ArrowsRightLeft = '\u21c4',
- Asterisk = '\u2217',
- Check = '✔',
- Dash = '\u2014',
- Dot = '\u2022',
- Ellipsis = '\u2026',
- EnDash = '\u2013',
- Envelope = '\u2709',
- EqualsTriple = '\u2261',
- Flag = '\u2691',
- FlagHollow = '\u2690',
- MiddleEllipsis = '\u22EF',
- MuchLessThan = '\u226A',
- MuchGreaterThan = '\u226B',
- Pencil = '\u270E',
- Space = '\u00a0',
- SpaceThin = '\u2009',
- SpaceThinnest = '\u200A',
- SquareWithBottomShadow = '\u274F',
- SquareWithTopShadow = '\u2750',
- Warning = '\u26a0',
- ZeroWidthSpace = '\u200b',
- }
-
- export const keys = [
- 'left',
- 'alt+left',
- 'ctrl+left',
- 'right',
- 'alt+right',
- 'ctrl+right',
- 'alt+,',
- 'alt+.',
- 'alt+enter',
- 'ctrl+enter',
- 'escape',
- ] as const;
- export type Keys = (typeof keys)[number];
-
- export const enum Schemes {
- DebugConsole = 'debug',
- File = 'file',
- Git = 'git',
- GitHub = 'github',
- GitLens = 'gitlens',
- Output = 'output',
- PRs = 'pr',
- Terminal = 'vscode-terminal',
- Vsls = 'vsls',
- VslsScc = 'vsls-scc',
- Virtual = 'vscode-vfs',
- }
-
- export type TelemetryEvents =
- | 'account/validation/failed'
- | 'activate'
- | 'command'
- | 'command/core'
- | 'remoteProviders/connected'
- | 'remoteProviders/disconnected'
- | 'providers/changed'
- | 'providers/context'
- | 'providers/registrationComplete'
- | 'repositories/changed'
- | 'repositories/visibility'
- | 'repository/opened'
- | 'repository/visibility'
- | 'subscription'
- | 'subscription/changed'
- | 'usage/track';
-
- export type AIProviders = 'anthropic' | 'openai';
-
- export type SecretKeys =
- | `gitlens.integration.auth:${string}`
- | `gitlens.${AIProviders}.key`
- | `gitlens.plus.auth:${Environment}`;
-
- export const enum SyncedStorageKeys {
- Version = 'gitlens:synced:version',
- PreReleaseVersion = 'gitlens:synced:preVersion',
- HomeViewWelcomeVisible = 'gitlens:views:welcome:visible',
- }
-
- export type DeprecatedGlobalStorage = {
- /** @deprecated use `confirm:ai:tos:${AIProviders}` */
- 'confirm:sendToOpenAI': boolean;
- /** @deprecated */
- 'home:actions:completed': ('dismissed:welcome' | 'opened:scm')[];
- /** @deprecated */
- 'home:steps:completed': string[];
- /** @deprecated */
- 'home:sections:dismissed': string[];
- /** @deprecated */
- 'home:status:pinned': boolean;
- /** @deprecated */
- 'home:banners:dismissed': string[];
- /** @deprecated */
- 'plus:discountNotificationShown': boolean;
- /** @deprecated */
- 'plus:migratedAuthentication': boolean;
- /** @deprecated */
- 'plus:renewalDiscountNotificationShown': boolean;
- /** @deprecated */
- 'views:layout': 'gitlens' | 'scm';
- /** @deprecated */
- 'views:commitDetails:dismissed': 'sidebar'[];
- } & {
- /** @deprecated */
- [key in `disallow:connection:${string}`]: any;
- };
-
- export type GlobalStorage = {
- avatars: [string, StoredAvatar][];
- repoVisibility: [string, StoredRepoVisibilityInfo][];
- 'deepLinks:pending': StoredDeepLinkContext;
- pendingWelcomeOnFocus: boolean;
- pendingWhatsNewOnFocus: boolean;
- // Don't change this key name ('premium`) as its the stored subscription
- 'premium:subscription': Stored<Subscription & { lastValidatedAt: number | undefined }>;
- 'synced:version': string;
- // Keep the pre-release version separate from the released version
- 'synced:preVersion': string;
- usages: Record<TrackedUsageKeys, TrackedUsage>;
- version: string;
- // Keep the pre-release version separate from the released version
- preVersion: string;
- 'views:welcome:visible': boolean;
- } & { [key in `confirm:ai:tos:${AIProviders}`]: boolean } & {
- [key in `provider:authentication:skip:${string}`]: boolean;
- };
-
- export type DeprecatedWorkspaceStorage = {
- /** @deprecated use `confirm:ai:tos:${AIProviders}` */
- 'confirm:sendToOpenAI': boolean;
- /** @deprecated */
- 'graph:banners:dismissed': Record<string, boolean>;
- /** @deprecated use `graph:filtersByRepo.excludeRefs` */
- 'graph:hiddenRefs': Record<string, StoredGraphExcludedRef>;
- /** @deprecated */
- 'views:searchAndCompare:keepResults': boolean;
- };
-
- export type WorkspaceStorage = {
- assumeRepositoriesOnStartup?: boolean;
- 'branch:comparisons': StoredBranchComparisons;
- 'gitComandPalette:usage': RecentUsage;
- gitPath: string;
- 'graph:columns': Record<string, StoredGraphColumn>;
- 'graph:filtersByRepo': Record<string, StoredGraphFilters>;
- 'remote:default': string;
- 'starred:branches': StoredStarred;
- 'starred:repositories': StoredStarred;
- 'views:repositories:autoRefresh': boolean;
- 'views:searchAndCompare:pinned': StoredSearchAndCompareItems;
- 'views:commitDetails:autolinksExpanded': boolean;
- } & { [key in `confirm:ai:tos:${AIProviders}`]: boolean } & { [key in `connected:${string}`]: boolean };
-
- export interface Stored<T, SchemaVersion extends number = 1> {
- v: SchemaVersion;
- data: T;
- }
-
- export interface StoredAvatar {
- uri: string;
- timestamp: number;
- }
-
- export type StoredRepositoryVisibility = 'private' | 'public' | 'local';
-
- export interface StoredRepoVisibilityInfo {
- visibility: StoredRepositoryVisibility;
- timestamp: number;
- remotesHash?: string;
- }
-
- export interface StoredBranchComparison {
- ref: string;
- notation: '..' | '...' | undefined;
- type: Exclude<ViewShowBranchComparison, false> | undefined;
- checkedFiles?: string[];
- }
-
- export type StoredBranchComparisons = Record<string, string | StoredBranchComparison>;
-
- export interface StoredDeepLinkContext {
- url?: string | undefined;
- repoPath?: string | undefined;
- }
-
- export interface StoredGraphColumn {
- isHidden?: boolean;
- mode?: string;
- width?: number;
- }
-
- export interface StoredGraphFilters {
- includeOnlyRefs?: Record<string, StoredGraphIncludeOnlyRef>;
- excludeRefs?: Record<string, StoredGraphExcludedRef>;
- excludeTypes?: Record<string, boolean>;
- }
-
- export type StoredGraphRefType = 'head' | 'remote' | 'tag';
-
- export interface StoredGraphExcludedRef {
- id: string;
- type: StoredGraphRefType;
- name: string;
- owner?: string;
- }
-
- export interface StoredGraphIncludeOnlyRef {
- id: string;
- type: StoredGraphRefType;
- name: string;
- owner?: string;
- }
-
- export interface StoredNamedRef {
- label?: string;
- ref: string;
- }
-
- export interface StoredComparison {
- type: 'comparison';
- timestamp: number;
- path: string;
- ref1: StoredNamedRef;
- ref2: StoredNamedRef;
- notation?: '..' | '...';
-
- checkedFiles?: string[];
- }
-
- export interface StoredSearch {
- type: 'search';
- timestamp: number;
- path: string;
- labels: {
- label: string;
- queryLabel:
- | string
- | {
- label: string;
- resultsType?: { singular: string; plural: string };
- };
- };
- search: StoredSearchQuery;
- }
-
- export type StoredSearchAndCompareItem = StoredComparison | StoredSearch;
- export type StoredSearchAndCompareItems = Record<string, StoredSearchAndCompareItem>;
- export type StoredStarred = Record<string, boolean>;
- export type RecentUsage = Record<string, number>;
|