@gitkraken/core-gitlens 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -1
- package/dist/git/cache.d.ts +28 -4
- package/dist/git/cache.d.ts.map +1 -1
- package/dist/git/cache.js +82 -18
- package/dist/git/cache.js.map +1 -1
- package/dist/git/models/commit.d.ts.map +1 -1
- package/dist/git/models/commit.js.map +1 -1
- package/dist/git/models/reference.d.ts +31 -0
- package/dist/git/models/reference.d.ts.map +1 -1
- package/dist/git/models/remote.d.ts.map +1 -1
- package/dist/git/models/remote.js.map +1 -1
- package/dist/git/models/repository.d.ts +9 -1
- package/dist/git/models/repository.d.ts.map +1 -1
- package/dist/git/models/repository.js +19 -3
- package/dist/git/models/repository.js.map +1 -1
- package/dist/git/models/search.d.ts +2 -2
- package/dist/git/models/search.d.ts.map +1 -1
- package/dist/git/models/worktree.d.ts +4 -1
- package/dist/git/models/worktree.d.ts.map +1 -1
- package/dist/git/models/worktree.js +2 -2
- package/dist/git/models/worktree.js.map +1 -1
- package/dist/git/parsers/diffParser.d.ts.map +1 -1
- package/dist/git/parsers/diffParser.js.map +1 -1
- package/dist/git/providers/branches.d.ts +15 -4
- package/dist/git/providers/branches.d.ts.map +1 -1
- package/dist/git/providers/config.d.ts +4 -1
- package/dist/git/providers/config.d.ts.map +1 -1
- package/dist/git/providers/operations.d.ts +33 -10
- package/dist/git/providers/operations.d.ts.map +1 -1
- package/dist/git/providers/pausedOperations.d.ts +3 -1
- package/dist/git/providers/pausedOperations.d.ts.map +1 -1
- package/dist/git/providers/refs.d.ts +23 -2
- package/dist/git/providers/refs.d.ts.map +1 -1
- package/dist/git/providers/staging.d.ts +16 -0
- package/dist/git/providers/staging.d.ts.map +1 -1
- package/dist/git/providers/status.d.ts +4 -1
- package/dist/git/providers/status.d.ts.map +1 -1
- package/dist/git/remotes/azure-devops.d.ts.map +1 -1
- package/dist/git/remotes/azure-devops.js.map +1 -1
- package/dist/git/{exec.types.d.ts → run.types.d.ts} +22 -3
- package/dist/git/run.types.d.ts.map +1 -0
- package/dist/git/run.types.js +2 -0
- package/dist/git/run.types.js.map +1 -0
- package/dist/git/service.d.ts.map +1 -1
- package/dist/git/service.js.map +1 -1
- package/dist/git/utils/autolink.utils.d.ts.map +1 -1
- package/dist/git/utils/autolink.utils.js.map +1 -1
- package/dist/git/utils/blame.utils.d.ts.map +1 -1
- package/dist/git/utils/blame.utils.js.map +1 -1
- package/dist/git/utils/conflictResolution.utils.d.ts +6 -0
- package/dist/git/utils/conflictResolution.utils.d.ts.map +1 -0
- package/dist/git/utils/conflictResolution.utils.js +25 -0
- package/dist/git/utils/conflictResolution.utils.js.map +1 -0
- package/dist/git/utils/fileStatus.utils.d.ts +2 -1
- package/dist/git/utils/fileStatus.utils.d.ts.map +1 -1
- package/dist/git/utils/fileStatus.utils.js +4 -0
- package/dist/git/utils/fileStatus.utils.js.map +1 -1
- package/dist/git/utils/search.utils.d.ts.map +1 -1
- package/dist/git/utils/search.utils.js +3 -0
- package/dist/git/utils/search.utils.js.map +1 -1
- package/dist/git/utils/sorting.d.ts +8 -0
- package/dist/git/utils/sorting.d.ts.map +1 -1
- package/dist/git/utils/sorting.js +15 -0
- package/dist/git/utils/sorting.js.map +1 -1
- package/dist/git/utils/status.utils.d.ts.map +1 -1
- package/dist/git/utils/status.utils.js.map +1 -1
- package/dist/git/watching/classifyChange.d.ts.map +1 -1
- package/dist/git/watching/classifyChange.js +8 -0
- package/dist/git/watching/classifyChange.js.map +1 -1
- package/dist/git/watching/gitIgnoreFilter.js +1 -1
- package/dist/git/watching/gitIgnoreFilter.js.map +1 -1
- package/dist/git/watching/initWatcher.d.ts.map +1 -1
- package/dist/git/watching/initWatcher.js.map +1 -1
- package/dist/git/watching/watchGroup.d.ts.map +1 -1
- package/dist/git/watching/watchGroup.js.map +1 -1
- package/dist/git/watching/watchService.d.ts.map +1 -1
- package/dist/git/watching/watchService.js +24 -4
- package/dist/git/watching/watchService.js.map +1 -1
- package/dist/git/watching/watchSession.d.ts.map +1 -1
- package/dist/git/watching/watchSession.js.map +1 -1
- package/dist/git-cli/exec/exec.types.d.ts +1 -1
- package/dist/git-cli/exec/exec.types.d.ts.map +1 -1
- package/dist/git-cli/exec/git.d.ts +3 -3
- package/dist/git-cli/exec/git.d.ts.map +1 -1
- package/dist/git-cli/exec/git.js.map +1 -1
- package/dist/git-cli/exec/gitQueue.d.ts +10 -2
- package/dist/git-cli/exec/gitQueue.d.ts.map +1 -1
- package/dist/git-cli/exec/gitQueue.js +39 -12
- package/dist/git-cli/exec/gitQueue.js.map +1 -1
- package/dist/git-cli/parsers/blameParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/blameParser.js.map +1 -1
- package/dist/git-cli/parsers/logParser.js.map +1 -1
- package/dist/git-cli/parsers/refParser.d.ts +3 -30
- package/dist/git-cli/parsers/refParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/refParser.js +30 -30
- package/dist/git-cli/parsers/refParser.js.map +1 -1
- package/dist/git-cli/providers/blame.d.ts.map +1 -1
- package/dist/git-cli/providers/blame.js.map +1 -1
- package/dist/git-cli/providers/branches.d.ts +15 -5
- package/dist/git-cli/providers/branches.d.ts.map +1 -1
- package/dist/git-cli/providers/branches.js +98 -68
- package/dist/git-cli/providers/branches.js.map +1 -1
- package/dist/git-cli/providers/commits.d.ts.map +1 -1
- package/dist/git-cli/providers/commits.js +74 -30
- package/dist/git-cli/providers/commits.js.map +1 -1
- package/dist/git-cli/providers/config.d.ts +11 -2
- package/dist/git-cli/providers/config.d.ts.map +1 -1
- package/dist/git-cli/providers/config.js +27 -2
- package/dist/git-cli/providers/config.js.map +1 -1
- package/dist/git-cli/providers/diff.d.ts.map +1 -1
- package/dist/git-cli/providers/diff.js +4 -2
- package/dist/git-cli/providers/diff.js.map +1 -1
- package/dist/git-cli/providers/graph.d.ts.map +1 -1
- package/dist/git-cli/providers/graph.js +7 -2
- package/dist/git-cli/providers/graph.js.map +1 -1
- package/dist/git-cli/providers/operations.d.ts +13 -11
- package/dist/git-cli/providers/operations.d.ts.map +1 -1
- package/dist/git-cli/providers/operations.js +108 -38
- package/dist/git-cli/providers/operations.js.map +1 -1
- package/dist/git-cli/providers/patch.d.ts.map +1 -1
- package/dist/git-cli/providers/patch.js.map +1 -1
- package/dist/git-cli/providers/pausedOperations.d.ts +3 -1
- package/dist/git-cli/providers/pausedOperations.d.ts.map +1 -1
- package/dist/git-cli/providers/pausedOperations.js +7 -1
- package/dist/git-cli/providers/pausedOperations.js.map +1 -1
- package/dist/git-cli/providers/refs.d.ts +19 -2
- package/dist/git-cli/providers/refs.d.ts.map +1 -1
- package/dist/git-cli/providers/refs.js +286 -2
- package/dist/git-cli/providers/refs.js.map +1 -1
- package/dist/git-cli/providers/revision.js.map +1 -1
- package/dist/git-cli/providers/staging.d.ts +6 -0
- package/dist/git-cli/providers/staging.d.ts.map +1 -1
- package/dist/git-cli/providers/staging.js +32 -0
- package/dist/git-cli/providers/staging.js.map +1 -1
- package/dist/git-cli/providers/status.d.ts +4 -1
- package/dist/git-cli/providers/status.d.ts.map +1 -1
- package/dist/git-cli/providers/status.js +4 -3
- package/dist/git-cli/providers/status.js.map +1 -1
- package/dist/git-cli/providers/tags.d.ts.map +1 -1
- package/dist/git-cli/providers/tags.js +10 -6
- package/dist/git-cli/providers/tags.js.map +1 -1
- package/dist/ipc/discovery.d.ts +27 -0
- package/dist/ipc/discovery.d.ts.map +1 -0
- package/dist/ipc/discovery.js +38 -0
- package/dist/ipc/discovery.js.map +1 -0
- package/dist/ipc/ipcServer.d.ts +20 -0
- package/dist/ipc/ipcServer.d.ts.map +1 -0
- package/dist/ipc/ipcServer.js +162 -0
- package/dist/ipc/ipcServer.js.map +1 -0
- package/dist/plus/agents/providers/claudeCodeProvider.d.ts +114 -0
- package/dist/plus/agents/providers/claudeCodeProvider.d.ts.map +1 -0
- package/dist/plus/agents/providers/claudeCodeProvider.js +1480 -0
- package/dist/plus/agents/providers/claudeCodeProvider.js.map +1 -0
- package/dist/plus/agents/providers/claudeCodeTranscript.d.ts +36 -0
- package/dist/plus/agents/providers/claudeCodeTranscript.d.ts.map +1 -0
- package/dist/plus/agents/providers/claudeCodeTranscript.js +171 -0
- package/dist/plus/agents/providers/claudeCodeTranscript.js.map +1 -0
- package/dist/plus/agents/sanitizePrompt.d.ts +15 -0
- package/dist/plus/agents/sanitizePrompt.d.ts.map +1 -0
- package/dist/plus/agents/sanitizePrompt.js +103 -0
- package/dist/plus/agents/sanitizePrompt.js.map +1 -0
- package/dist/plus/agents/stateMachine.d.ts +32 -0
- package/dist/plus/agents/stateMachine.d.ts.map +1 -0
- package/dist/plus/agents/stateMachine.js +180 -0
- package/dist/plus/agents/stateMachine.js.map +1 -0
- package/dist/plus/agents/types.d.ts +203 -0
- package/dist/plus/agents/types.d.ts.map +1 -0
- package/dist/plus/agents/types.js +49 -0
- package/dist/plus/agents/types.js.map +1 -0
- package/dist/plus/ai/errors.d.ts +4 -1
- package/dist/plus/ai/errors.d.ts.map +1 -1
- package/dist/plus/ai/errors.js +38 -0
- package/dist/plus/ai/errors.js.map +1 -1
- package/dist/plus/ai/models/promptTemplates.d.ts +11 -2
- package/dist/plus/ai/models/promptTemplates.d.ts.map +1 -1
- package/dist/plus/ai/prompts.d.ts +1 -0
- package/dist/plus/ai/prompts.d.ts.map +1 -1
- package/dist/plus/ai/prompts.js +48 -8
- package/dist/plus/ai/prompts.js.map +1 -1
- package/dist/plus/ai/utils/results.utils.d.ts.map +1 -1
- package/dist/plus/ai/utils/results.utils.js.map +1 -1
- package/dist/plus/git-github/api/github.d.ts +10 -1
- package/dist/plus/git-github/api/github.d.ts.map +1 -1
- package/dist/plus/git-github/api/github.js +156 -49
- package/dist/plus/git-github/api/github.js.map +1 -1
- package/dist/plus/git-github/api/types.d.ts +8 -0
- package/dist/plus/git-github/api/types.d.ts.map +1 -1
- package/dist/plus/git-github/models.d.ts +1 -1
- package/dist/plus/git-github/models.d.ts.map +1 -1
- package/dist/plus/git-github/models.js.map +1 -1
- package/dist/plus/git-github/providers/github/blame.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/blame.js.map +1 -1
- package/dist/plus/git-github/providers/github/branches.d.ts +5 -1
- package/dist/plus/git-github/providers/github/branches.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/branches.js +47 -24
- package/dist/plus/git-github/providers/github/branches.js.map +1 -1
- package/dist/plus/git-github/providers/github/commits.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/commits.js +144 -92
- package/dist/plus/git-github/providers/github/commits.js.map +1 -1
- package/dist/plus/git-github/providers/github/diff.d.ts +1 -1
- package/dist/plus/git-github/providers/github/diff.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/diff.js +23 -9
- package/dist/plus/git-github/providers/github/diff.js.map +1 -1
- package/dist/plus/git-github/providers/github/refs.d.ts +9 -1
- package/dist/plus/git-github/providers/github/refs.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/refs.js +38 -13
- package/dist/plus/git-github/providers/github/refs.js.map +1 -1
- package/dist/plus/git-github/providers/github/revision.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/revision.js +1 -2
- package/dist/plus/git-github/providers/github/revision.js.map +1 -1
- package/dist/plus/git-github/providers/github/status.d.ts +4 -1
- package/dist/plus/git-github/providers/github/status.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/status.js +1 -1
- package/dist/plus/git-github/providers/github/status.js.map +1 -1
- package/dist/plus/git-github/providers/github/tags.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/tags.js +35 -36
- package/dist/plus/git-github/providers/github/tags.js.map +1 -1
- package/dist/plus/git-github/providers/githubGitProvider.d.ts.map +1 -1
- package/dist/plus/git-github/providers/githubGitProvider.js.map +1 -1
- package/dist/utils/color.d.ts.map +1 -1
- package/dist/utils/color.js.map +1 -1
- package/dist/utils/decorators/serializable.d.ts.map +1 -1
- package/dist/utils/decorators/serializable.js.map +1 -1
- package/dist/utils/dedupedAsyncCache.d.ts +37 -0
- package/dist/utils/dedupedAsyncCache.d.ts.map +1 -0
- package/dist/utils/dedupedAsyncCache.js +68 -0
- package/dist/utils/dedupedAsyncCache.js.map +1 -0
- package/dist/utils/diff.d.ts +2 -0
- package/dist/utils/diff.d.ts.map +1 -0
- package/dist/utils/diff.js +53 -0
- package/dist/utils/diff.js.map +1 -0
- package/dist/utils/disposable.d.ts.map +1 -1
- package/dist/utils/disposable.js.map +1 -1
- package/dist/utils/env/node/exec.d.ts.map +1 -1
- package/dist/utils/env/node/exec.js.map +1 -1
- package/dist/utils/error.d.ts.map +1 -1
- package/dist/utils/error.js.map +1 -1
- package/dist/utils/iterable.d.ts.map +1 -1
- package/dist/utils/iterable.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/lruMap.d.ts +9 -0
- package/dist/utils/lruMap.d.ts.map +1 -1
- package/dist/utils/lruMap.js +26 -4
- package/dist/utils/lruMap.js.map +1 -1
- package/dist/utils/markdown.d.ts.map +1 -1
- package/dist/utils/markdown.js.map +1 -1
- package/dist/utils/mru.d.ts.map +1 -1
- package/dist/utils/mru.js.map +1 -1
- package/dist/utils/path.d.ts.map +1 -1
- package/dist/utils/path.js.map +1 -1
- package/dist/utils/promise.d.ts +1 -0
- package/dist/utils/promise.d.ts.map +1 -1
- package/dist/utils/promise.js +17 -0
- package/dist/utils/promise.js.map +1 -1
- package/dist/utils/promiseCache.d.ts +10 -0
- package/dist/utils/promiseCache.d.ts.map +1 -1
- package/dist/utils/promiseCache.js +22 -0
- package/dist/utils/promiseCache.js.map +1 -1
- package/dist/utils/string.d.ts.map +1 -1
- package/dist/utils/string.js.map +1 -1
- package/dist/utils/uri.d.ts.map +1 -1
- package/dist/utils/uri.js.map +1 -1
- package/dist/utils/version.d.ts.map +1 -1
- package/dist/utils/version.js.map +1 -1
- package/package.json +13 -1
- package/src/git/cache.ts +142 -28
- package/src/git/models/commit.ts +1 -0
- package/src/git/models/reference.ts +33 -0
- package/src/git/models/remote.ts +1 -0
- package/src/git/models/repository.ts +21 -3
- package/src/git/models/search.ts +2 -2
- package/src/git/models/worktree.ts +10 -2
- package/src/git/parsers/diffParser.ts +2 -0
- package/src/git/providers/branches.ts +22 -4
- package/src/git/providers/config.ts +2 -0
- package/src/git/providers/operations.ts +44 -0
- package/src/git/providers/pausedOperations.ts +1 -0
- package/src/git/providers/refs.ts +32 -3
- package/src/git/providers/staging.ts +12 -0
- package/src/git/providers/status.ts +6 -1
- package/src/git/remotes/azure-devops.ts +2 -0
- package/src/git/{exec.types.ts → run.types.ts} +22 -2
- package/src/git/service.ts +1 -0
- package/src/git/utils/autolink.utils.ts +1 -0
- package/src/git/utils/blame.utils.ts +2 -0
- package/src/git/utils/conflictResolution.utils.ts +31 -0
- package/src/git/utils/fileStatus.utils.ts +7 -1
- package/src/git/utils/search.utils.ts +2 -0
- package/src/git/utils/sorting.ts +17 -0
- package/src/git/utils/status.utils.ts +1 -0
- package/src/git/watching/classifyChange.ts +9 -0
- package/src/git/watching/gitIgnoreFilter.ts +2 -2
- package/src/git/watching/initWatcher.ts +2 -0
- package/src/git/watching/watchGroup.ts +3 -0
- package/src/git/watching/watchService.ts +38 -5
- package/src/git/watching/watchSession.ts +10 -0
- package/src/git-cli/exec/exec.types.ts +2 -2
- package/src/git-cli/exec/git.ts +6 -5
- package/src/git-cli/exec/gitQueue.ts +41 -12
- package/src/git-cli/parsers/blameParser.ts +1 -0
- package/src/git-cli/parsers/logParser.ts +1 -0
- package/src/git-cli/parsers/refParser.ts +33 -34
- package/src/git-cli/providers/blame.ts +1 -0
- package/src/git-cli/providers/branches.ts +164 -93
- package/src/git-cli/providers/commits.ts +83 -37
- package/src/git-cli/providers/config.ts +41 -2
- package/src/git-cli/providers/diff.ts +8 -2
- package/src/git-cli/providers/graph.ts +11 -2
- package/src/git-cli/providers/operations.ts +186 -49
- package/src/git-cli/providers/patch.ts +1 -0
- package/src/git-cli/providers/pausedOperations.ts +8 -0
- package/src/git-cli/providers/refs.ts +247 -3
- package/src/git-cli/providers/revision.ts +2 -2
- package/src/git-cli/providers/staging.ts +33 -0
- package/src/git-cli/providers/status.ts +15 -4
- package/src/git-cli/providers/tags.ts +15 -16
- package/src/ipc/discovery.ts +56 -0
- package/src/ipc/ipcServer.ts +171 -0
- package/src/plus/agents/providers/claudeCodeProvider.ts +1782 -0
- package/src/plus/agents/providers/claudeCodeTranscript.ts +214 -0
- package/src/plus/agents/sanitizePrompt.ts +109 -0
- package/src/plus/agents/stateMachine.ts +197 -0
- package/src/plus/agents/types.ts +277 -0
- package/src/plus/ai/errors.ts +40 -0
- package/src/plus/ai/models/promptTemplates.ts +13 -0
- package/src/plus/ai/prompts.ts +49 -8
- package/src/plus/ai/utils/results.utils.ts +2 -0
- package/src/plus/git-github/api/github.ts +199 -53
- package/src/plus/git-github/api/types.ts +15 -0
- package/src/plus/git-github/models.ts +1 -1
- package/src/plus/git-github/providers/github/blame.ts +2 -0
- package/src/plus/git-github/providers/github/branches.ts +61 -31
- package/src/plus/git-github/providers/github/commits.ts +231 -160
- package/src/plus/git-github/providers/github/diff.ts +27 -19
- package/src/plus/git-github/providers/github/refs.ts +57 -22
- package/src/plus/git-github/providers/github/revision.ts +1 -2
- package/src/plus/git-github/providers/github/status.ts +6 -1
- package/src/plus/git-github/providers/github/tags.ts +61 -62
- package/src/plus/git-github/providers/githubGitProvider.ts +1 -0
- package/src/utils/color.ts +2 -0
- package/src/utils/decorators/serializable.ts +1 -0
- package/src/utils/dedupedAsyncCache.ts +74 -0
- package/src/utils/diff.ts +61 -0
- package/src/utils/disposable.ts +2 -0
- package/src/utils/env/node/exec.ts +2 -0
- package/src/utils/error.ts +1 -0
- package/src/utils/iterable.ts +3 -0
- package/src/utils/logger.ts +1 -0
- package/src/utils/lruMap.ts +29 -4
- package/src/utils/markdown.ts +1 -0
- package/src/utils/mru.ts +2 -0
- package/src/utils/path.ts +1 -0
- package/src/utils/promise.ts +22 -0
- package/src/utils/promiseCache.ts +24 -0
- package/src/utils/string.ts +2 -0
- package/src/utils/uri.ts +1 -0
- package/src/utils/version.ts +1 -0
- package/dist/git/exec.types.d.ts.map +0 -1
- package/dist/git/exec.types.js +0 -2
- package/dist/git/exec.types.js.map +0 -1
|
@@ -41,94 +41,103 @@ export class CommitsGitSubProvider implements GitCommitsSubProvider {
|
|
|
41
41
|
) {}
|
|
42
42
|
|
|
43
43
|
@debug()
|
|
44
|
-
|
|
45
|
-
if (repoPath == null) return undefined;
|
|
46
|
-
|
|
47
|
-
const scope = getScopedLogger();
|
|
44
|
+
getCommit(repoPath: string, rev: string, _cancellation?: AbortSignal): Promise<GitCommit | undefined> {
|
|
45
|
+
if (repoPath == null) return Promise.resolve(undefined);
|
|
48
46
|
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
// Don't cache uncommitted-changes synthesis — it's date-sensitive
|
|
48
|
+
if (isUncommitted(rev, true)) {
|
|
49
|
+
return (async () => {
|
|
51
50
|
return createUncommittedChangesCommit(
|
|
52
51
|
repoPath,
|
|
53
52
|
rev,
|
|
54
53
|
new Date(),
|
|
55
54
|
await this.provider.config.getCurrentUser(repoPath),
|
|
56
55
|
);
|
|
57
|
-
}
|
|
56
|
+
})();
|
|
57
|
+
}
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
// TODO: resolve symbolic refs (HEAD, branch names) to SHA before caching to avoid
|
|
60
|
+
// short staleness windows. For now we cascade-clear on 'branch'/'branches'.
|
|
61
|
+
return this.cache.commit.getOrCreate(repoPath, stripOrigin(rev), async () => {
|
|
62
|
+
const scope = getScopedLogger();
|
|
60
63
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
metadata.repo.owner,
|
|
64
|
-
metadata.repo.name,
|
|
65
|
-
stripOrigin(rev),
|
|
66
|
-
);
|
|
67
|
-
if (commit == null) return undefined;
|
|
64
|
+
try {
|
|
65
|
+
const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
|
|
68
66
|
|
|
69
|
-
|
|
67
|
+
const commit = await github.getCommit(
|
|
68
|
+
toTokenInfo(this.provider.authenticationProviderId, session),
|
|
69
|
+
metadata.repo.owner,
|
|
70
|
+
metadata.repo.name,
|
|
71
|
+
stripOrigin(rev),
|
|
72
|
+
);
|
|
73
|
+
if (commit == null) return undefined;
|
|
70
74
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
commit.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
75
|
+
const repoUri = coerceUri(repoPath);
|
|
76
|
+
|
|
77
|
+
const { viewer = session.account.label } = commit;
|
|
78
|
+
|
|
79
|
+
return new GitCommit(
|
|
80
|
+
repoPath,
|
|
81
|
+
commit.oid,
|
|
82
|
+
new GitCommitIdentity(
|
|
83
|
+
commit.author.name,
|
|
84
|
+
commit.author.email,
|
|
85
|
+
new Date(commit.author.date),
|
|
86
|
+
commit.author.avatarUrl,
|
|
87
|
+
isViewer(commit.author.name, viewer),
|
|
88
|
+
),
|
|
89
|
+
new GitCommitIdentity(
|
|
90
|
+
commit.committer.name,
|
|
91
|
+
commit.committer.email,
|
|
92
|
+
new Date(commit.committer.date),
|
|
93
|
+
undefined,
|
|
94
|
+
isViewer(commit.committer.name, viewer),
|
|
95
|
+
),
|
|
96
|
+
commit.message.split('\n', 1)[0],
|
|
97
|
+
commit.parents.nodes.map(p => p.oid),
|
|
98
|
+
commit.message,
|
|
99
|
+
{
|
|
100
|
+
files: commit.files?.map(f => toFileChange(repoUri, repoPath, f)),
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
files: commit.changedFiles ?? 0,
|
|
104
|
+
additions: commit.additions ?? 0,
|
|
105
|
+
deletions: commit.deletions ?? 0,
|
|
106
|
+
},
|
|
107
|
+
[],
|
|
108
|
+
);
|
|
109
|
+
} catch (ex) {
|
|
110
|
+
scope?.error(ex);
|
|
111
|
+
debugger;
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
108
115
|
}
|
|
109
116
|
|
|
110
117
|
@debug()
|
|
111
|
-
|
|
112
|
-
if (repoPath == null) return undefined;
|
|
118
|
+
getCommitCount(repoPath: string, rev: string, _cancellation?: AbortSignal): Promise<number | undefined> {
|
|
119
|
+
if (repoPath == null) return Promise.resolve(undefined);
|
|
113
120
|
|
|
114
|
-
|
|
121
|
+
return this.cache.commitCount.getOrCreate(repoPath, stripOrigin(rev), async () => {
|
|
122
|
+
const scope = getScopedLogger();
|
|
115
123
|
|
|
116
|
-
|
|
117
|
-
|
|
124
|
+
try {
|
|
125
|
+
const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
|
|
118
126
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
127
|
+
const count = await github.getCommitCount(
|
|
128
|
+
toTokenInfo(this.provider.authenticationProviderId, session),
|
|
129
|
+
metadata.repo.owner,
|
|
130
|
+
metadata.repo.name,
|
|
131
|
+
stripOrigin(rev),
|
|
132
|
+
);
|
|
125
133
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
134
|
+
return count;
|
|
135
|
+
} catch (ex) {
|
|
136
|
+
scope?.error(ex);
|
|
137
|
+
debugger;
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
});
|
|
132
141
|
}
|
|
133
142
|
|
|
134
143
|
@debug()
|
|
@@ -149,102 +158,111 @@ export class CommitsGitSubProvider implements GitCommitsSubProvider {
|
|
|
149
158
|
): Promise<GitCommit | undefined> {
|
|
150
159
|
if (repoPath == null) return undefined;
|
|
151
160
|
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
try {
|
|
155
|
-
const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
|
|
161
|
+
const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
|
|
156
162
|
|
|
157
|
-
|
|
158
|
-
|
|
163
|
+
const rootUri = this.provider.getProviderRootUri(this.provider.getAbsoluteUri(pathOrUri, repoPath));
|
|
164
|
+
const file = this.provider.getRelativePath(this.provider.getAbsoluteUri(pathOrUri, repoPath), rootUri);
|
|
165
|
+
|
|
166
|
+
// Resolve HEAD/empty rev to the metadata revision so the cache key is stable across callers
|
|
167
|
+
const resolvedRev = !rev || rev === 'HEAD' ? (await metadata.getRevision()).revision : rev;
|
|
168
|
+
// Path-scoped variant lives in the same slot as `getCommit` but with a `|file` suffix to
|
|
169
|
+
// keep it distinct from the unscoped commit entry.
|
|
170
|
+
const cacheKey = `${stripOrigin(resolvedRev)}|${file}`;
|
|
171
|
+
|
|
172
|
+
return this.cache.commit.getOrCreate(repoPath, cacheKey, async () => {
|
|
173
|
+
const scope = getScopedLogger();
|
|
174
|
+
|
|
175
|
+
try {
|
|
176
|
+
const commit = await github.getCommitForFile(
|
|
177
|
+
toTokenInfo(this.provider.authenticationProviderId, session),
|
|
178
|
+
metadata.repo.owner,
|
|
179
|
+
metadata.repo.name,
|
|
180
|
+
stripOrigin(resolvedRev),
|
|
181
|
+
file,
|
|
182
|
+
);
|
|
183
|
+
if (commit == null) return undefined;
|
|
159
184
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
toTokenInfo(this.provider.authenticationProviderId, session),
|
|
163
|
-
metadata.repo.owner,
|
|
164
|
-
metadata.repo.name,
|
|
165
|
-
stripOrigin(rev),
|
|
166
|
-
file,
|
|
167
|
-
);
|
|
168
|
-
if (commit == null) return undefined;
|
|
185
|
+
const repoUri = coerceUri(repoPath);
|
|
186
|
+
const { viewer = session.account.label } = commit;
|
|
169
187
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
return undefined;
|
|
213
|
-
}
|
|
188
|
+
return new GitCommit(
|
|
189
|
+
repoPath,
|
|
190
|
+
commit.oid,
|
|
191
|
+
new GitCommitIdentity(
|
|
192
|
+
commit.author.name,
|
|
193
|
+
commit.author.email,
|
|
194
|
+
new Date(commit.author.date),
|
|
195
|
+
commit.author.avatarUrl,
|
|
196
|
+
isViewer(commit.author.name, viewer),
|
|
197
|
+
),
|
|
198
|
+
new GitCommitIdentity(
|
|
199
|
+
commit.committer.name,
|
|
200
|
+
commit.committer.email,
|
|
201
|
+
new Date(commit.committer.date),
|
|
202
|
+
undefined,
|
|
203
|
+
isViewer(commit.committer.name, viewer),
|
|
204
|
+
),
|
|
205
|
+
commit.message.split('\n', 1)[0],
|
|
206
|
+
commit.parents.nodes.map(p => p.oid),
|
|
207
|
+
commit.message,
|
|
208
|
+
commit.files != null
|
|
209
|
+
? {
|
|
210
|
+
files: undefined,
|
|
211
|
+
filtered: {
|
|
212
|
+
files: commit.files?.map(f => toFileChange(repoUri, repoPath, f)),
|
|
213
|
+
pathspec: file,
|
|
214
|
+
},
|
|
215
|
+
}
|
|
216
|
+
: undefined,
|
|
217
|
+
{
|
|
218
|
+
files: commit.changedFiles ?? 0,
|
|
219
|
+
additions: commit.additions ?? 0,
|
|
220
|
+
deletions: commit.deletions ?? 0,
|
|
221
|
+
},
|
|
222
|
+
[],
|
|
223
|
+
);
|
|
224
|
+
} catch (ex) {
|
|
225
|
+
scope?.error(ex);
|
|
226
|
+
debugger;
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
});
|
|
214
230
|
}
|
|
215
231
|
|
|
216
232
|
@debug()
|
|
217
|
-
|
|
233
|
+
getLeftRightCommitCount(
|
|
218
234
|
repoPath: string,
|
|
219
235
|
range: GitRevisionRange,
|
|
220
236
|
_options?: { authors?: GitUser[]; excludeMerges?: boolean },
|
|
221
237
|
_cancellation?: AbortSignal,
|
|
222
238
|
): Promise<LeftRightCommitCountResult | undefined> {
|
|
223
|
-
if (repoPath == null) return undefined;
|
|
239
|
+
if (repoPath == null) return Promise.resolve(undefined);
|
|
224
240
|
|
|
225
|
-
|
|
241
|
+
return this.cache.leftRightCommitCount.getOrCreate(repoPath, stripOrigin(range), async () => {
|
|
242
|
+
const scope = getScopedLogger();
|
|
226
243
|
|
|
227
|
-
|
|
244
|
+
const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
|
|
228
245
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
246
|
+
try {
|
|
247
|
+
const result = await github.getComparison(
|
|
248
|
+
toTokenInfo(this.provider.authenticationProviderId, session),
|
|
249
|
+
metadata.repo.owner,
|
|
250
|
+
metadata.repo.name,
|
|
251
|
+
stripOrigin(range),
|
|
252
|
+
);
|
|
236
253
|
|
|
237
|
-
|
|
254
|
+
if (result == null) return undefined;
|
|
238
255
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
256
|
+
return {
|
|
257
|
+
left: result.behind_by,
|
|
258
|
+
right: result.ahead_by,
|
|
259
|
+
};
|
|
260
|
+
} catch (ex) {
|
|
261
|
+
scope?.error(ex);
|
|
262
|
+
debugger;
|
|
263
|
+
return undefined;
|
|
264
|
+
}
|
|
265
|
+
});
|
|
248
266
|
}
|
|
249
267
|
|
|
250
268
|
@debug()
|
|
@@ -445,6 +463,7 @@ export class CommitsGitSubProvider implements GitCommitsSubProvider {
|
|
|
445
463
|
|
|
446
464
|
const context = await this.provider.ensureRepositoryContext(repoPath);
|
|
447
465
|
if (context == null) return undefined;
|
|
466
|
+
|
|
448
467
|
const { metadata, github, session } = context;
|
|
449
468
|
|
|
450
469
|
const uri = this.provider.getAbsoluteUri(path, repoPath);
|
|
@@ -601,19 +620,71 @@ export class CommitsGitSubProvider implements GitCommitsSubProvider {
|
|
|
601
620
|
options?: GitLogShasOptions,
|
|
602
621
|
cancellation?: AbortSignal,
|
|
603
622
|
): Promise<Iterable<string>> {
|
|
604
|
-
|
|
623
|
+
if (repoPath == null) return [];
|
|
605
624
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
625
|
+
const scope = getScopedLogger();
|
|
626
|
+
|
|
627
|
+
// `authors` and `all` filters aren't supported by the lightweight SHA-only query;
|
|
628
|
+
// fall back to the full log path when set.
|
|
629
|
+
if (options?.authors?.length || options?.all) {
|
|
630
|
+
let log: GitLog | undefined;
|
|
631
|
+
if (options?.pathOrUri != null) {
|
|
632
|
+
log = await this.getLogForPath(repoPath, options.pathOrUri, rev, options, cancellation);
|
|
633
|
+
} else {
|
|
634
|
+
log = await this.getLog(repoPath, rev, options, cancellation);
|
|
635
|
+
}
|
|
636
|
+
if (log == null) return [];
|
|
637
|
+
|
|
638
|
+
const shas = map(log.commits.values(), c => c.ref);
|
|
639
|
+
// Note: reversal only applies to the first page — subsequent pages loaded via pagination are not reversed
|
|
640
|
+
return options?.reverse ? [...shas].reverse() : shas;
|
|
611
641
|
}
|
|
612
|
-
if (log == null) return [];
|
|
613
642
|
|
|
614
|
-
const
|
|
615
|
-
|
|
616
|
-
|
|
643
|
+
const limit = this.provider.getPagingLimit(options?.limit);
|
|
644
|
+
|
|
645
|
+
try {
|
|
646
|
+
const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
|
|
647
|
+
|
|
648
|
+
rev = !rev || rev === 'HEAD' ? (await metadata.getRevision()).revision : rev;
|
|
649
|
+
|
|
650
|
+
let path: string | undefined;
|
|
651
|
+
if (options?.pathOrUri != null) {
|
|
652
|
+
const rootUri = this.provider.getProviderRootUri(
|
|
653
|
+
this.provider.getAbsoluteUri(options.pathOrUri, repoPath),
|
|
654
|
+
);
|
|
655
|
+
path = this.provider.getRelativePath(
|
|
656
|
+
this.provider.getAbsoluteUri(options.pathOrUri, repoPath),
|
|
657
|
+
rootUri,
|
|
658
|
+
);
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
const strippedRev = stripOrigin(rev);
|
|
662
|
+
const sinceISO = options?.since ? new Date(options.since).toISOString() : '';
|
|
663
|
+
const cacheKey = `${strippedRev}|${path ?? ''}|${sinceISO}|${limit}|${options?.cursor ?? ''}`;
|
|
664
|
+
|
|
665
|
+
const shas = await this.cache.logShas.getOrCreate(repoPath, cacheKey, async () => {
|
|
666
|
+
const result = await github.getCommitShas(
|
|
667
|
+
toTokenInfo(this.provider.authenticationProviderId, session),
|
|
668
|
+
metadata.repo.owner,
|
|
669
|
+
metadata.repo.name,
|
|
670
|
+
strippedRev,
|
|
671
|
+
{
|
|
672
|
+
after: options?.cursor,
|
|
673
|
+
limit: limit,
|
|
674
|
+
path: path,
|
|
675
|
+
since: options?.since ? new Date(options.since) : undefined,
|
|
676
|
+
},
|
|
677
|
+
);
|
|
678
|
+
return result.values;
|
|
679
|
+
});
|
|
680
|
+
|
|
681
|
+
// Note: reversal only applies to the first page — subsequent pages loaded via pagination are not reversed
|
|
682
|
+
return options?.reverse ? shas.toReversed() : shas;
|
|
683
|
+
} catch (ex) {
|
|
684
|
+
scope?.error(ex);
|
|
685
|
+
debugger;
|
|
686
|
+
return [];
|
|
687
|
+
}
|
|
617
688
|
}
|
|
618
689
|
|
|
619
690
|
@debug()
|
|
@@ -22,6 +22,7 @@ import { encodeGitLensRevisionUriAuthority } from '../../../../git/utils/uriAuth
|
|
|
22
22
|
import { debug } from '../../../../utils/decorators/log.js';
|
|
23
23
|
import { union } from '../../../../utils/iterable.js';
|
|
24
24
|
import { getScopedLogger } from '../../../../utils/logger.scoped.js';
|
|
25
|
+
import { getSettledValue } from '../../../../utils/promise.js';
|
|
25
26
|
import type { Uri } from '../../../../utils/uri.js';
|
|
26
27
|
import { fromUri } from '../../../../utils/uri.js';
|
|
27
28
|
import { toTokenInfo } from '../../api/tokenUtils.js';
|
|
@@ -58,12 +59,18 @@ export class DiffGitSubProvider implements GitDiffSubProvider {
|
|
|
58
59
|
async getChangedFilesCount(
|
|
59
60
|
repoPath: string,
|
|
60
61
|
to?: string,
|
|
61
|
-
|
|
62
|
+
from?: string,
|
|
62
63
|
_options?: { uris?: (string | Uri)[]; includeUntracked?: boolean },
|
|
63
64
|
_cancellation?: AbortSignal,
|
|
64
65
|
): Promise<GitDiffShortStat | undefined> {
|
|
65
|
-
//
|
|
66
|
-
|
|
66
|
+
// Virtual GitHub repos have no working tree, so no working changes can exist.
|
|
67
|
+
// Without any refs, return empty stats rather than undefined to avoid "uncertain state" callers.
|
|
68
|
+
if (!to && !from) return { additions: 0, deletions: 0, files: 0 };
|
|
69
|
+
|
|
70
|
+
// If only `from` is provided, compare against HEAD
|
|
71
|
+
if (!to) {
|
|
72
|
+
to = 'HEAD';
|
|
73
|
+
}
|
|
67
74
|
|
|
68
75
|
const commit = await this.provider.commits.getCommit(repoPath, to);
|
|
69
76
|
if (commit?.stats == null) return undefined;
|
|
@@ -115,27 +122,28 @@ export class DiffGitSubProvider implements GitDiffSubProvider {
|
|
|
115
122
|
}
|
|
116
123
|
|
|
117
124
|
try {
|
|
118
|
-
|
|
119
|
-
toTokenInfo(this.provider.authenticationProviderId, session),
|
|
120
|
-
metadata.repo.owner,
|
|
121
|
-
metadata.repo.name,
|
|
122
|
-
stripOrigin(range),
|
|
123
|
-
);
|
|
124
|
-
|
|
125
|
-
const files1 = result?.files;
|
|
125
|
+
const token = toTokenInfo(this.provider.authenticationProviderId, session);
|
|
126
126
|
|
|
127
|
-
let files
|
|
127
|
+
let files;
|
|
128
128
|
if (range2) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
metadata.repo.owner,
|
|
132
|
-
metadata.repo.name,
|
|
133
|
-
|
|
134
|
-
);
|
|
129
|
+
// GitHub doesn't support `..`, so issue both `...` comparisons in parallel and union the results.
|
|
130
|
+
const [result1, result2] = await Promise.allSettled([
|
|
131
|
+
github.getComparison(token, metadata.repo.owner, metadata.repo.name, stripOrigin(range)),
|
|
132
|
+
github.getComparison(token, metadata.repo.owner, metadata.repo.name, stripOrigin(range2)),
|
|
133
|
+
]);
|
|
135
134
|
|
|
136
|
-
const
|
|
135
|
+
const files1 = getSettledValue(result1)?.files;
|
|
136
|
+
const files2 = getSettledValue(result2)?.files;
|
|
137
137
|
|
|
138
138
|
files = [...new Set(union(files1, files2))];
|
|
139
|
+
} else {
|
|
140
|
+
const result = await github.getComparison(
|
|
141
|
+
token,
|
|
142
|
+
metadata.repo.owner,
|
|
143
|
+
metadata.repo.name,
|
|
144
|
+
stripOrigin(range),
|
|
145
|
+
);
|
|
146
|
+
files = result?.files;
|
|
139
147
|
}
|
|
140
148
|
|
|
141
149
|
return files?.map(f => ({
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { Cache } from '../../../../git/cache.js';
|
|
2
2
|
import type { GitBranch } from '../../../../git/models/branch.js';
|
|
3
|
-
import type { GitReference } from '../../../../git/models/reference.js';
|
|
3
|
+
import type { GitReference, GitRefTip } from '../../../../git/models/reference.js';
|
|
4
4
|
import { deletedOrMissing } from '../../../../git/models/revision.js';
|
|
5
5
|
import type { GitTag } from '../../../../git/models/tag.js';
|
|
6
6
|
import type { GitRefsSubProvider } from '../../../../git/providers/refs.js';
|
|
7
|
+
import type { GitCommandPriority } from '../../../../git/run.types.js';
|
|
7
8
|
import { createReference } from '../../../../git/utils/reference.utils.js';
|
|
8
9
|
import {
|
|
9
10
|
createRevisionRange,
|
|
@@ -31,32 +32,42 @@ export class RefsGitSubProvider implements GitRefsSubProvider {
|
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
@debug()
|
|
34
|
-
|
|
35
|
+
getMergeBase(
|
|
35
36
|
repoPath: string,
|
|
36
37
|
ref1: string,
|
|
37
38
|
ref2: string,
|
|
38
|
-
_options?: { forkPoint?: boolean },
|
|
39
|
+
_options?: { forkPoint?: boolean; priority?: GitCommandPriority },
|
|
39
40
|
_cancellation?: AbortSignal,
|
|
40
41
|
): Promise<string | undefined> {
|
|
41
|
-
if (repoPath == null) return undefined;
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
42
|
+
if (repoPath == null) return Promise.resolve(undefined);
|
|
43
|
+
|
|
44
|
+
const a = stripOrigin(ref1);
|
|
45
|
+
const b = stripOrigin(ref2);
|
|
46
|
+
// `merge-base` is symmetric, so normalize ref order in the cache key to coalesce
|
|
47
|
+
// `(A, B)` and `(B, A)` lookups onto a single entry.
|
|
48
|
+
const [left, right] = a < b ? [a, b] : [b, a];
|
|
49
|
+
const cacheKey = `${left}...${right}`;
|
|
50
|
+
const queryRange = createRevisionRange(a, b, '...');
|
|
51
|
+
|
|
52
|
+
return this.cache.mergeBase.getOrCreate(repoPath, cacheKey, async () => {
|
|
53
|
+
const scope = getScopedLogger();
|
|
54
|
+
|
|
55
|
+
const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
const result = await github.getComparison(
|
|
59
|
+
toTokenInfo(this.provider.authenticationProviderId, session),
|
|
60
|
+
metadata.repo.owner,
|
|
61
|
+
metadata.repo.name,
|
|
62
|
+
queryRange,
|
|
63
|
+
);
|
|
64
|
+
return result?.merge_base_commit?.sha;
|
|
65
|
+
} catch (ex) {
|
|
66
|
+
scope?.error(ex);
|
|
67
|
+
debugger;
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
60
71
|
}
|
|
61
72
|
|
|
62
73
|
@debug()
|
|
@@ -90,6 +101,30 @@ export class RefsGitSubProvider implements GitRefsSubProvider {
|
|
|
90
101
|
return createReference(ref, repoPath, { refType: 'revision' });
|
|
91
102
|
}
|
|
92
103
|
|
|
104
|
+
@debug()
|
|
105
|
+
getRefTips(
|
|
106
|
+
_repoPath: string,
|
|
107
|
+
_options?: { include?: ReadonlyArray<'heads' | 'remotes' | 'tags'> },
|
|
108
|
+
_cancellation?: AbortSignal,
|
|
109
|
+
): Promise<GitRefTip[]> {
|
|
110
|
+
// Not implemented for GitHub virtual repos — current consumers (timeline slice-by-branch)
|
|
111
|
+
// gate this off via `!repo.virtual`. A future implementation can use GraphQL `refs` /
|
|
112
|
+
// `commit.associatedRefs`.
|
|
113
|
+
return Promise.resolve([]);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
@debug()
|
|
117
|
+
getRefsContainingShas(
|
|
118
|
+
_repoPath: string,
|
|
119
|
+
_shas: ReadonlySet<string> | readonly string[],
|
|
120
|
+
_oldestSha: string,
|
|
121
|
+
_options?: { include?: ReadonlyArray<'heads' | 'remotes' | 'tags'> },
|
|
122
|
+
_cancellation?: AbortSignal,
|
|
123
|
+
): Promise<Map<string, GitRefTip[]>> {
|
|
124
|
+
// See `getRefTips` — gated off for virtual repos until GraphQL `commit.associatedRefs` lands.
|
|
125
|
+
return Promise.resolve(new Map<string, GitRefTip[]>());
|
|
126
|
+
}
|
|
127
|
+
|
|
93
128
|
@debug()
|
|
94
129
|
async hasBranchOrTag(
|
|
95
130
|
repoPath: string | undefined,
|
|
@@ -2,6 +2,7 @@ import type { GitFile } from '../../../../git/models/file.js';
|
|
|
2
2
|
import type { GitConflictFile } from '../../../../git/models/staging.js';
|
|
3
3
|
import { GitStatus } from '../../../../git/models/status.js';
|
|
4
4
|
import type { GitStatusSubProvider, GitWorkingChangesState } from '../../../../git/providers/status.js';
|
|
5
|
+
import type { GitCommandPriority } from '../../../../git/run.types.js';
|
|
5
6
|
import { gate } from '../../../../utils/decorators/gate.js';
|
|
6
7
|
import { debug } from '../../../../utils/decorators/log.js';
|
|
7
8
|
import { HeadType } from '../../context.js';
|
|
@@ -12,7 +13,11 @@ export class StatusGitSubProvider implements GitStatusSubProvider {
|
|
|
12
13
|
|
|
13
14
|
@gate()
|
|
14
15
|
@debug()
|
|
15
|
-
async getStatus(
|
|
16
|
+
async getStatus(
|
|
17
|
+
repoPath: string | undefined,
|
|
18
|
+
_options?: { priority?: GitCommandPriority },
|
|
19
|
+
_cancellation?: AbortSignal,
|
|
20
|
+
): Promise<GitStatus | undefined> {
|
|
16
21
|
if (repoPath == null) return undefined;
|
|
17
22
|
|
|
18
23
|
const context = await this.provider.ensureRepositoryContext(repoPath);
|