@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
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { graphql, GraphqlResponseError } from '@octokit/graphql';
|
|
2
|
+
import { request } from '@octokit/request';
|
|
3
|
+
import { RequestError } from '@octokit/request-error';
|
|
4
|
+
import type { Endpoints, RequestParameters } from '@octokit/types';
|
|
1
5
|
import {
|
|
2
6
|
AuthenticationError,
|
|
3
7
|
AuthenticationErrorReason,
|
|
@@ -37,10 +41,6 @@ import { maybeStopWatch } from '../../../utils/stopwatch.js';
|
|
|
37
41
|
import { parseUri } from '../../../utils/uri.js';
|
|
38
42
|
import type { Version } from '../../../utils/version.js';
|
|
39
43
|
import { fromString, satisfies } from '../../../utils/version.js';
|
|
40
|
-
import { graphql, GraphqlResponseError } from '@octokit/graphql';
|
|
41
|
-
import { request } from '@octokit/request';
|
|
42
|
-
import { RequestError } from '@octokit/request-error';
|
|
43
|
-
import type { Endpoints, RequestParameters } from '@octokit/types';
|
|
44
44
|
import type {
|
|
45
45
|
GitHubBlame,
|
|
46
46
|
GitHubBlameRange,
|
|
@@ -120,7 +120,7 @@ repository {
|
|
|
120
120
|
const gqlPullRequestFragment = `
|
|
121
121
|
${gqlPullRequestLiteFragment}
|
|
122
122
|
additions
|
|
123
|
-
assignees(first:
|
|
123
|
+
assignees(first: 25) {
|
|
124
124
|
nodes {
|
|
125
125
|
login
|
|
126
126
|
avatarUrl(size: $avatarSize)
|
|
@@ -134,7 +134,7 @@ mergedBy {
|
|
|
134
134
|
login
|
|
135
135
|
}
|
|
136
136
|
reviewDecision
|
|
137
|
-
latestReviews(first:
|
|
137
|
+
latestReviews(first: 25) {
|
|
138
138
|
nodes {
|
|
139
139
|
author {
|
|
140
140
|
login
|
|
@@ -144,7 +144,7 @@ latestReviews(first: 10) {
|
|
|
144
144
|
state
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
|
-
reviewRequests(first:
|
|
147
|
+
reviewRequests(first: 25) {
|
|
148
148
|
nodes {
|
|
149
149
|
asCodeOwner
|
|
150
150
|
id
|
|
@@ -187,7 +187,7 @@ author {
|
|
|
187
187
|
comments {
|
|
188
188
|
totalCount
|
|
189
189
|
}
|
|
190
|
-
labels(first:
|
|
190
|
+
labels(first: 50) {
|
|
191
191
|
nodes {
|
|
192
192
|
color
|
|
193
193
|
name
|
|
@@ -1138,7 +1138,7 @@ export class GitHubApi {
|
|
|
1138
1138
|
endingLine
|
|
1139
1139
|
commit {
|
|
1140
1140
|
oid
|
|
1141
|
-
parents(first:
|
|
1141
|
+
parents(first: 8) { nodes { oid } }
|
|
1142
1142
|
message
|
|
1143
1143
|
additions
|
|
1144
1144
|
changedFiles
|
|
@@ -1406,7 +1406,7 @@ export class GitHubApi {
|
|
|
1406
1406
|
$until: GitTimestamp!
|
|
1407
1407
|
) {
|
|
1408
1408
|
repository(owner: $owner, name: $repo) {
|
|
1409
|
-
refs(first:
|
|
1409
|
+
refs(first: 100, refPrefix: "refs/heads/") {
|
|
1410
1410
|
nodes {
|
|
1411
1411
|
name
|
|
1412
1412
|
target {
|
|
@@ -1691,7 +1691,7 @@ export class GitHubApi {
|
|
|
1691
1691
|
... on Commit {
|
|
1692
1692
|
oid
|
|
1693
1693
|
message
|
|
1694
|
-
parents(first:
|
|
1694
|
+
parents(first: 8) { nodes { oid } }
|
|
1695
1695
|
additions
|
|
1696
1696
|
changedFiles
|
|
1697
1697
|
deletions
|
|
@@ -1767,6 +1767,115 @@ export class GitHubApi {
|
|
|
1767
1767
|
}
|
|
1768
1768
|
}
|
|
1769
1769
|
|
|
1770
|
+
@trace({
|
|
1771
|
+
args: (token, owner, repo, ref) => ({
|
|
1772
|
+
token: `<token:${token.microHash}>`,
|
|
1773
|
+
owner: owner,
|
|
1774
|
+
repo: repo,
|
|
1775
|
+
ref: ref,
|
|
1776
|
+
}),
|
|
1777
|
+
})
|
|
1778
|
+
async getCommitShas(
|
|
1779
|
+
token: GitHubTokenInfo,
|
|
1780
|
+
owner: string,
|
|
1781
|
+
repo: string,
|
|
1782
|
+
ref: string,
|
|
1783
|
+
options?: {
|
|
1784
|
+
after?: string;
|
|
1785
|
+
before?: string;
|
|
1786
|
+
limit?: number;
|
|
1787
|
+
path?: string;
|
|
1788
|
+
since?: string | Date;
|
|
1789
|
+
until?: string | Date;
|
|
1790
|
+
},
|
|
1791
|
+
): Promise<PagedResult<string>> {
|
|
1792
|
+
const scope = getScopedLogger();
|
|
1793
|
+
|
|
1794
|
+
interface QueryResult {
|
|
1795
|
+
repository:
|
|
1796
|
+
| {
|
|
1797
|
+
object:
|
|
1798
|
+
| {
|
|
1799
|
+
history: {
|
|
1800
|
+
pageInfo: GitHubPageInfo;
|
|
1801
|
+
nodes: { oid: string }[];
|
|
1802
|
+
};
|
|
1803
|
+
}
|
|
1804
|
+
| null
|
|
1805
|
+
| undefined;
|
|
1806
|
+
}
|
|
1807
|
+
| null
|
|
1808
|
+
| undefined;
|
|
1809
|
+
}
|
|
1810
|
+
|
|
1811
|
+
try {
|
|
1812
|
+
const query = `query getCommitShas(
|
|
1813
|
+
$owner: String!
|
|
1814
|
+
$repo: String!
|
|
1815
|
+
$ref: String!
|
|
1816
|
+
$path: String
|
|
1817
|
+
$after: String
|
|
1818
|
+
$before: String
|
|
1819
|
+
$limit: Int = 100
|
|
1820
|
+
$since: GitTimestamp
|
|
1821
|
+
$until: GitTimestamp
|
|
1822
|
+
) {
|
|
1823
|
+
repository(name: $repo, owner: $owner) {
|
|
1824
|
+
object(expression: $ref) {
|
|
1825
|
+
... on Commit {
|
|
1826
|
+
history(first: $limit, path: $path, after: $after, before: $before, since: $since, until: $until) {
|
|
1827
|
+
pageInfo {
|
|
1828
|
+
startCursor
|
|
1829
|
+
endCursor
|
|
1830
|
+
hasNextPage
|
|
1831
|
+
hasPreviousPage
|
|
1832
|
+
}
|
|
1833
|
+
nodes {
|
|
1834
|
+
... on Commit { oid }
|
|
1835
|
+
}
|
|
1836
|
+
}
|
|
1837
|
+
}
|
|
1838
|
+
}
|
|
1839
|
+
}
|
|
1840
|
+
}`;
|
|
1841
|
+
|
|
1842
|
+
const rsp = await this.graphql<QueryResult>(
|
|
1843
|
+
undefined,
|
|
1844
|
+
token,
|
|
1845
|
+
query,
|
|
1846
|
+
{
|
|
1847
|
+
owner: owner,
|
|
1848
|
+
repo: repo,
|
|
1849
|
+
ref: ref,
|
|
1850
|
+
after: options?.after,
|
|
1851
|
+
before: options?.before,
|
|
1852
|
+
path: options?.path,
|
|
1853
|
+
limit: Math.min(100, options?.limit ?? 100),
|
|
1854
|
+
since: typeof options?.since === 'string' ? options?.since : options?.since?.toISOString(),
|
|
1855
|
+
until: typeof options?.until === 'string' ? options?.until : options?.until?.toISOString(),
|
|
1856
|
+
},
|
|
1857
|
+
scope,
|
|
1858
|
+
);
|
|
1859
|
+
const history = rsp?.repository?.object?.history;
|
|
1860
|
+
if (history == null) return emptyPagedResult;
|
|
1861
|
+
|
|
1862
|
+
return {
|
|
1863
|
+
paging:
|
|
1864
|
+
history.pageInfo.endCursor != null
|
|
1865
|
+
? {
|
|
1866
|
+
cursor: history.pageInfo.endCursor ?? undefined,
|
|
1867
|
+
more: history.pageInfo.hasNextPage,
|
|
1868
|
+
}
|
|
1869
|
+
: undefined,
|
|
1870
|
+
values: history.nodes.map(n => n.oid),
|
|
1871
|
+
};
|
|
1872
|
+
} catch (ex) {
|
|
1873
|
+
if (ex instanceof RequestNotFoundError) return emptyPagedResult;
|
|
1874
|
+
|
|
1875
|
+
throw this.handleException(ex, undefined, scope);
|
|
1876
|
+
}
|
|
1877
|
+
}
|
|
1878
|
+
|
|
1770
1879
|
private async getCommitsCoreRange(
|
|
1771
1880
|
token: GitHubTokenInfo,
|
|
1772
1881
|
owner: string,
|
|
@@ -1830,7 +1939,7 @@ export class GitHubApi {
|
|
|
1830
1939
|
object(expression: $ref) {
|
|
1831
1940
|
...on Commit {
|
|
1832
1941
|
oid
|
|
1833
|
-
parents(first:
|
|
1942
|
+
parents(first: 8) { nodes { oid } }
|
|
1834
1943
|
message
|
|
1835
1944
|
additions
|
|
1836
1945
|
changedFiles
|
|
@@ -2016,12 +2125,12 @@ export class GitHubApi {
|
|
|
2016
2125
|
$until: GitTimestamp!
|
|
2017
2126
|
) {
|
|
2018
2127
|
repository(owner: $owner, name: $repo) {
|
|
2019
|
-
refs(first:
|
|
2128
|
+
refs(first: 100, refPrefix: "refs/tags/") {
|
|
2020
2129
|
nodes {
|
|
2021
2130
|
name
|
|
2022
2131
|
target {
|
|
2023
2132
|
... on Commit {
|
|
2024
|
-
history(first:
|
|
2133
|
+
history(first: 10, since: $since until: $until) {
|
|
2025
2134
|
nodes { oid }
|
|
2026
2135
|
}
|
|
2027
2136
|
}
|
|
@@ -2757,6 +2866,10 @@ export class GitHubApi {
|
|
|
2757
2866
|
return version ?? undefined;
|
|
2758
2867
|
}
|
|
2759
2868
|
|
|
2869
|
+
// Inflight dedupe: identical concurrent GraphQL requests share a single promise
|
|
2870
|
+
// to cut redundant traffic during graph/details enrichment bursts.
|
|
2871
|
+
private readonly _pendingGraphQL = new Map<string, Promise<unknown>>();
|
|
2872
|
+
|
|
2760
2873
|
private async graphql<T>(
|
|
2761
2874
|
provider: Provider | undefined,
|
|
2762
2875
|
token: GitHubTokenInfo,
|
|
@@ -2766,56 +2879,89 @@ export class GitHubApi {
|
|
|
2766
2879
|
cancellation?: CancellationToken | undefined,
|
|
2767
2880
|
): Promise<T | undefined> {
|
|
2768
2881
|
const { accessToken, ...tokenInfo } = token;
|
|
2769
|
-
try {
|
|
2770
|
-
let aborter: AbortController | undefined;
|
|
2771
|
-
if (cancellation != null) {
|
|
2772
|
-
if (cancellation.isCancellationRequested) throw new CancellationError();
|
|
2773
2882
|
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
}
|
|
2883
|
+
// Only dedupe when no cancellation/request option is in play — sharing a promise that
|
|
2884
|
+
// carries one caller's AbortSignal would let one cancellation cancel for everyone.
|
|
2885
|
+
const dedupable = cancellation == null && variables?.request == null;
|
|
2886
|
+
let dedupeKey: string | undefined;
|
|
2887
|
+
if (dedupable) {
|
|
2888
|
+
try {
|
|
2889
|
+
dedupeKey = `${token.microHash}|${provider?.id ?? ''}|${query}|${JSON.stringify(variables ?? null)}`;
|
|
2890
|
+
} catch {
|
|
2891
|
+
// Non-serializable variable (BigInt, function, circular ref) — fall through to direct exec.
|
|
2892
|
+
dedupeKey = undefined;
|
|
2781
2893
|
}
|
|
2894
|
+
if (dedupeKey != null) {
|
|
2895
|
+
const inflight = this._pendingGraphQL.get(dedupeKey);
|
|
2896
|
+
if (inflight != null) return inflight as Promise<T | undefined>;
|
|
2897
|
+
}
|
|
2898
|
+
}
|
|
2782
2899
|
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
|
|
2793
|
-
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
|
|
2797
|
-
|
|
2798
|
-
|
|
2799
|
-
|
|
2800
|
-
|
|
2900
|
+
const run = async (): Promise<T | undefined> => {
|
|
2901
|
+
try {
|
|
2902
|
+
let aborter: AbortController | undefined;
|
|
2903
|
+
if (cancellation != null) {
|
|
2904
|
+
if (cancellation.isCancellationRequested) throw new CancellationError();
|
|
2905
|
+
|
|
2906
|
+
aborter = new AbortController();
|
|
2907
|
+
cancellation.onCancellationRequested(() => aborter!.abort());
|
|
2908
|
+
|
|
2909
|
+
variables = {
|
|
2910
|
+
...variables,
|
|
2911
|
+
request: { ...variables?.request, signal: aborter.signal },
|
|
2912
|
+
};
|
|
2913
|
+
}
|
|
2914
|
+
|
|
2915
|
+
return await this.config.wrapForForcedInsecureSSL(provider?.getIgnoreSSLErrors() ?? false, () =>
|
|
2916
|
+
this.getDefaults(accessToken, graphql)(query, variables),
|
|
2917
|
+
);
|
|
2918
|
+
} catch (ex) {
|
|
2919
|
+
if (ex instanceof GraphqlResponseError) {
|
|
2920
|
+
switch (ex.errors?.[0]?.type) {
|
|
2921
|
+
case 'NOT_FOUND':
|
|
2922
|
+
throw new RequestNotFoundError(ex);
|
|
2923
|
+
case 'FORBIDDEN':
|
|
2924
|
+
throw new AuthenticationError(tokenInfo, AuthenticationErrorReason.Forbidden, ex);
|
|
2925
|
+
case 'RATE_LIMITED': {
|
|
2926
|
+
let resetAt: number | undefined;
|
|
2927
|
+
|
|
2928
|
+
const reset = ex.headers?.['x-ratelimit-reset'];
|
|
2929
|
+
if (reset != null) {
|
|
2930
|
+
resetAt = parseInt(reset, 10);
|
|
2931
|
+
if (Number.isNaN(resetAt)) {
|
|
2932
|
+
resetAt = undefined;
|
|
2933
|
+
}
|
|
2801
2934
|
}
|
|
2935
|
+
|
|
2936
|
+
throw new RequestRateLimitError(ex, accessToken, resetAt);
|
|
2802
2937
|
}
|
|
2938
|
+
}
|
|
2803
2939
|
|
|
2804
|
-
|
|
2940
|
+
if (Logger.isDebugging) {
|
|
2941
|
+
this.config.onDebugError?.(`GitHub request failed: ${ex.errors?.[0]?.message ?? ex.message}`);
|
|
2805
2942
|
}
|
|
2943
|
+
} else if (ex instanceof RequestError || ex.name === 'AbortError') {
|
|
2944
|
+
this.handleRequestError(provider, token, ex, scope);
|
|
2945
|
+
} else if (Logger.isDebugging) {
|
|
2946
|
+
this.config.onDebugError?.(`GitHub request failed: ${ex.message}`);
|
|
2806
2947
|
}
|
|
2807
2948
|
|
|
2808
|
-
|
|
2809
|
-
this.config.onDebugError?.(`GitHub request failed: ${ex.errors?.[0]?.message ?? ex.message}`);
|
|
2810
|
-
}
|
|
2811
|
-
} else if (ex instanceof RequestError || ex.name === 'AbortError') {
|
|
2812
|
-
this.handleRequestError(provider, token, ex, scope);
|
|
2813
|
-
} else if (Logger.isDebugging) {
|
|
2814
|
-
this.config.onDebugError?.(`GitHub request failed: ${ex.message}`);
|
|
2949
|
+
throw ex;
|
|
2815
2950
|
}
|
|
2951
|
+
};
|
|
2816
2952
|
|
|
2817
|
-
|
|
2818
|
-
|
|
2953
|
+
if (dedupeKey == null) return run();
|
|
2954
|
+
|
|
2955
|
+
const promise = run();
|
|
2956
|
+
this._pendingGraphQL.set(dedupeKey, promise);
|
|
2957
|
+
// Clear from the inflight map once the promise settles — successes and failures both
|
|
2958
|
+
// clear, so failed requests don't poison subsequent retries.
|
|
2959
|
+
void promise.finally(() => {
|
|
2960
|
+
if (this._pendingGraphQL.get(dedupeKey) === promise) {
|
|
2961
|
+
this._pendingGraphQL.delete(dedupeKey);
|
|
2962
|
+
}
|
|
2963
|
+
});
|
|
2964
|
+
return promise;
|
|
2819
2965
|
}
|
|
2820
2966
|
|
|
2821
2967
|
private async request<R extends keyof Endpoints>(
|
|
@@ -103,6 +103,21 @@ export interface GitHubApiClient {
|
|
|
103
103
|
},
|
|
104
104
|
): Promise<PagedResult<GitHubCommit> & { viewer?: string }>;
|
|
105
105
|
|
|
106
|
+
getCommitShas(
|
|
107
|
+
token: GitHubTokenInfo,
|
|
108
|
+
owner: string,
|
|
109
|
+
repo: string,
|
|
110
|
+
ref: string,
|
|
111
|
+
options?: {
|
|
112
|
+
after?: string;
|
|
113
|
+
before?: string;
|
|
114
|
+
limit?: number;
|
|
115
|
+
path?: string;
|
|
116
|
+
since?: string | Date;
|
|
117
|
+
until?: string | Date;
|
|
118
|
+
},
|
|
119
|
+
): Promise<PagedResult<string>>;
|
|
120
|
+
|
|
106
121
|
getCommitRefs(
|
|
107
122
|
token: GitHubTokenInfo,
|
|
108
123
|
owner: string,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Endpoints } from '@octokit/types';
|
|
1
2
|
import { GitFileIndexStatus } from '../../git/models/fileStatus.js';
|
|
2
3
|
import type { IssueLabel } from '../../git/models/issue.js';
|
|
3
4
|
import { Issue, RepositoryAccessLevel } from '../../git/models/issue.js';
|
|
@@ -10,7 +11,6 @@ import {
|
|
|
10
11
|
PullRequestStatusCheckRollupState,
|
|
11
12
|
} from '../../git/models/pullRequest.js';
|
|
12
13
|
import type { Provider } from '../../git/models/remoteProvider.js';
|
|
13
|
-
import type { Endpoints } from '@octokit/types';
|
|
14
14
|
|
|
15
15
|
export interface GitHubBlame {
|
|
16
16
|
ranges: GitHubBlameRange[];
|
|
@@ -73,6 +73,7 @@ export class BlameGitHubSubProvider implements GitBlameSubProvider {
|
|
|
73
73
|
let blameLine = blame.lines[editorLine];
|
|
74
74
|
if (blameLine == null) {
|
|
75
75
|
if (blame.lines.length !== editorLine) return undefined;
|
|
76
|
+
|
|
76
77
|
blameLine = blame.lines[editorLine - 1];
|
|
77
78
|
}
|
|
78
79
|
|
|
@@ -106,6 +107,7 @@ export class BlameGitHubSubProvider implements GitBlameSubProvider {
|
|
|
106
107
|
try {
|
|
107
108
|
const context = await this.provider.ensureRepositoryContext(repoPath);
|
|
108
109
|
if (context == null) return undefined;
|
|
110
|
+
|
|
109
111
|
const { metadata, github, session } = context;
|
|
110
112
|
|
|
111
113
|
const root = this.provider.createVirtualUri(repoPath, undefined);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Cache } from '../../../../git/cache.js';
|
|
2
2
|
import { GitBranch } from '../../../../git/models/branch.js';
|
|
3
3
|
import type { BranchContributionsOverview, GitBranchesSubProvider } from '../../../../git/providers/branches.js';
|
|
4
|
+
import type { GitCommandPriority } from '../../../../git/run.types.js';
|
|
4
5
|
import { createRevisionRange, stripOrigin } from '../../../../git/utils/revision.utils.js';
|
|
5
6
|
import type { BranchSortOptions } from '../../../../git/utils/sorting.js';
|
|
6
7
|
import { sortBranches, sortContributors } from '../../../../git/utils/sorting.js';
|
|
@@ -86,6 +87,7 @@ export class BranchesGitSubProvider implements GitBranchesSubProvider {
|
|
|
86
87
|
cancellation?: AbortSignal,
|
|
87
88
|
): Promise<PagedResult<GitBranch>> {
|
|
88
89
|
if (repoPath == null) return emptyPagedResult;
|
|
90
|
+
|
|
89
91
|
const path = repoPath;
|
|
90
92
|
|
|
91
93
|
const scope = getScopedLogger();
|
|
@@ -176,12 +178,14 @@ export class BranchesGitSubProvider implements GitBranchesSubProvider {
|
|
|
176
178
|
}
|
|
177
179
|
};
|
|
178
180
|
|
|
179
|
-
//
|
|
180
|
-
//
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
181
|
+
// Compose cache key with cursor so re-loads of the same page hit the cache;
|
|
182
|
+
// `repoPath` (no suffix) is reserved for the full "all branches" entry.
|
|
183
|
+
// TODO: `cache.branches` is `PromiseMap<RepoPath, ...>` keyed exactly by repoPath, so
|
|
184
|
+
// `clearCaches('branches')` / `unregisterRepoPath` will not invalidate composite-key entries.
|
|
185
|
+
// Acceptable today because branches don't change during a virtual-repo session, but the entries
|
|
186
|
+
// leak in memory until provider GC. Long-term: switch to RepoPromiseCacheMap or add prefix-invalidate.
|
|
187
|
+
const cacheKey = options?.paging?.cursor != null ? `${path}#${options.paging.cursor}` : path;
|
|
188
|
+
const branchesPromise = this.cache.branches.getOrCreate(cacheKey, cacheable => load(cacheable), cancellation);
|
|
185
189
|
|
|
186
190
|
let result = await branchesPromise;
|
|
187
191
|
if (options?.filter != null) {
|
|
@@ -202,28 +206,19 @@ export class BranchesGitSubProvider implements GitBranchesSubProvider {
|
|
|
202
206
|
async getBranchContributionsOverview(
|
|
203
207
|
repoPath: string,
|
|
204
208
|
ref: string,
|
|
205
|
-
|
|
209
|
+
// `priority` is unused — the GitHub provider doesn't go through the local git command
|
|
210
|
+
// queue, so the priority signal has no effect here. Accepted for interface compatibility.
|
|
211
|
+
options?: {
|
|
212
|
+
associatedPullRequest?: Promise<{ refs?: { base?: { branch: string } } } | undefined>;
|
|
213
|
+
priority?: GitCommandPriority;
|
|
214
|
+
},
|
|
206
215
|
_cancellation?: AbortSignal,
|
|
207
216
|
): Promise<BranchContributionsOverview | undefined> {
|
|
208
217
|
const scope = getScopedLogger();
|
|
209
218
|
|
|
210
|
-
//
|
|
211
|
-
//
|
|
212
|
-
|
|
213
|
-
try {
|
|
214
|
-
let mergeTarget: string | undefined;
|
|
215
|
-
|
|
216
|
-
// PR-based lookup (GitHub provider has no stored targets or base branch detection)
|
|
217
|
-
if (options?.associatedPullRequest != null) {
|
|
218
|
-
const pr = await options.associatedPullRequest;
|
|
219
|
-
if (pr?.refs?.base != null) {
|
|
220
|
-
mergeTarget = pr.refs.base.branch;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
mergeTarget ??= await this.getDefaultBranchName(repoPath);
|
|
225
|
-
if (mergeTarget == null) return undefined;
|
|
226
|
-
|
|
219
|
+
// Expensive body — runs only on cache miss. Closes over `mergeTarget` so the cache key
|
|
220
|
+
// (`${ref}|${mergeTarget}`) fully captures every input that affects the result.
|
|
221
|
+
const fetchBody = async (mergeTarget: string): Promise<BranchContributionsOverview | undefined> => {
|
|
227
222
|
const mergeBase = await this.provider.refs.getMergeBase(repoPath, ref, mergeTarget);
|
|
228
223
|
if (mergeBase == null) return undefined;
|
|
229
224
|
|
|
@@ -288,6 +283,31 @@ export class BranchesGitSubProvider implements GitBranchesSubProvider {
|
|
|
288
283
|
|
|
289
284
|
contributors: result.contributors,
|
|
290
285
|
};
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
try {
|
|
289
|
+
// Resolve `mergeTarget` (PR base or default branch). Only the expensive body below is
|
|
290
|
+
// cached — keyed on `${ref}|${mergeTarget}` so callers that resolve to the same target
|
|
291
|
+
// share the result, while differing targets get independent slots.
|
|
292
|
+
let mergeTarget: string | undefined;
|
|
293
|
+
|
|
294
|
+
if (options?.associatedPullRequest != null) {
|
|
295
|
+
const pr = await options.associatedPullRequest;
|
|
296
|
+
if (pr?.refs?.base != null) {
|
|
297
|
+
mergeTarget = pr.refs.base.branch;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
mergeTarget ??= await this.getDefaultBranchName(repoPath);
|
|
302
|
+
if (mergeTarget == null) return undefined;
|
|
303
|
+
|
|
304
|
+
// Safe to cache despite PR retargeting: the cache key includes the resolved `mergeTarget`,
|
|
305
|
+
// so a retargeted PR resolves to a fresh slot and the old entry is stale-but-unused (and
|
|
306
|
+
// TTL-evicts). The prior "no outer cache here" rationale assumed a `ref`-only key.
|
|
307
|
+
const resolvedTarget = mergeTarget;
|
|
308
|
+
return await this.cache.getBranchOverview(repoPath, `${ref}|${resolvedTarget}`, () =>
|
|
309
|
+
fetchBody(resolvedTarget),
|
|
310
|
+
);
|
|
291
311
|
} catch (ex) {
|
|
292
312
|
scope?.error(ex);
|
|
293
313
|
return undefined;
|
|
@@ -345,20 +365,30 @@ export class BranchesGitSubProvider implements GitBranchesSubProvider {
|
|
|
345
365
|
@debug()
|
|
346
366
|
async getDefaultBranchName(
|
|
347
367
|
repoPath: string | undefined,
|
|
348
|
-
|
|
368
|
+
remote?: string,
|
|
369
|
+
// `priority` is unused — the GitHub provider doesn't go through the local git command
|
|
370
|
+
// queue, so the priority signal has no effect here. Accepted for interface compatibility.
|
|
371
|
+
_options?: { priority?: GitCommandPriority },
|
|
349
372
|
_cancellation?: AbortSignal,
|
|
350
373
|
): Promise<string | undefined> {
|
|
351
374
|
if (repoPath == null) return undefined;
|
|
352
375
|
|
|
376
|
+
remote ??= 'origin';
|
|
377
|
+
|
|
353
378
|
const scope = getScopedLogger();
|
|
354
379
|
|
|
380
|
+
// Throw inside the factory so RepoPromiseCacheMap's default `expireOnError` evicts the
|
|
381
|
+
// entry — a transient API failure shouldn't poison the cache for the rest of the session.
|
|
382
|
+
// The outer try/catch preserves the existing `undefined`-on-error contract for callers.
|
|
355
383
|
try {
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
384
|
+
return await this.cache.getDefaultBranchName(repoPath, remote, async () => {
|
|
385
|
+
const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
|
|
386
|
+
return github.getDefaultBranchName(
|
|
387
|
+
toTokenInfo(this.provider.authenticationProviderId, session),
|
|
388
|
+
metadata.repo.owner,
|
|
389
|
+
metadata.repo.name,
|
|
390
|
+
);
|
|
391
|
+
});
|
|
362
392
|
} catch (ex) {
|
|
363
393
|
scope?.error(ex);
|
|
364
394
|
debugger;
|