@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.
Files changed (361) hide show
  1. package/CHANGELOG.md +4 -1
  2. package/dist/git/cache.d.ts +28 -4
  3. package/dist/git/cache.d.ts.map +1 -1
  4. package/dist/git/cache.js +82 -18
  5. package/dist/git/cache.js.map +1 -1
  6. package/dist/git/models/commit.d.ts.map +1 -1
  7. package/dist/git/models/commit.js.map +1 -1
  8. package/dist/git/models/reference.d.ts +31 -0
  9. package/dist/git/models/reference.d.ts.map +1 -1
  10. package/dist/git/models/remote.d.ts.map +1 -1
  11. package/dist/git/models/remote.js.map +1 -1
  12. package/dist/git/models/repository.d.ts +9 -1
  13. package/dist/git/models/repository.d.ts.map +1 -1
  14. package/dist/git/models/repository.js +19 -3
  15. package/dist/git/models/repository.js.map +1 -1
  16. package/dist/git/models/search.d.ts +2 -2
  17. package/dist/git/models/search.d.ts.map +1 -1
  18. package/dist/git/models/worktree.d.ts +4 -1
  19. package/dist/git/models/worktree.d.ts.map +1 -1
  20. package/dist/git/models/worktree.js +2 -2
  21. package/dist/git/models/worktree.js.map +1 -1
  22. package/dist/git/parsers/diffParser.d.ts.map +1 -1
  23. package/dist/git/parsers/diffParser.js.map +1 -1
  24. package/dist/git/providers/branches.d.ts +15 -4
  25. package/dist/git/providers/branches.d.ts.map +1 -1
  26. package/dist/git/providers/config.d.ts +4 -1
  27. package/dist/git/providers/config.d.ts.map +1 -1
  28. package/dist/git/providers/operations.d.ts +33 -10
  29. package/dist/git/providers/operations.d.ts.map +1 -1
  30. package/dist/git/providers/pausedOperations.d.ts +3 -1
  31. package/dist/git/providers/pausedOperations.d.ts.map +1 -1
  32. package/dist/git/providers/refs.d.ts +23 -2
  33. package/dist/git/providers/refs.d.ts.map +1 -1
  34. package/dist/git/providers/staging.d.ts +16 -0
  35. package/dist/git/providers/staging.d.ts.map +1 -1
  36. package/dist/git/providers/status.d.ts +4 -1
  37. package/dist/git/providers/status.d.ts.map +1 -1
  38. package/dist/git/remotes/azure-devops.d.ts.map +1 -1
  39. package/dist/git/remotes/azure-devops.js.map +1 -1
  40. package/dist/git/{exec.types.d.ts → run.types.d.ts} +22 -3
  41. package/dist/git/run.types.d.ts.map +1 -0
  42. package/dist/git/run.types.js +2 -0
  43. package/dist/git/run.types.js.map +1 -0
  44. package/dist/git/service.d.ts.map +1 -1
  45. package/dist/git/service.js.map +1 -1
  46. package/dist/git/utils/autolink.utils.d.ts.map +1 -1
  47. package/dist/git/utils/autolink.utils.js.map +1 -1
  48. package/dist/git/utils/blame.utils.d.ts.map +1 -1
  49. package/dist/git/utils/blame.utils.js.map +1 -1
  50. package/dist/git/utils/conflictResolution.utils.d.ts +6 -0
  51. package/dist/git/utils/conflictResolution.utils.d.ts.map +1 -0
  52. package/dist/git/utils/conflictResolution.utils.js +25 -0
  53. package/dist/git/utils/conflictResolution.utils.js.map +1 -0
  54. package/dist/git/utils/fileStatus.utils.d.ts +2 -1
  55. package/dist/git/utils/fileStatus.utils.d.ts.map +1 -1
  56. package/dist/git/utils/fileStatus.utils.js +4 -0
  57. package/dist/git/utils/fileStatus.utils.js.map +1 -1
  58. package/dist/git/utils/search.utils.d.ts.map +1 -1
  59. package/dist/git/utils/search.utils.js +3 -0
  60. package/dist/git/utils/search.utils.js.map +1 -1
  61. package/dist/git/utils/sorting.d.ts +8 -0
  62. package/dist/git/utils/sorting.d.ts.map +1 -1
  63. package/dist/git/utils/sorting.js +15 -0
  64. package/dist/git/utils/sorting.js.map +1 -1
  65. package/dist/git/utils/status.utils.d.ts.map +1 -1
  66. package/dist/git/utils/status.utils.js.map +1 -1
  67. package/dist/git/watching/classifyChange.d.ts.map +1 -1
  68. package/dist/git/watching/classifyChange.js +8 -0
  69. package/dist/git/watching/classifyChange.js.map +1 -1
  70. package/dist/git/watching/gitIgnoreFilter.js +1 -1
  71. package/dist/git/watching/gitIgnoreFilter.js.map +1 -1
  72. package/dist/git/watching/initWatcher.d.ts.map +1 -1
  73. package/dist/git/watching/initWatcher.js.map +1 -1
  74. package/dist/git/watching/watchGroup.d.ts.map +1 -1
  75. package/dist/git/watching/watchGroup.js.map +1 -1
  76. package/dist/git/watching/watchService.d.ts.map +1 -1
  77. package/dist/git/watching/watchService.js +24 -4
  78. package/dist/git/watching/watchService.js.map +1 -1
  79. package/dist/git/watching/watchSession.d.ts.map +1 -1
  80. package/dist/git/watching/watchSession.js.map +1 -1
  81. package/dist/git-cli/exec/exec.types.d.ts +1 -1
  82. package/dist/git-cli/exec/exec.types.d.ts.map +1 -1
  83. package/dist/git-cli/exec/git.d.ts +3 -3
  84. package/dist/git-cli/exec/git.d.ts.map +1 -1
  85. package/dist/git-cli/exec/git.js.map +1 -1
  86. package/dist/git-cli/exec/gitQueue.d.ts +10 -2
  87. package/dist/git-cli/exec/gitQueue.d.ts.map +1 -1
  88. package/dist/git-cli/exec/gitQueue.js +39 -12
  89. package/dist/git-cli/exec/gitQueue.js.map +1 -1
  90. package/dist/git-cli/parsers/blameParser.d.ts.map +1 -1
  91. package/dist/git-cli/parsers/blameParser.js.map +1 -1
  92. package/dist/git-cli/parsers/logParser.js.map +1 -1
  93. package/dist/git-cli/parsers/refParser.d.ts +3 -30
  94. package/dist/git-cli/parsers/refParser.d.ts.map +1 -1
  95. package/dist/git-cli/parsers/refParser.js +30 -30
  96. package/dist/git-cli/parsers/refParser.js.map +1 -1
  97. package/dist/git-cli/providers/blame.d.ts.map +1 -1
  98. package/dist/git-cli/providers/blame.js.map +1 -1
  99. package/dist/git-cli/providers/branches.d.ts +15 -5
  100. package/dist/git-cli/providers/branches.d.ts.map +1 -1
  101. package/dist/git-cli/providers/branches.js +98 -68
  102. package/dist/git-cli/providers/branches.js.map +1 -1
  103. package/dist/git-cli/providers/commits.d.ts.map +1 -1
  104. package/dist/git-cli/providers/commits.js +74 -30
  105. package/dist/git-cli/providers/commits.js.map +1 -1
  106. package/dist/git-cli/providers/config.d.ts +11 -2
  107. package/dist/git-cli/providers/config.d.ts.map +1 -1
  108. package/dist/git-cli/providers/config.js +27 -2
  109. package/dist/git-cli/providers/config.js.map +1 -1
  110. package/dist/git-cli/providers/diff.d.ts.map +1 -1
  111. package/dist/git-cli/providers/diff.js +4 -2
  112. package/dist/git-cli/providers/diff.js.map +1 -1
  113. package/dist/git-cli/providers/graph.d.ts.map +1 -1
  114. package/dist/git-cli/providers/graph.js +7 -2
  115. package/dist/git-cli/providers/graph.js.map +1 -1
  116. package/dist/git-cli/providers/operations.d.ts +13 -11
  117. package/dist/git-cli/providers/operations.d.ts.map +1 -1
  118. package/dist/git-cli/providers/operations.js +108 -38
  119. package/dist/git-cli/providers/operations.js.map +1 -1
  120. package/dist/git-cli/providers/patch.d.ts.map +1 -1
  121. package/dist/git-cli/providers/patch.js.map +1 -1
  122. package/dist/git-cli/providers/pausedOperations.d.ts +3 -1
  123. package/dist/git-cli/providers/pausedOperations.d.ts.map +1 -1
  124. package/dist/git-cli/providers/pausedOperations.js +7 -1
  125. package/dist/git-cli/providers/pausedOperations.js.map +1 -1
  126. package/dist/git-cli/providers/refs.d.ts +19 -2
  127. package/dist/git-cli/providers/refs.d.ts.map +1 -1
  128. package/dist/git-cli/providers/refs.js +286 -2
  129. package/dist/git-cli/providers/refs.js.map +1 -1
  130. package/dist/git-cli/providers/revision.js.map +1 -1
  131. package/dist/git-cli/providers/staging.d.ts +6 -0
  132. package/dist/git-cli/providers/staging.d.ts.map +1 -1
  133. package/dist/git-cli/providers/staging.js +32 -0
  134. package/dist/git-cli/providers/staging.js.map +1 -1
  135. package/dist/git-cli/providers/status.d.ts +4 -1
  136. package/dist/git-cli/providers/status.d.ts.map +1 -1
  137. package/dist/git-cli/providers/status.js +4 -3
  138. package/dist/git-cli/providers/status.js.map +1 -1
  139. package/dist/git-cli/providers/tags.d.ts.map +1 -1
  140. package/dist/git-cli/providers/tags.js +10 -6
  141. package/dist/git-cli/providers/tags.js.map +1 -1
  142. package/dist/ipc/discovery.d.ts +27 -0
  143. package/dist/ipc/discovery.d.ts.map +1 -0
  144. package/dist/ipc/discovery.js +38 -0
  145. package/dist/ipc/discovery.js.map +1 -0
  146. package/dist/ipc/ipcServer.d.ts +20 -0
  147. package/dist/ipc/ipcServer.d.ts.map +1 -0
  148. package/dist/ipc/ipcServer.js +162 -0
  149. package/dist/ipc/ipcServer.js.map +1 -0
  150. package/dist/plus/agents/providers/claudeCodeProvider.d.ts +114 -0
  151. package/dist/plus/agents/providers/claudeCodeProvider.d.ts.map +1 -0
  152. package/dist/plus/agents/providers/claudeCodeProvider.js +1480 -0
  153. package/dist/plus/agents/providers/claudeCodeProvider.js.map +1 -0
  154. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts +36 -0
  155. package/dist/plus/agents/providers/claudeCodeTranscript.d.ts.map +1 -0
  156. package/dist/plus/agents/providers/claudeCodeTranscript.js +171 -0
  157. package/dist/plus/agents/providers/claudeCodeTranscript.js.map +1 -0
  158. package/dist/plus/agents/sanitizePrompt.d.ts +15 -0
  159. package/dist/plus/agents/sanitizePrompt.d.ts.map +1 -0
  160. package/dist/plus/agents/sanitizePrompt.js +103 -0
  161. package/dist/plus/agents/sanitizePrompt.js.map +1 -0
  162. package/dist/plus/agents/stateMachine.d.ts +32 -0
  163. package/dist/plus/agents/stateMachine.d.ts.map +1 -0
  164. package/dist/plus/agents/stateMachine.js +180 -0
  165. package/dist/plus/agents/stateMachine.js.map +1 -0
  166. package/dist/plus/agents/types.d.ts +203 -0
  167. package/dist/plus/agents/types.d.ts.map +1 -0
  168. package/dist/plus/agents/types.js +49 -0
  169. package/dist/plus/agents/types.js.map +1 -0
  170. package/dist/plus/ai/errors.d.ts +4 -1
  171. package/dist/plus/ai/errors.d.ts.map +1 -1
  172. package/dist/plus/ai/errors.js +38 -0
  173. package/dist/plus/ai/errors.js.map +1 -1
  174. package/dist/plus/ai/models/promptTemplates.d.ts +11 -2
  175. package/dist/plus/ai/models/promptTemplates.d.ts.map +1 -1
  176. package/dist/plus/ai/prompts.d.ts +1 -0
  177. package/dist/plus/ai/prompts.d.ts.map +1 -1
  178. package/dist/plus/ai/prompts.js +48 -8
  179. package/dist/plus/ai/prompts.js.map +1 -1
  180. package/dist/plus/ai/utils/results.utils.d.ts.map +1 -1
  181. package/dist/plus/ai/utils/results.utils.js.map +1 -1
  182. package/dist/plus/git-github/api/github.d.ts +10 -1
  183. package/dist/plus/git-github/api/github.d.ts.map +1 -1
  184. package/dist/plus/git-github/api/github.js +156 -49
  185. package/dist/plus/git-github/api/github.js.map +1 -1
  186. package/dist/plus/git-github/api/types.d.ts +8 -0
  187. package/dist/plus/git-github/api/types.d.ts.map +1 -1
  188. package/dist/plus/git-github/models.d.ts +1 -1
  189. package/dist/plus/git-github/models.d.ts.map +1 -1
  190. package/dist/plus/git-github/models.js.map +1 -1
  191. package/dist/plus/git-github/providers/github/blame.d.ts.map +1 -1
  192. package/dist/plus/git-github/providers/github/blame.js.map +1 -1
  193. package/dist/plus/git-github/providers/github/branches.d.ts +5 -1
  194. package/dist/plus/git-github/providers/github/branches.d.ts.map +1 -1
  195. package/dist/plus/git-github/providers/github/branches.js +47 -24
  196. package/dist/plus/git-github/providers/github/branches.js.map +1 -1
  197. package/dist/plus/git-github/providers/github/commits.d.ts.map +1 -1
  198. package/dist/plus/git-github/providers/github/commits.js +144 -92
  199. package/dist/plus/git-github/providers/github/commits.js.map +1 -1
  200. package/dist/plus/git-github/providers/github/diff.d.ts +1 -1
  201. package/dist/plus/git-github/providers/github/diff.d.ts.map +1 -1
  202. package/dist/plus/git-github/providers/github/diff.js +23 -9
  203. package/dist/plus/git-github/providers/github/diff.js.map +1 -1
  204. package/dist/plus/git-github/providers/github/refs.d.ts +9 -1
  205. package/dist/plus/git-github/providers/github/refs.d.ts.map +1 -1
  206. package/dist/plus/git-github/providers/github/refs.js +38 -13
  207. package/dist/plus/git-github/providers/github/refs.js.map +1 -1
  208. package/dist/plus/git-github/providers/github/revision.d.ts.map +1 -1
  209. package/dist/plus/git-github/providers/github/revision.js +1 -2
  210. package/dist/plus/git-github/providers/github/revision.js.map +1 -1
  211. package/dist/plus/git-github/providers/github/status.d.ts +4 -1
  212. package/dist/plus/git-github/providers/github/status.d.ts.map +1 -1
  213. package/dist/plus/git-github/providers/github/status.js +1 -1
  214. package/dist/plus/git-github/providers/github/status.js.map +1 -1
  215. package/dist/plus/git-github/providers/github/tags.d.ts.map +1 -1
  216. package/dist/plus/git-github/providers/github/tags.js +35 -36
  217. package/dist/plus/git-github/providers/github/tags.js.map +1 -1
  218. package/dist/plus/git-github/providers/githubGitProvider.d.ts.map +1 -1
  219. package/dist/plus/git-github/providers/githubGitProvider.js.map +1 -1
  220. package/dist/utils/color.d.ts.map +1 -1
  221. package/dist/utils/color.js.map +1 -1
  222. package/dist/utils/decorators/serializable.d.ts.map +1 -1
  223. package/dist/utils/decorators/serializable.js.map +1 -1
  224. package/dist/utils/dedupedAsyncCache.d.ts +37 -0
  225. package/dist/utils/dedupedAsyncCache.d.ts.map +1 -0
  226. package/dist/utils/dedupedAsyncCache.js +68 -0
  227. package/dist/utils/dedupedAsyncCache.js.map +1 -0
  228. package/dist/utils/diff.d.ts +2 -0
  229. package/dist/utils/diff.d.ts.map +1 -0
  230. package/dist/utils/diff.js +53 -0
  231. package/dist/utils/diff.js.map +1 -0
  232. package/dist/utils/disposable.d.ts.map +1 -1
  233. package/dist/utils/disposable.js.map +1 -1
  234. package/dist/utils/env/node/exec.d.ts.map +1 -1
  235. package/dist/utils/env/node/exec.js.map +1 -1
  236. package/dist/utils/error.d.ts.map +1 -1
  237. package/dist/utils/error.js.map +1 -1
  238. package/dist/utils/iterable.d.ts.map +1 -1
  239. package/dist/utils/iterable.js.map +1 -1
  240. package/dist/utils/logger.d.ts.map +1 -1
  241. package/dist/utils/logger.js.map +1 -1
  242. package/dist/utils/lruMap.d.ts +9 -0
  243. package/dist/utils/lruMap.d.ts.map +1 -1
  244. package/dist/utils/lruMap.js +26 -4
  245. package/dist/utils/lruMap.js.map +1 -1
  246. package/dist/utils/markdown.d.ts.map +1 -1
  247. package/dist/utils/markdown.js.map +1 -1
  248. package/dist/utils/mru.d.ts.map +1 -1
  249. package/dist/utils/mru.js.map +1 -1
  250. package/dist/utils/path.d.ts.map +1 -1
  251. package/dist/utils/path.js.map +1 -1
  252. package/dist/utils/promise.d.ts +1 -0
  253. package/dist/utils/promise.d.ts.map +1 -1
  254. package/dist/utils/promise.js +17 -0
  255. package/dist/utils/promise.js.map +1 -1
  256. package/dist/utils/promiseCache.d.ts +10 -0
  257. package/dist/utils/promiseCache.d.ts.map +1 -1
  258. package/dist/utils/promiseCache.js +22 -0
  259. package/dist/utils/promiseCache.js.map +1 -1
  260. package/dist/utils/string.d.ts.map +1 -1
  261. package/dist/utils/string.js.map +1 -1
  262. package/dist/utils/uri.d.ts.map +1 -1
  263. package/dist/utils/uri.js.map +1 -1
  264. package/dist/utils/version.d.ts.map +1 -1
  265. package/dist/utils/version.js.map +1 -1
  266. package/package.json +13 -1
  267. package/src/git/cache.ts +142 -28
  268. package/src/git/models/commit.ts +1 -0
  269. package/src/git/models/reference.ts +33 -0
  270. package/src/git/models/remote.ts +1 -0
  271. package/src/git/models/repository.ts +21 -3
  272. package/src/git/models/search.ts +2 -2
  273. package/src/git/models/worktree.ts +10 -2
  274. package/src/git/parsers/diffParser.ts +2 -0
  275. package/src/git/providers/branches.ts +22 -4
  276. package/src/git/providers/config.ts +2 -0
  277. package/src/git/providers/operations.ts +44 -0
  278. package/src/git/providers/pausedOperations.ts +1 -0
  279. package/src/git/providers/refs.ts +32 -3
  280. package/src/git/providers/staging.ts +12 -0
  281. package/src/git/providers/status.ts +6 -1
  282. package/src/git/remotes/azure-devops.ts +2 -0
  283. package/src/git/{exec.types.ts → run.types.ts} +22 -2
  284. package/src/git/service.ts +1 -0
  285. package/src/git/utils/autolink.utils.ts +1 -0
  286. package/src/git/utils/blame.utils.ts +2 -0
  287. package/src/git/utils/conflictResolution.utils.ts +31 -0
  288. package/src/git/utils/fileStatus.utils.ts +7 -1
  289. package/src/git/utils/search.utils.ts +2 -0
  290. package/src/git/utils/sorting.ts +17 -0
  291. package/src/git/utils/status.utils.ts +1 -0
  292. package/src/git/watching/classifyChange.ts +9 -0
  293. package/src/git/watching/gitIgnoreFilter.ts +2 -2
  294. package/src/git/watching/initWatcher.ts +2 -0
  295. package/src/git/watching/watchGroup.ts +3 -0
  296. package/src/git/watching/watchService.ts +38 -5
  297. package/src/git/watching/watchSession.ts +10 -0
  298. package/src/git-cli/exec/exec.types.ts +2 -2
  299. package/src/git-cli/exec/git.ts +6 -5
  300. package/src/git-cli/exec/gitQueue.ts +41 -12
  301. package/src/git-cli/parsers/blameParser.ts +1 -0
  302. package/src/git-cli/parsers/logParser.ts +1 -0
  303. package/src/git-cli/parsers/refParser.ts +33 -34
  304. package/src/git-cli/providers/blame.ts +1 -0
  305. package/src/git-cli/providers/branches.ts +164 -93
  306. package/src/git-cli/providers/commits.ts +83 -37
  307. package/src/git-cli/providers/config.ts +41 -2
  308. package/src/git-cli/providers/diff.ts +8 -2
  309. package/src/git-cli/providers/graph.ts +11 -2
  310. package/src/git-cli/providers/operations.ts +186 -49
  311. package/src/git-cli/providers/patch.ts +1 -0
  312. package/src/git-cli/providers/pausedOperations.ts +8 -0
  313. package/src/git-cli/providers/refs.ts +247 -3
  314. package/src/git-cli/providers/revision.ts +2 -2
  315. package/src/git-cli/providers/staging.ts +33 -0
  316. package/src/git-cli/providers/status.ts +15 -4
  317. package/src/git-cli/providers/tags.ts +15 -16
  318. package/src/ipc/discovery.ts +56 -0
  319. package/src/ipc/ipcServer.ts +171 -0
  320. package/src/plus/agents/providers/claudeCodeProvider.ts +1782 -0
  321. package/src/plus/agents/providers/claudeCodeTranscript.ts +214 -0
  322. package/src/plus/agents/sanitizePrompt.ts +109 -0
  323. package/src/plus/agents/stateMachine.ts +197 -0
  324. package/src/plus/agents/types.ts +277 -0
  325. package/src/plus/ai/errors.ts +40 -0
  326. package/src/plus/ai/models/promptTemplates.ts +13 -0
  327. package/src/plus/ai/prompts.ts +49 -8
  328. package/src/plus/ai/utils/results.utils.ts +2 -0
  329. package/src/plus/git-github/api/github.ts +199 -53
  330. package/src/plus/git-github/api/types.ts +15 -0
  331. package/src/plus/git-github/models.ts +1 -1
  332. package/src/plus/git-github/providers/github/blame.ts +2 -0
  333. package/src/plus/git-github/providers/github/branches.ts +61 -31
  334. package/src/plus/git-github/providers/github/commits.ts +231 -160
  335. package/src/plus/git-github/providers/github/diff.ts +27 -19
  336. package/src/plus/git-github/providers/github/refs.ts +57 -22
  337. package/src/plus/git-github/providers/github/revision.ts +1 -2
  338. package/src/plus/git-github/providers/github/status.ts +6 -1
  339. package/src/plus/git-github/providers/github/tags.ts +61 -62
  340. package/src/plus/git-github/providers/githubGitProvider.ts +1 -0
  341. package/src/utils/color.ts +2 -0
  342. package/src/utils/decorators/serializable.ts +1 -0
  343. package/src/utils/dedupedAsyncCache.ts +74 -0
  344. package/src/utils/diff.ts +61 -0
  345. package/src/utils/disposable.ts +2 -0
  346. package/src/utils/env/node/exec.ts +2 -0
  347. package/src/utils/error.ts +1 -0
  348. package/src/utils/iterable.ts +3 -0
  349. package/src/utils/logger.ts +1 -0
  350. package/src/utils/lruMap.ts +29 -4
  351. package/src/utils/markdown.ts +1 -0
  352. package/src/utils/mru.ts +2 -0
  353. package/src/utils/path.ts +1 -0
  354. package/src/utils/promise.ts +22 -0
  355. package/src/utils/promiseCache.ts +24 -0
  356. package/src/utils/string.ts +2 -0
  357. package/src/utils/uri.ts +1 -0
  358. package/src/utils/version.ts +1 -0
  359. package/dist/git/exec.types.d.ts.map +0 -1
  360. package/dist/git/exec.types.js +0 -2
  361. 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
- async getCommit(repoPath: string, rev: string, _cancellation?: AbortSignal): Promise<GitCommit | undefined> {
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
- try {
50
- if (isUncommitted(rev, true)) {
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
- const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
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
- const commit = await github.getCommit(
62
- toTokenInfo(this.provider.authenticationProviderId, session),
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
- const repoUri = coerceUri(repoPath);
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
- const { viewer = session.account.label } = commit;
72
-
73
- return new GitCommit(
74
- repoPath,
75
- commit.oid,
76
- new GitCommitIdentity(
77
- commit.author.name,
78
- commit.author.email,
79
- new Date(commit.author.date),
80
- commit.author.avatarUrl,
81
- isViewer(commit.author.name, viewer),
82
- ),
83
- new GitCommitIdentity(
84
- commit.committer.name,
85
- commit.committer.email,
86
- new Date(commit.committer.date),
87
- undefined,
88
- isViewer(commit.committer.name, viewer),
89
- ),
90
- commit.message.split('\n', 1)[0],
91
- commit.parents.nodes.map(p => p.oid),
92
- commit.message,
93
- {
94
- files: commit.files?.map(f => toFileChange(repoUri, repoPath, f)),
95
- },
96
- {
97
- files: commit.changedFiles ?? 0,
98
- additions: commit.additions ?? 0,
99
- deletions: commit.deletions ?? 0,
100
- },
101
- [],
102
- );
103
- } catch (ex) {
104
- scope?.error(ex);
105
- debugger;
106
- return undefined;
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
- async getCommitCount(repoPath: string, rev: string, _cancellation?: AbortSignal): Promise<number | undefined> {
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
- const scope = getScopedLogger();
121
+ return this.cache.commitCount.getOrCreate(repoPath, stripOrigin(rev), async () => {
122
+ const scope = getScopedLogger();
115
123
 
116
- try {
117
- const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
124
+ try {
125
+ const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
118
126
 
119
- const count = await github.getCommitCount(
120
- toTokenInfo(this.provider.authenticationProviderId, session),
121
- metadata.repo.owner,
122
- metadata.repo.name,
123
- stripOrigin(rev),
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
- return count;
127
- } catch (ex) {
128
- scope?.error(ex);
129
- debugger;
130
- return undefined;
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 scope = getScopedLogger();
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
- const rootUri = this.provider.getProviderRootUri(this.provider.getAbsoluteUri(pathOrUri, repoPath));
158
- const file = this.provider.getRelativePath(this.provider.getAbsoluteUri(pathOrUri, repoPath), rootUri);
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
- rev = !rev || rev === 'HEAD' ? (await metadata.getRevision()).revision : rev;
161
- const commit = await github.getCommitForFile(
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
- const repoUri = coerceUri(repoPath);
171
- const { viewer = session.account.label } = commit;
172
-
173
- return new GitCommit(
174
- repoPath,
175
- commit.oid,
176
- new GitCommitIdentity(
177
- commit.author.name,
178
- commit.author.email,
179
- new Date(commit.author.date),
180
- commit.author.avatarUrl,
181
- isViewer(commit.author.name, viewer),
182
- ),
183
- new GitCommitIdentity(
184
- commit.committer.name,
185
- commit.committer.email,
186
- new Date(commit.committer.date),
187
- undefined,
188
- isViewer(commit.committer.name, viewer),
189
- ),
190
- commit.message.split('\n', 1)[0],
191
- commit.parents.nodes.map(p => p.oid),
192
- commit.message,
193
- commit.files != null
194
- ? {
195
- files: undefined,
196
- filtered: {
197
- files: commit.files?.map(f => toFileChange(repoUri, repoPath, f)),
198
- pathspec: file,
199
- },
200
- }
201
- : undefined,
202
- {
203
- files: commit.changedFiles ?? 0,
204
- additions: commit.additions ?? 0,
205
- deletions: commit.deletions ?? 0,
206
- },
207
- [],
208
- );
209
- } catch (ex) {
210
- scope?.error(ex);
211
- debugger;
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
- async getLeftRightCommitCount(
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
- const scope = getScopedLogger();
241
+ return this.cache.leftRightCommitCount.getOrCreate(repoPath, stripOrigin(range), async () => {
242
+ const scope = getScopedLogger();
226
243
 
227
- const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
244
+ const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
228
245
 
229
- try {
230
- const result = await github.getComparison(
231
- toTokenInfo(this.provider.authenticationProviderId, session),
232
- metadata.repo.owner,
233
- metadata.repo.name,
234
- stripOrigin(range),
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
- if (result == null) return undefined;
254
+ if (result == null) return undefined;
238
255
 
239
- return {
240
- left: result.behind_by,
241
- right: result.ahead_by,
242
- };
243
- } catch (ex) {
244
- scope?.error(ex);
245
- debugger;
246
- return undefined;
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
- // TODO@eamodio optimize this
623
+ if (repoPath == null) return [];
605
624
 
606
- let log: GitLog | undefined;
607
- if (options?.pathOrUri != null) {
608
- log = await this.getLogForPath(repoPath, options.pathOrUri, rev, options, cancellation);
609
- } else {
610
- log = await this.getLog(repoPath, rev, options, cancellation);
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 shas = map(log.commits.values(), c => c.ref);
615
- // Note: reversal only applies to the first page — subsequent pages loaded via pagination are not reversed
616
- return options?.reverse ? [...shas].reverse() : shas;
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
- _from?: string,
62
+ from?: string,
62
63
  _options?: { uris?: (string | Uri)[]; includeUntracked?: boolean },
63
64
  _cancellation?: AbortSignal,
64
65
  ): Promise<GitDiffShortStat | undefined> {
65
- // TODO@eamodio if there is no ref we can't return anything, until we can get at the change store from RemoteHub
66
- if (!to) return undefined;
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
- let result = await github.getComparison(
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 = files1;
127
+ let files;
128
128
  if (range2) {
129
- result = await github.getComparison(
130
- toTokenInfo(this.provider.authenticationProviderId, session),
131
- metadata.repo.owner,
132
- metadata.repo.name,
133
- stripOrigin(range2),
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 files2 = result?.files;
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
- async getMergeBase(
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 scope = getScopedLogger();
44
-
45
- const { metadata, github, session } = await this.provider.ensureRepositoryContext(repoPath);
46
-
47
- try {
48
- const result = await github.getComparison(
49
- toTokenInfo(this.provider.authenticationProviderId, session),
50
- metadata.repo.owner,
51
- metadata.repo.name,
52
- createRevisionRange(stripOrigin(ref1), stripOrigin(ref2), '...'),
53
- );
54
- return result?.merge_base_commit?.sha;
55
- } catch (ex) {
56
- scope?.error(ex);
57
- debugger;
58
- return undefined;
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,
@@ -98,8 +98,7 @@ export class RevisionGitSubProvider implements GitRevisionSubProvider {
98
98
  });
99
99
  }
100
100
 
101
- // TODO@eamodio: Implement this
102
- return [];
101
+ return result;
103
102
  }
104
103
 
105
104
  @debug()
@@ -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(repoPath: string | undefined, _cancellation?: AbortSignal): Promise<GitStatus | undefined> {
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);