git-chopstick-core 0.1.1 → 0.1.3

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 (461) hide show
  1. package/README.md +324 -32
  2. package/dist/git/add.d.ts +9 -0
  3. package/dist/git/add.js +11 -0
  4. package/dist/git/add.js.map +1 -0
  5. package/dist/git/apply.d.ts +33 -0
  6. package/dist/git/apply.js +103 -0
  7. package/dist/git/apply.js.map +1 -0
  8. package/dist/git/authentication.d.ts +5 -0
  9. package/dist/git/authentication.js +19 -0
  10. package/dist/git/authentication.js.map +1 -0
  11. package/dist/git/branch.d.ts +43 -0
  12. package/dist/git/branch.js +150 -0
  13. package/dist/git/branch.js.map +1 -0
  14. package/dist/git/checkout-index.d.ts +19 -0
  15. package/{src/git/checkout-index.ts → dist/git/checkout-index.js} +11 -22
  16. package/dist/git/checkout-index.js.map +1 -0
  17. package/dist/git/checkout.d.ts +46 -0
  18. package/dist/git/checkout.js +126 -0
  19. package/dist/git/checkout.js.map +1 -0
  20. package/dist/git/cherry-pick.d.ts +82 -0
  21. package/dist/git/cherry-pick.js +371 -0
  22. package/dist/git/cherry-pick.js.map +1 -0
  23. package/dist/git/clean.d.ts +5 -0
  24. package/dist/git/clean.js +8 -0
  25. package/dist/git/clean.js.map +1 -0
  26. package/dist/git/clone.d.ts +22 -0
  27. package/dist/git/clone.js +58 -0
  28. package/dist/git/clone.js.map +1 -0
  29. package/dist/git/coerce-to-buffer.d.ts +1 -0
  30. package/dist/git/coerce-to-buffer.js +2 -0
  31. package/dist/git/coerce-to-buffer.js.map +1 -0
  32. package/dist/git/coerce-to-string.d.ts +1 -0
  33. package/dist/git/coerce-to-string.js +2 -0
  34. package/dist/git/coerce-to-string.js.map +1 -0
  35. package/dist/git/commit.d.ts +25 -0
  36. package/dist/git/commit.js +99 -0
  37. package/dist/git/commit.js.map +1 -0
  38. package/dist/git/config.d.ts +98 -0
  39. package/dist/git/config.js +249 -0
  40. package/dist/git/config.js.map +1 -0
  41. package/dist/git/core.d.ts +167 -0
  42. package/dist/git/core.js +368 -0
  43. package/dist/git/core.js.map +1 -0
  44. package/dist/git/create-tail-stream.d.ts +4 -0
  45. package/dist/git/create-tail-stream.js +30 -0
  46. package/dist/git/create-tail-stream.js.map +1 -0
  47. package/dist/git/credential.d.ts +5 -0
  48. package/dist/git/credential.js +64 -0
  49. package/dist/git/credential.js.map +1 -0
  50. package/dist/git/description.d.ts +5 -0
  51. package/dist/git/description.js +24 -0
  52. package/dist/git/description.js.map +1 -0
  53. package/dist/git/diff-check.d.ts +7 -0
  54. package/dist/git/diff-check.js +17 -0
  55. package/dist/git/diff-check.js.map +1 -0
  56. package/dist/git/diff-index.d.ts +31 -0
  57. package/dist/git/diff-index.js +76 -0
  58. package/dist/git/diff-index.js.map +1 -0
  59. package/dist/git/diff.d.ts +81 -0
  60. package/dist/git/diff.js +611 -0
  61. package/dist/git/diff.js.map +1 -0
  62. package/dist/git/environment.d.ts +51 -0
  63. package/dist/git/environment.js +97 -0
  64. package/dist/git/environment.js.map +1 -0
  65. package/dist/git/exec.d.ts +109 -0
  66. package/dist/git/exec.js +224 -0
  67. package/dist/git/exec.js.map +1 -0
  68. package/dist/git/fetch.d.ts +25 -0
  69. package/dist/git/fetch.js +100 -0
  70. package/dist/git/fetch.js.map +1 -0
  71. package/dist/git/for-each-ref.d.ts +13 -0
  72. package/dist/git/for-each-ref.js +114 -0
  73. package/dist/git/for-each-ref.js.map +1 -0
  74. package/dist/git/format-patch.d.ts +10 -0
  75. package/dist/git/format-patch.js +16 -0
  76. package/dist/git/format-patch.js.map +1 -0
  77. package/dist/git/git-delimiter-parser.d.ts +38 -0
  78. package/dist/git/git-delimiter-parser.js +79 -0
  79. package/dist/git/git-delimiter-parser.js.map +1 -0
  80. package/dist/git/gitignore.d.ts +26 -0
  81. package/dist/git/gitignore.js +124 -0
  82. package/dist/git/gitignore.js.map +1 -0
  83. package/dist/git/index.d.ts +46 -0
  84. package/dist/git/index.js +47 -0
  85. package/dist/git/index.js.map +1 -0
  86. package/dist/git/init.d.ts +2 -0
  87. package/dist/git/init.js +7 -0
  88. package/dist/git/init.js.map +1 -0
  89. package/{src/git/interpret-trailers.ts → dist/git/interpret-trailers.d.ts} +9 -97
  90. package/dist/git/interpret-trailers.js +130 -0
  91. package/dist/git/interpret-trailers.js.map +1 -0
  92. package/dist/git/lfs.d.ts +25 -0
  93. package/dist/git/lfs.js +73 -0
  94. package/dist/git/lfs.js.map +1 -0
  95. package/dist/git/log.d.ts +56 -0
  96. package/dist/git/log.js +258 -0
  97. package/dist/git/log.js.map +1 -0
  98. package/dist/git/merge-tree.d.ts +13 -0
  99. package/dist/git/merge-tree.js +24 -0
  100. package/dist/git/merge-tree.js.map +1 -0
  101. package/dist/git/merge.d.ts +50 -0
  102. package/dist/git/merge.js +111 -0
  103. package/dist/git/merge.js.map +1 -0
  104. package/dist/git/multi-operation-terminal-output.d.ts +20 -0
  105. package/dist/git/multi-operation-terminal-output.js +56 -0
  106. package/dist/git/multi-operation-terminal-output.js.map +1 -0
  107. package/dist/git/pull.d.ts +24 -0
  108. package/dist/git/pull.js +91 -0
  109. package/dist/git/pull.js.map +1 -0
  110. package/{src/git/push-terminal-chunk.ts → dist/git/push-terminal-chunk.d.ts} +1 -23
  111. package/dist/git/push-terminal-chunk.js +36 -0
  112. package/dist/git/push-terminal-chunk.js.map +1 -0
  113. package/dist/git/push.d.ts +42 -0
  114. package/dist/git/push.js +80 -0
  115. package/dist/git/push.js.map +1 -0
  116. package/dist/git/rebase.d.ts +119 -0
  117. package/dist/git/rebase.js +415 -0
  118. package/dist/git/rebase.js.map +1 -0
  119. package/dist/git/reflog.d.ts +14 -0
  120. package/dist/git/reflog.js +88 -0
  121. package/dist/git/reflog.js.map +1 -0
  122. package/dist/git/refs.d.ts +26 -0
  123. package/dist/git/refs.js +53 -0
  124. package/dist/git/refs.js.map +1 -0
  125. package/dist/git/remote.d.ts +31 -0
  126. package/dist/git/remote.js +81 -0
  127. package/dist/git/remote.js.map +1 -0
  128. package/dist/git/reorder.d.ts +23 -0
  129. package/dist/git/reorder.js +111 -0
  130. package/dist/git/reorder.js.map +1 -0
  131. package/dist/git/reset.d.ts +41 -0
  132. package/dist/git/reset.js +86 -0
  133. package/dist/git/reset.js.map +1 -0
  134. package/dist/git/rev-list.d.ts +67 -0
  135. package/dist/git/rev-list.js +157 -0
  136. package/dist/git/rev-list.js.map +1 -0
  137. package/dist/git/rev-parse.d.ts +24 -0
  138. package/dist/git/rev-parse.js +65 -0
  139. package/dist/git/rev-parse.js.map +1 -0
  140. package/dist/git/revert.d.ts +12 -0
  141. package/dist/git/revert.js +30 -0
  142. package/dist/git/revert.js.map +1 -0
  143. package/dist/git/rm.d.ts +12 -0
  144. package/dist/git/rm.js +22 -0
  145. package/dist/git/rm.js.map +1 -0
  146. package/dist/git/show.d.ts +42 -0
  147. package/{src/git/show.ts → dist/git/show.js} +17 -46
  148. package/dist/git/show.js.map +1 -0
  149. package/dist/git/spawn.d.ts +18 -0
  150. package/dist/git/spawn.js +16 -0
  151. package/dist/git/spawn.js.map +1 -0
  152. package/dist/git/squash.d.ts +28 -0
  153. package/dist/git/squash.js +127 -0
  154. package/dist/git/squash.js.map +1 -0
  155. package/dist/git/stage.d.ts +21 -0
  156. package/dist/git/stage.js +72 -0
  157. package/dist/git/stage.js.map +1 -0
  158. package/dist/git/stash.d.ts +53 -0
  159. package/dist/git/stash.js +204 -0
  160. package/dist/git/stash.js.map +1 -0
  161. package/dist/git/status.d.ts +39 -0
  162. package/dist/git/status.js +293 -0
  163. package/dist/git/status.js.map +1 -0
  164. package/dist/git/submodule.d.ts +20 -0
  165. package/dist/git/submodule.js +153 -0
  166. package/dist/git/submodule.js.map +1 -0
  167. package/dist/git/tag.d.ts +32 -0
  168. package/dist/git/tag.js +101 -0
  169. package/dist/git/tag.js.map +1 -0
  170. package/dist/git/update-index.d.ts +11 -0
  171. package/dist/git/update-index.js +99 -0
  172. package/dist/git/update-index.js.map +1 -0
  173. package/dist/git/update-ref.d.ts +23 -0
  174. package/{src/git/update-ref.ts → dist/git/update-ref.js} +10 -28
  175. package/dist/git/update-ref.js.map +1 -0
  176. package/dist/git/var.d.ts +18 -0
  177. package/{src/git/var.ts → dist/git/var.js} +16 -25
  178. package/dist/git/var.js.map +1 -0
  179. package/dist/git/worktree-include.d.ts +42 -0
  180. package/dist/git/worktree-include.js +109 -0
  181. package/dist/git/worktree-include.js.map +1 -0
  182. package/dist/git/worktree.d.ts +25 -0
  183. package/dist/git/worktree.js +139 -0
  184. package/dist/git/worktree.js.map +1 -0
  185. package/dist/index.d.ts +4 -0
  186. package/dist/index.js +7 -0
  187. package/dist/index.js.map +1 -0
  188. package/dist/lib/api.d.ts +2 -0
  189. package/dist/lib/api.js +7 -0
  190. package/dist/lib/api.js.map +1 -0
  191. package/dist/lib/diff-parser.d.ts +20 -0
  192. package/dist/lib/diff-parser.js +184 -0
  193. package/dist/lib/diff-parser.js.map +1 -0
  194. package/dist/lib/directory-exists.d.ts +1 -0
  195. package/dist/lib/directory-exists.js +11 -0
  196. package/dist/lib/directory-exists.js.map +1 -0
  197. package/dist/lib/errno-exception.d.ts +6 -0
  198. package/dist/lib/errno-exception.js +6 -0
  199. package/dist/lib/errno-exception.js.map +1 -0
  200. package/dist/lib/fatal-error.d.ts +4 -0
  201. package/dist/lib/fatal-error.js +18 -0
  202. package/dist/lib/fatal-error.js.map +1 -0
  203. package/dist/lib/feature-flag.d.ts +14 -0
  204. package/dist/lib/feature-flag.js +25 -0
  205. package/dist/lib/feature-flag.js.map +1 -0
  206. package/dist/lib/file-system.d.ts +1 -0
  207. package/dist/lib/file-system.js +7 -0
  208. package/dist/lib/file-system.js.map +1 -0
  209. package/dist/lib/get-old-path.d.ts +2 -0
  210. package/dist/lib/get-old-path.js +9 -0
  211. package/dist/lib/get-old-path.js.map +1 -0
  212. package/dist/lib/git/environment.d.ts +3 -0
  213. package/dist/lib/git/environment.js +7 -0
  214. package/dist/lib/git/environment.js.map +1 -0
  215. package/dist/lib/git-perf.d.ts +1 -0
  216. package/dist/lib/git-perf.js +4 -0
  217. package/dist/lib/git-perf.js.map +1 -0
  218. package/dist/lib/helpers/default-branch.d.ts +1 -0
  219. package/dist/lib/helpers/default-branch.js +4 -0
  220. package/dist/lib/helpers/default-branch.js.map +1 -0
  221. package/dist/lib/helpers/path.d.ts +1 -0
  222. package/dist/lib/helpers/path.js +5 -0
  223. package/dist/lib/helpers/path.js.map +1 -0
  224. package/dist/lib/hooks/with-hooks-env.d.ts +3 -0
  225. package/dist/lib/hooks/with-hooks-env.js +4 -0
  226. package/dist/lib/hooks/with-hooks-env.js.map +1 -0
  227. package/dist/lib/merge.d.ts +1 -0
  228. package/dist/lib/merge.js +4 -0
  229. package/dist/lib/merge.js.map +1 -0
  230. package/dist/lib/noop.d.ts +1 -0
  231. package/dist/lib/noop.js +2 -0
  232. package/dist/lib/noop.js.map +1 -0
  233. package/dist/lib/patch-formatter.d.ts +5 -0
  234. package/dist/lib/patch-formatter.js +7 -0
  235. package/dist/lib/patch-formatter.js.map +1 -0
  236. package/dist/lib/path-exists.d.ts +1 -0
  237. package/dist/lib/path-exists.js +3 -0
  238. package/dist/lib/path-exists.js.map +1 -0
  239. package/dist/lib/progress/from-process.d.ts +2 -0
  240. package/dist/lib/progress/from-process.js +4 -0
  241. package/dist/lib/progress/from-process.js.map +1 -0
  242. package/dist/lib/progress/index.d.ts +49 -0
  243. package/dist/lib/progress/index.js +32 -0
  244. package/dist/lib/progress/index.js.map +1 -0
  245. package/dist/lib/progress/revert.d.ts +8 -0
  246. package/dist/lib/progress/revert.js +15 -0
  247. package/dist/lib/progress/revert.js.map +1 -0
  248. package/dist/lib/rebase.d.ts +1 -0
  249. package/dist/lib/rebase.js +4 -0
  250. package/dist/lib/rebase.js.map +1 -0
  251. package/dist/lib/remove-remote-prefix.d.ts +1 -0
  252. package/dist/lib/remove-remote-prefix.js +5 -0
  253. package/dist/lib/remove-remote-prefix.js.map +1 -0
  254. package/dist/lib/resolve-git-proxy.d.ts +1 -0
  255. package/dist/lib/resolve-git-proxy.js +4 -0
  256. package/dist/lib/resolve-git-proxy.js.map +1 -0
  257. package/dist/lib/round.d.ts +1 -0
  258. package/dist/lib/round.js +5 -0
  259. package/dist/lib/round.js.map +1 -0
  260. package/dist/lib/split-buffer.d.ts +1 -0
  261. package/dist/lib/split-buffer.js +15 -0
  262. package/dist/lib/split-buffer.js.map +1 -0
  263. package/dist/lib/status-parser.d.ts +19 -0
  264. package/dist/lib/status-parser.js +125 -0
  265. package/dist/lib/status-parser.js.map +1 -0
  266. package/dist/lib/stores/helpers/find-default-remote.d.ts +1 -0
  267. package/dist/lib/stores/helpers/find-default-remote.js +4 -0
  268. package/dist/lib/stores/helpers/find-default-remote.js.map +1 -0
  269. package/dist/lib/trampoline/trampoline-environment.d.ts +1 -0
  270. package/dist/lib/trampoline/trampoline-environment.js +4 -0
  271. package/dist/lib/trampoline/trampoline-environment.js.map +1 -0
  272. package/dist/models/branch.d.ts +44 -0
  273. package/dist/models/branch.js +59 -0
  274. package/dist/models/branch.js.map +1 -0
  275. package/dist/models/cherry-pick.d.ts +11 -0
  276. package/dist/models/cherry-pick.js +2 -0
  277. package/dist/models/cherry-pick.js.map +1 -0
  278. package/dist/models/clone-options.d.ts +6 -0
  279. package/dist/models/clone-options.js +2 -0
  280. package/dist/models/clone-options.js.map +1 -0
  281. package/dist/models/commit-identity.d.ts +9 -0
  282. package/dist/models/commit-identity.js +34 -0
  283. package/dist/models/commit-identity.js.map +1 -0
  284. package/dist/models/commit.d.ts +30 -0
  285. package/dist/models/commit.js +32 -0
  286. package/dist/models/commit.js.map +1 -0
  287. package/dist/models/computed-action.d.ts +6 -0
  288. package/dist/models/computed-action.js +8 -0
  289. package/dist/models/computed-action.js.map +1 -0
  290. package/dist/models/diff/diff-data.d.ts +53 -0
  291. package/dist/models/diff/diff-data.js +19 -0
  292. package/dist/models/diff/diff-data.js.map +1 -0
  293. package/dist/models/diff/diff-line.d.ts +18 -0
  294. package/dist/models/diff/diff-line.js +33 -0
  295. package/dist/models/diff/diff-line.js.map +1 -0
  296. package/dist/models/diff/diff-selection.d.ts +22 -0
  297. package/dist/models/diff/diff-selection.js +127 -0
  298. package/dist/models/diff/diff-selection.js.map +1 -0
  299. package/dist/models/diff/image-diff.d.ts +6 -0
  300. package/dist/models/diff/image-diff.js +8 -0
  301. package/dist/models/diff/image-diff.js.map +1 -0
  302. package/dist/models/diff/image.d.ts +7 -0
  303. package/dist/models/diff/image.js +13 -0
  304. package/dist/models/diff/image.js.map +1 -0
  305. package/dist/models/diff/index.d.ts +6 -0
  306. package/dist/models/diff/index.js +7 -0
  307. package/dist/models/diff/index.js.map +1 -0
  308. package/dist/models/diff/raw-diff.d.ts +32 -0
  309. package/dist/models/diff/raw-diff.js +38 -0
  310. package/dist/models/diff/raw-diff.js.map +1 -0
  311. package/dist/models/git-author.d.ts +7 -0
  312. package/dist/models/git-author.js +18 -0
  313. package/dist/models/git-author.js.map +1 -0
  314. package/dist/models/index.d.ts +21 -0
  315. package/dist/models/index.js +20 -0
  316. package/dist/models/index.js.map +1 -0
  317. package/dist/models/manual-conflict-resolution.d.ts +4 -0
  318. package/dist/models/manual-conflict-resolution.js +6 -0
  319. package/dist/models/manual-conflict-resolution.js.map +1 -0
  320. package/dist/models/merge.d.ts +6 -0
  321. package/dist/models/merge.js +2 -0
  322. package/dist/models/merge.js.map +1 -0
  323. package/dist/models/multi-commit-operation.d.ts +6 -0
  324. package/dist/models/multi-commit-operation.js +8 -0
  325. package/dist/models/multi-commit-operation.js.map +1 -0
  326. package/dist/models/progress.d.ts +41 -0
  327. package/dist/models/progress.js +7 -0
  328. package/dist/models/progress.js.map +1 -0
  329. package/dist/models/rebase.d.ts +17 -0
  330. package/dist/models/rebase.js +8 -0
  331. package/dist/models/rebase.js.map +1 -0
  332. package/dist/models/remote.d.ts +5 -0
  333. package/dist/models/remote.js +8 -0
  334. package/dist/models/remote.js.map +1 -0
  335. package/dist/models/repository.d.ts +7 -0
  336. package/dist/models/repository.js +15 -0
  337. package/dist/models/repository.js.map +1 -0
  338. package/dist/models/stash-entry.d.ts +20 -0
  339. package/dist/models/stash-entry.js +7 -0
  340. package/dist/models/stash-entry.js.map +1 -0
  341. package/dist/models/status.d.ts +166 -0
  342. package/dist/models/status.js +135 -0
  343. package/dist/models/status.js.map +1 -0
  344. package/dist/models/submodule.d.ts +12 -0
  345. package/dist/models/submodule.js +2 -0
  346. package/dist/models/submodule.js.map +1 -0
  347. package/dist/models/worktree.d.ts +10 -0
  348. package/dist/models/worktree.js +2 -0
  349. package/dist/models/worktree.js.map +1 -0
  350. package/package.json +44 -5
  351. package/examples/get-status.ts +0 -84
  352. package/src/git/add.ts +0 -16
  353. package/src/git/apply.ts +0 -154
  354. package/src/git/authentication.ts +0 -19
  355. package/src/git/branch.ts +0 -206
  356. package/src/git/checkout.ts +0 -235
  357. package/src/git/cherry-pick.ts +0 -504
  358. package/src/git/clean.ts +0 -9
  359. package/src/git/clone.ts +0 -86
  360. package/src/git/coerce-to-buffer.ts +0 -4
  361. package/src/git/coerce-to-string.ts +0 -4
  362. package/src/git/commit.ts +0 -136
  363. package/src/git/config.ts +0 -392
  364. package/src/git/core.ts +0 -625
  365. package/src/git/create-tail-stream.ts +0 -36
  366. package/src/git/credential.ts +0 -83
  367. package/src/git/description.ts +0 -33
  368. package/src/git/diff-check.ts +0 -27
  369. package/src/git/diff-index.ts +0 -116
  370. package/src/git/diff.ts +0 -880
  371. package/src/git/environment.ts +0 -116
  372. package/src/git/exec.ts +0 -285
  373. package/src/git/fetch.ts +0 -141
  374. package/src/git/for-each-ref.ts +0 -160
  375. package/src/git/format-patch.ts +0 -17
  376. package/src/git/git-delimiter-parser.ts +0 -95
  377. package/src/git/gitignore.ts +0 -157
  378. package/src/git/index.ts +0 -36
  379. package/src/git/init.ts +0 -11
  380. package/src/git/lfs.ts +0 -100
  381. package/src/git/log.ts +0 -376
  382. package/src/git/merge-tree.ts +0 -42
  383. package/src/git/merge.ts +0 -154
  384. package/src/git/multi-operation-terminal-output.ts +0 -68
  385. package/src/git/pull.ts +0 -130
  386. package/src/git/push.ts +0 -119
  387. package/src/git/rebase.ts +0 -627
  388. package/src/git/reflog.ts +0 -127
  389. package/src/git/refs.ts +0 -63
  390. package/src/git/remote.ts +0 -143
  391. package/src/git/reorder.ts +0 -153
  392. package/src/git/reset.ts +0 -101
  393. package/src/git/rev-list.ts +0 -201
  394. package/src/git/rev-parse.ts +0 -92
  395. package/src/git/revert.ts +0 -55
  396. package/src/git/rm.ts +0 -31
  397. package/src/git/spawn.ts +0 -38
  398. package/src/git/squash.ts +0 -173
  399. package/src/git/stage.ts +0 -97
  400. package/src/git/stash.ts +0 -302
  401. package/src/git/status.ts +0 -502
  402. package/src/git/submodule.ts +0 -212
  403. package/src/git/tag.ts +0 -134
  404. package/src/git/update-index.ts +0 -169
  405. package/src/git/worktree-include.ts +0 -146
  406. package/src/git/worktree.ts +0 -219
  407. package/src/index.ts +0 -23
  408. package/src/lib/api.ts +0 -7
  409. package/src/lib/diff-parser.ts +0 -249
  410. package/src/lib/directory-exists.ts +0 -10
  411. package/src/lib/errno-exception.ts +0 -12
  412. package/src/lib/fatal-error.ts +0 -23
  413. package/src/lib/feature-flag.ts +0 -29
  414. package/src/lib/file-system.ts +0 -7
  415. package/src/lib/get-old-path.ts +0 -11
  416. package/src/lib/git/environment.ts +0 -14
  417. package/src/lib/git-perf.ts +0 -3
  418. package/src/lib/helpers/default-branch.ts +0 -3
  419. package/src/lib/helpers/path.ts +0 -5
  420. package/src/lib/hooks/with-hooks-env.ts +0 -7
  421. package/src/lib/merge.ts +0 -3
  422. package/src/lib/noop.ts +0 -1
  423. package/src/lib/patch-formatter.ts +0 -18
  424. package/src/lib/path-exists.ts +0 -7
  425. package/src/lib/progress/from-process.ts +0 -10
  426. package/src/lib/progress/index.ts +0 -43
  427. package/src/lib/progress/revert.ts +0 -17
  428. package/src/lib/rebase.ts +0 -3
  429. package/src/lib/remove-remote-prefix.ts +0 -4
  430. package/src/lib/resolve-git-proxy.ts +0 -3
  431. package/src/lib/round.ts +0 -4
  432. package/src/lib/split-buffer.ts +0 -14
  433. package/src/lib/status-parser.ts +0 -188
  434. package/src/lib/stores/helpers/find-default-remote.ts +0 -3
  435. package/src/lib/trampoline/trampoline-environment.ts +0 -8
  436. package/src/models/branch.ts +0 -78
  437. package/src/models/cherry-pick.ts +0 -12
  438. package/src/models/clone-options.ts +0 -6
  439. package/src/models/commit-identity.ts +0 -35
  440. package/src/models/commit.ts +0 -44
  441. package/src/models/computed-action.ts +0 -6
  442. package/src/models/diff/diff-data.ts +0 -78
  443. package/src/models/diff/diff-line.ts +0 -36
  444. package/src/models/diff/diff-selection.ts +0 -165
  445. package/src/models/diff/image-diff.ts +0 -6
  446. package/src/models/diff/image.ts +0 -8
  447. package/src/models/diff/index.ts +0 -6
  448. package/src/models/diff/raw-diff.ts +0 -41
  449. package/src/models/git-author.ts +0 -16
  450. package/src/models/manual-conflict-resolution.ts +0 -4
  451. package/src/models/merge.ts +0 -6
  452. package/src/models/multi-commit-operation.ts +0 -6
  453. package/src/models/progress.ts +0 -67
  454. package/src/models/rebase.ts +0 -20
  455. package/src/models/remote.ts +0 -10
  456. package/src/models/repository.ts +0 -16
  457. package/src/models/stash-entry.ts +0 -25
  458. package/src/models/status.ts +0 -275
  459. package/src/models/submodule.ts +0 -13
  460. package/src/models/worktree.ts +0 -11
  461. package/tsconfig.json +0 -17
@@ -0,0 +1,258 @@
1
+ import { git } from './core.js';
2
+ import { CommittedFileChange, AppFileStatusKind, } from '../models/status.js';
3
+ import { Commit } from '../models/commit.js';
4
+ import { CommitIdentity } from '../models/commit-identity.js';
5
+ import { parseRawUnfoldedTrailers } from './interpret-trailers.js';
6
+ import { createLogParser } from './git-delimiter-parser.js';
7
+ import { forceUnwrap } from '../lib/fatal-error.js';
8
+ import assert from 'assert';
9
+ // File mode 160000 is used by git specifically for submodules:
10
+ // https://github.com/git/git/blob/v2.37.3/cache.h#L62-L69
11
+ const SubmoduleFileMode = '160000';
12
+ function mapSubmoduleStatusFileModes(status, srcMode, dstMode) {
13
+ return srcMode === SubmoduleFileMode &&
14
+ dstMode === SubmoduleFileMode &&
15
+ status === 'M'
16
+ ? {
17
+ commitChanged: true,
18
+ untrackedChanges: false,
19
+ modifiedChanges: false,
20
+ }
21
+ : (srcMode === SubmoduleFileMode && status === 'D') ||
22
+ (dstMode === SubmoduleFileMode && status === 'A')
23
+ ? {
24
+ commitChanged: false,
25
+ untrackedChanges: false,
26
+ modifiedChanges: false,
27
+ }
28
+ : undefined;
29
+ }
30
+ /**
31
+ * Map the raw status text from Git to an app-friendly value
32
+ * shamelessly borrowed from GitHub Desktop (Windows)
33
+ */
34
+ function mapStatus(rawStatus, oldPath, srcMode, dstMode) {
35
+ const status = rawStatus.trim();
36
+ const submoduleStatus = mapSubmoduleStatusFileModes(status, srcMode, dstMode);
37
+ if (status === 'M') {
38
+ return { kind: AppFileStatusKind.Modified, submoduleStatus };
39
+ } // modified
40
+ if (status === 'A') {
41
+ return { kind: AppFileStatusKind.New, submoduleStatus };
42
+ } // added
43
+ if (status === '?') {
44
+ return { kind: AppFileStatusKind.Untracked, submoduleStatus };
45
+ } // untracked
46
+ if (status === 'D') {
47
+ return { kind: AppFileStatusKind.Deleted, submoduleStatus };
48
+ } // deleted
49
+ if (status === 'R' && oldPath != null) {
50
+ return {
51
+ kind: AppFileStatusKind.Renamed,
52
+ oldPath,
53
+ submoduleStatus,
54
+ renameIncludesModifications: false,
55
+ };
56
+ } // renamed
57
+ if (status === 'C' && oldPath != null) {
58
+ return {
59
+ kind: AppFileStatusKind.Copied,
60
+ oldPath,
61
+ submoduleStatus,
62
+ renameIncludesModifications: false,
63
+ };
64
+ } // copied
65
+ // git log -M --name-status will return a RXXX - where XXX is a percentage
66
+ if (status.match(/R[0-9]+/) && oldPath != null) {
67
+ return {
68
+ kind: AppFileStatusKind.Renamed,
69
+ oldPath,
70
+ submoduleStatus,
71
+ renameIncludesModifications: status !== 'R100',
72
+ };
73
+ }
74
+ // git log -C --name-status will return a CXXX - where XXX is a percentage
75
+ if (status.match(/C[0-9]+/) && oldPath != null) {
76
+ return {
77
+ kind: AppFileStatusKind.Copied,
78
+ oldPath,
79
+ submoduleStatus,
80
+ renameIncludesModifications: false,
81
+ };
82
+ }
83
+ return { kind: AppFileStatusKind.Modified, submoduleStatus };
84
+ }
85
+ const isCopyOrRename = (status) => status.kind === AppFileStatusKind.Copied ||
86
+ status.kind === AppFileStatusKind.Renamed;
87
+ /**
88
+ * Get the repository's commits using `revisionRange` and limited to `limit`
89
+ */
90
+ export async function getCommits(repository, revisionRange, limit, skip, additionalArgs = []) {
91
+ const { formatArgs, parse } = createLogParser({
92
+ sha: '%H', // SHA
93
+ shortSha: '%h', // short SHA
94
+ summary: '%s', // summary
95
+ body: '%b', // body
96
+ // author identity string, matching format of GIT_AUTHOR_IDENT.
97
+ // author name <author email> <author date>
98
+ // author date format dependent on --date arg, should be raw
99
+ author: '%an <%ae> %ad',
100
+ committer: '%cn <%ce> %cd',
101
+ parents: '%P', // parent SHAs,
102
+ trailers: '%(trailers:unfold,only)',
103
+ refs: '%D',
104
+ });
105
+ const args = ['log'];
106
+ if (revisionRange !== undefined) {
107
+ args.push(revisionRange);
108
+ }
109
+ args.push('--date=raw');
110
+ if (limit !== undefined) {
111
+ args.push(`--max-count=${limit}`);
112
+ }
113
+ if (skip !== undefined) {
114
+ args.push(`--skip=${skip}`);
115
+ }
116
+ args.push(...formatArgs, '--no-show-signature', '--no-color', ...additionalArgs, '--');
117
+ const result = await git(args, repository.path, 'getCommits', {
118
+ successExitCodes: new Set([0, 128]),
119
+ encoding: 'buffer',
120
+ });
121
+ // if the repository has an unborn HEAD, return an empty history of commits
122
+ if (result.exitCode === 128) {
123
+ return new Array();
124
+ }
125
+ const parsed = parse(result.stdout);
126
+ return parsed.map(commit => {
127
+ // Ref is of the format: (HEAD -> master, tag: some-tag-name, tag: some-other-tag,with-a-comma, origin/master, origin/HEAD)
128
+ // Refs are comma separated, but some like tags can also contain commas in the name, so we split on the pattern ", " and then
129
+ // check each ref for the tag prefix. We used to use the regex /tag: ([^\s,]+)/g)`, but will clip a tag with a comma short.
130
+ const tags = commit.refs
131
+ .toString()
132
+ .split(', ')
133
+ .flatMap(ref => (ref.startsWith('tag: ') ? ref.substring(5) : []));
134
+ return new Commit(commit.sha.toString(), commit.shortSha.toString(), commit.summary.subarray(0, 100 * 1024).toString(), commit.body.subarray(0, 100 * 1024).toString(), CommitIdentity.parseIdentity(commit.author.toString()), CommitIdentity.parseIdentity(commit.committer.toString()), commit.parents.length > 0 ? commit.parents.toString().split(' ') : [],
135
+ // We know for sure that the trailer separator will be ':' since we got
136
+ // them from %(trailers:unfold) above, see `git help log`:
137
+ //
138
+ // "key_value_separator=<SEP>: specify a separator inserted between
139
+ // trailer lines. When this option is not given each trailer key-value
140
+ // pair is separated by ": ". Otherwise it shares the same semantics as
141
+ // separator=<SEP> above."
142
+ parseRawUnfoldedTrailers(commit.trailers.toString(), ':'), tags);
143
+ });
144
+ }
145
+ /** Get the files that were changed in the given commit. */
146
+ export async function getChangedFiles(repository, sha) {
147
+ // opt-in for rename detection (-M) and copies detection (-C)
148
+ // this is equivalent to the user configuring 'diff.renames' to 'copies'
149
+ // NOTE: order here matters - doing -M before -C means copies aren't detected
150
+ const args = [
151
+ 'log',
152
+ sha,
153
+ '-C',
154
+ '-M',
155
+ '-m',
156
+ '-1',
157
+ '--no-show-signature',
158
+ '--first-parent',
159
+ '--raw',
160
+ '--format=format:',
161
+ '--numstat',
162
+ '-z',
163
+ '--',
164
+ ];
165
+ const { stdout } = await git(args, repository.path, 'getChangesFiles');
166
+ return parseRawLogWithNumstat(stdout, sha, `${sha}^`);
167
+ }
168
+ /**
169
+ * Parses output of diff flags -z --raw --numstat.
170
+ *
171
+ * Given the -z flag the new lines are separated by \0 character (left them as
172
+ * new lines below for ease of reading)
173
+ *
174
+ * For modified, added, deleted, untracked:
175
+ * 100644 100644 5716ca5 db3c77d M
176
+ * file_one_path
177
+ * :100644 100644 0835e4f 28096ea M
178
+ * file_two_path
179
+ * 1 0 file_one_path
180
+ * 1 0 file_two_path
181
+ *
182
+ * For copied or renamed:
183
+ * 100644 100644 5716ca5 db3c77d M
184
+ * file_one_original_path
185
+ * file_one_new_path
186
+ * :100644 100644 0835e4f 28096ea M
187
+ * file_two_original_path
188
+ * file_two_new_path
189
+ * 1 0
190
+ * file_one_original_path
191
+ * file_one_new_path
192
+ * 1 0
193
+ * file_two_original_path
194
+ * file_two_new_path
195
+ */
196
+ export function parseRawLogWithNumstat(stdout, sha, parentCommitish) {
197
+ const files = new Array();
198
+ let linesAdded = 0;
199
+ let linesDeleted = 0;
200
+ let numStatCount = 0;
201
+ const lines = stdout.split('\0');
202
+ for (let i = 0; i < lines.length - 1; i++) {
203
+ const line = lines[i];
204
+ if (line.startsWith(':')) {
205
+ const lineComponents = line.split(' ');
206
+ const srcMode = forceUnwrap('Invalid log output (srcMode)', lineComponents[0]?.replace(':', ''));
207
+ const dstMode = forceUnwrap('Invalid log output (dstMode)', lineComponents[1]);
208
+ const status = forceUnwrap('Invalid log output (status)', lineComponents.at(-1));
209
+ const oldPath = /^R|C/.test(status)
210
+ ? forceUnwrap('Missing old path', lines.at(++i))
211
+ : undefined;
212
+ const path = forceUnwrap('Missing path', lines.at(++i));
213
+ files.push(new CommittedFileChange(path, mapStatus(status, oldPath, srcMode, dstMode), sha, parentCommitish));
214
+ }
215
+ else {
216
+ const match = /^(\d+|-)\t(\d+|-)\t/.exec(line);
217
+ const [, added, deleted] = forceUnwrap('Invalid numstat line', match);
218
+ linesAdded += added === '-' ? 0 : parseInt(added, 10);
219
+ linesDeleted += deleted === '-' ? 0 : parseInt(deleted, 10);
220
+ // If this entry denotes a rename or copy the old and new paths are on
221
+ // two separate fields (separated by \0). Otherwise they're on the same
222
+ // line as the added and deleted lines.
223
+ if (isCopyOrRename(files[numStatCount].status)) {
224
+ i += 2;
225
+ }
226
+ numStatCount++;
227
+ }
228
+ }
229
+ return { files, linesAdded, linesDeleted };
230
+ }
231
+ /** Get the commit for the given ref. */
232
+ export async function getCommit(repository, ref) {
233
+ const commits = await getCommits(repository, ref, 1);
234
+ if (commits.length < 1) {
235
+ return null;
236
+ }
237
+ return commits[0];
238
+ }
239
+ /** Get the author identity for the given shas */
240
+ export async function getAuthors(repository, shas) {
241
+ if (shas.length === 0) {
242
+ return [];
243
+ }
244
+ const { stdout } = await git([
245
+ 'log',
246
+ '--format=format:%an <%ae> %ad',
247
+ '--no-walk=unsorted',
248
+ '--date=raw',
249
+ '-z',
250
+ '--stdin',
251
+ ], repository.path, 'getAuthors', { stdin: shas.join('\n') });
252
+ const authors = stdout.split('\0').map(CommitIdentity.parseIdentity);
253
+ // This can happen if there are duplicate shas in the input, git log will only
254
+ // return the author once for each sha.
255
+ assert.equal(authors.length, shas.length, 'Commit to author mismatch');
256
+ return authors;
257
+ }
258
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/git/log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Branch } from '../models/branch.js';
2
+ import { ComputedAction } from '../models/computed-action.js';
3
+ import { Repository } from '../models/repository.js';
4
+ type MergeTreeResult = {
5
+ kind: ComputedAction.Clean;
6
+ } | {
7
+ kind: ComputedAction.Conflicts;
8
+ conflictedFiles: number;
9
+ } | {
10
+ kind: ComputedAction.Invalid;
11
+ };
12
+ export declare function determineMergeability(repository: Repository, ours: Branch, theirs: Branch): Promise<MergeTreeResult>;
13
+ export {};
@@ -0,0 +1,24 @@
1
+ import { ComputedAction } from '../models/computed-action.js';
2
+ import { git, isGitError } from './core.js';
3
+ import { GitError } from './exec.js';
4
+ export async function determineMergeability(repository, ours, theirs) {
5
+ return git([
6
+ 'merge-tree',
7
+ '--write-tree',
8
+ '--name-only',
9
+ '--no-messages',
10
+ '-z',
11
+ ours.tip.sha,
12
+ theirs.tip.sha,
13
+ ], repository.path, 'determineMergeability', { successExitCodes: new Set([0, 1]) })
14
+ .then(({ stdout }) => {
15
+ const conflictedFiles = (stdout.match(/\0/g)?.length ?? 0) - 1;
16
+ return conflictedFiles > 0
17
+ ? { kind: ComputedAction.Conflicts, conflictedFiles }
18
+ : { kind: ComputedAction.Clean };
19
+ })
20
+ .catch(e => isGitError(e, GitError.CannotMergeUnrelatedHistories)
21
+ ? Promise.resolve({ kind: ComputedAction.Invalid })
22
+ : Promise.reject(e));
23
+ }
24
+ //# sourceMappingURL=merge-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-tree.js","sourceRoot":"","sources":["../../src/git/merge-tree.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAOpC,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAsB,EACtB,IAAY,EACZ,MAAc;IAEd,OAAO,GAAG,CACR;QACE,YAAY;QACZ,cAAc;QACd,aAAa;QACb,eAAe;QACf,IAAI;QACJ,IAAI,CAAC,GAAG,CAAC,GAAG;QACZ,MAAM,CAAC,GAAG,CAAC,GAAG;KACf,EACD,UAAU,CAAC,IAAI,EACf,uBAAuB,EACvB,EAAE,gBAAgB,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CACtC;SACE,IAAI,CAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACpC,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QAC9D,OAAO,eAAe,GAAG,CAAC;YACxB,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,SAAS,EAAE,eAAe,EAAE;YACrD,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,CAAA;IACpC,CAAC,CAAC;SACD,KAAK,CAAkB,CAAC,CAAC,EAAE,CAC1B,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,6BAA6B,CAAC;QACnD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC;QACnD,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CACtB,CAAA;AACL,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { HookCallbackOptions } from './core.js';
2
+ import { Repository } from '../models/repository.js';
3
+ export declare enum MergeResult {
4
+ /** The merge completed successfully */
5
+ Success = 0,
6
+ /**
7
+ * The merge was a noop since the current branch
8
+ * was already up to date with the target branch.
9
+ */
10
+ AlreadyUpToDate = 1,
11
+ /**
12
+ * The merge failed, likely due to conflicts.
13
+ */
14
+ Failed = 2
15
+ }
16
+ export type MergeOptions = {
17
+ /** Whether to perform a squash merge */
18
+ readonly squash?: boolean;
19
+ /** Whether to bypass pre-merge and post-merge hooks */
20
+ readonly noVerify?: boolean;
21
+ } & HookCallbackOptions;
22
+ /** Merge the named branch into the current branch. */
23
+ export declare function merge(repository: Repository, branch: string, options?: MergeOptions): Promise<MergeResult>;
24
+ /**
25
+ * Find the base commit between two commit-ish identifiers
26
+ *
27
+ * @returns the commit id of the merge base, or null if the two commit-ish
28
+ * identifiers do not have a common base
29
+ */
30
+ export declare function getMergeBase(repository: Repository, firstCommitish: string, secondCommitish: string): Promise<string | null>;
31
+ /**
32
+ * Abort a mid-flight (conflicted) merge
33
+ *
34
+ * @param repository where to abort the merge
35
+ */
36
+ export declare function abortMerge(repository: Repository): Promise<void>;
37
+ /**
38
+ * Check the `.git/MERGE_HEAD` file exists in a repository to confirm
39
+ * that it is in a conflicted state.
40
+ */
41
+ export declare function isMergeHeadSet(repository: Repository): Promise<boolean>;
42
+ /**
43
+ * Check the `.git/SQUASH_MSG` file exists in a repository
44
+ * This would indicate we did a merge --squash and have not committed.. indicating
45
+ * we have detected a conflict.
46
+ *
47
+ * Note: If we abort the merge, this doesn't get cleared automatically which
48
+ * could lead to this being erroneously available in a non merge --squashing scenario.
49
+ */
50
+ export declare function isSquashMsgSet(repository: Repository): Promise<boolean>;
@@ -0,0 +1,111 @@
1
+ import { join } from 'path';
2
+ import { git } from './core.js';
3
+ import { GitError } from './exec.js';
4
+ import { pathExists } from '../lib/path-exists.js';
5
+ import { createMultiOperationTerminalOutputCallback } from './multi-operation-terminal-output.js';
6
+ export var MergeResult;
7
+ (function (MergeResult) {
8
+ /** The merge completed successfully */
9
+ MergeResult[MergeResult["Success"] = 0] = "Success";
10
+ /**
11
+ * The merge was a noop since the current branch
12
+ * was already up to date with the target branch.
13
+ */
14
+ MergeResult[MergeResult["AlreadyUpToDate"] = 1] = "AlreadyUpToDate";
15
+ /**
16
+ * The merge failed, likely due to conflicts.
17
+ */
18
+ MergeResult[MergeResult["Failed"] = 2] = "Failed";
19
+ })(MergeResult || (MergeResult = {}));
20
+ /** Merge the named branch into the current branch. */
21
+ export async function merge(repository, branch, options) {
22
+ const onTerminalOutputAvailable = options?.onTerminalOutputAvailable
23
+ ? createMultiOperationTerminalOutputCallback(options?.onTerminalOutputAvailable)
24
+ : undefined;
25
+ const args = ['merge'];
26
+ if (options?.squash) {
27
+ args.push('--squash');
28
+ }
29
+ if (options?.noVerify) {
30
+ args.push('--no-verify');
31
+ }
32
+ args.push(branch);
33
+ const { exitCode, stdout } = await git(args, repository.path, 'merge', {
34
+ expectedErrors: new Set([GitError.MergeConflicts]),
35
+ interceptHooks: ['pre-merge-commit', 'post-merge', 'commit-msg'],
36
+ onHookProgress: options?.onHookProgress,
37
+ onHookFailure: options?.onHookFailure,
38
+ onTerminalOutputAvailable,
39
+ });
40
+ if (exitCode !== 0) {
41
+ return MergeResult.Failed;
42
+ }
43
+ if (options?.squash) {
44
+ const { exitCode } = await git(['commit', '--no-edit'], repository.path, 'createSquashMergeCommit', {
45
+ interceptHooks: [
46
+ 'pre-merge-commit',
47
+ 'prepare-commit-msg',
48
+ 'commit-msg',
49
+ 'post-commit',
50
+ 'pre-auto-gc',
51
+ ],
52
+ onHookProgress: options?.onHookProgress,
53
+ onHookFailure: options?.onHookFailure,
54
+ onTerminalOutputAvailable,
55
+ });
56
+ if (exitCode !== 0) {
57
+ return MergeResult.Failed;
58
+ }
59
+ }
60
+ return stdout === noopMergeMessage
61
+ ? MergeResult.AlreadyUpToDate
62
+ : MergeResult.Success;
63
+ }
64
+ const noopMergeMessage = 'Already up to date.\n';
65
+ /**
66
+ * Find the base commit between two commit-ish identifiers
67
+ *
68
+ * @returns the commit id of the merge base, or null if the two commit-ish
69
+ * identifiers do not have a common base
70
+ */
71
+ export async function getMergeBase(repository, firstCommitish, secondCommitish) {
72
+ const process = await git(['merge-base', firstCommitish, secondCommitish], repository.path, 'merge-base', {
73
+ // - 1 is returned if a common ancestor cannot be resolved
74
+ // - 128 is returned if a ref cannot be found
75
+ // "warning: ignoring broken ref refs/remotes/origin/main."
76
+ successExitCodes: new Set([0, 1, 128]),
77
+ });
78
+ if (process.exitCode === 1 || process.exitCode === 128) {
79
+ return null;
80
+ }
81
+ return process.stdout.trim();
82
+ }
83
+ /**
84
+ * Abort a mid-flight (conflicted) merge
85
+ *
86
+ * @param repository where to abort the merge
87
+ */
88
+ export async function abortMerge(repository) {
89
+ await git(['merge', '--abort'], repository.path, 'abortMerge');
90
+ }
91
+ /**
92
+ * Check the `.git/MERGE_HEAD` file exists in a repository to confirm
93
+ * that it is in a conflicted state.
94
+ */
95
+ export async function isMergeHeadSet(repository) {
96
+ const path = join(repository.resolvedGitDir, 'MERGE_HEAD');
97
+ return await pathExists(path);
98
+ }
99
+ /**
100
+ * Check the `.git/SQUASH_MSG` file exists in a repository
101
+ * This would indicate we did a merge --squash and have not committed.. indicating
102
+ * we have detected a conflict.
103
+ *
104
+ * Note: If we abort the merge, this doesn't get cleared automatically which
105
+ * could lead to this being erroneously available in a non merge --squashing scenario.
106
+ */
107
+ export async function isSquashMsgSet(repository) {
108
+ const path = join(repository.resolvedGitDir, 'SQUASH_MSG');
109
+ return await pathExists(path);
110
+ }
111
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/git/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { TerminalOutputCallback } from './core.js';
2
+ /**
3
+ * Creates a callback that aggregates terminal output from multiple Git
4
+ * operations into a single stream.
5
+ *
6
+ * This function is useful when running multiple Git operations sequentially
7
+ * where you want to present a unified terminal output view. It buffers output
8
+ * from all operations and forwards them to upstream subscribers when requested.
9
+ *
10
+ * The callback maintains an internal buffer (default 256KB) and subscribes to
11
+ * each Git operation's terminal output. When an upstream consumer requests the
12
+ * output, it receives all previously buffered chunks followed by any new chunks
13
+ * as they arrive.
14
+ *
15
+ * @param onTerminalOutputAvailable - The user provided callback which will
16
+ * receive the aggregated terminal output.
17
+ * @returns A callback that can be passed to individual Git operations as the
18
+ * onTerminalOutputAvailable callback to capture their terminal output
19
+ */
20
+ export declare const createMultiOperationTerminalOutputCallback: (onTerminalOutputAvailable: TerminalOutputCallback, capacity?: number) => TerminalOutputCallback;
@@ -0,0 +1,56 @@
1
+ import noop from '../lib/noop.js';
2
+ import { pushTerminalChunk } from './push-terminal-chunk.js';
3
+ /**
4
+ * Creates a callback that aggregates terminal output from multiple Git
5
+ * operations into a single stream.
6
+ *
7
+ * This function is useful when running multiple Git operations sequentially
8
+ * where you want to present a unified terminal output view. It buffers output
9
+ * from all operations and forwards them to upstream subscribers when requested.
10
+ *
11
+ * The callback maintains an internal buffer (default 256KB) and subscribes to
12
+ * each Git operation's terminal output. When an upstream consumer requests the
13
+ * output, it receives all previously buffered chunks followed by any new chunks
14
+ * as they arrive.
15
+ *
16
+ * @param onTerminalOutputAvailable - The user provided callback which will
17
+ * receive the aggregated terminal output.
18
+ * @returns A callback that can be passed to individual Git operations as the
19
+ * onTerminalOutputAvailable callback to capture their terminal output
20
+ */
21
+ export const createMultiOperationTerminalOutputCallback = (onTerminalOutputAvailable, capacity = 256 * 1024) => {
22
+ let outputStarted = false;
23
+ const chunks = [];
24
+ const upstreamSubscribers = new Set();
25
+ const push = (chunk) => {
26
+ if (!outputStarted) {
27
+ onTerminalOutputAvailable(function (cb) {
28
+ upstreamSubscribers.add(cb);
29
+ chunks.forEach(c => cb(c));
30
+ return { unsubscribe: () => upstreamSubscribers.delete(cb) };
31
+ });
32
+ outputStarted = true;
33
+ }
34
+ pushTerminalChunk(chunks, capacity, chunk);
35
+ upstreamSubscribers.forEach(cb => cb(chunk));
36
+ };
37
+ // Called by each Git operation when terminal output is available. We'll
38
+ // subscribe immediately to capture output from all operations and then
39
+ // forward it to upstream callbacks if/when requested.
40
+ const cb = function (subscribe) {
41
+ subscribe(c => {
42
+ if (Array.isArray(c)) {
43
+ chunks.forEach(push);
44
+ }
45
+ else {
46
+ push(c);
47
+ }
48
+ });
49
+ // We can't unsubscribe because the user might request terminal output in
50
+ // the future and we need to buffer the output from all operations to
51
+ // ensure we can present the entire output.
52
+ return { unsubscribe: noop };
53
+ };
54
+ return cb;
55
+ };
56
+ //# sourceMappingURL=multi-operation-terminal-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-operation-terminal-output.js","sourceRoot":"","sources":["../../src/git/multi-operation-terminal-output.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,gBAAgB,CAAA;AAMjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,0CAA0C,GAAG,CACxD,yBAAiD,EACjD,QAAQ,GAAG,GAAG,GAAG,IAAI,EACG,EAAE;IAC1B,IAAI,aAAa,GAAG,KAAK,CAAA;IACzB,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAmC,CAAA;IAEtE,MAAM,IAAI,GAAG,CAAC,KAAsB,EAAE,EAAE;QACtC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,yBAAyB,CAAC,UAAU,EAAE;gBACpC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC1B,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAA;YAC9D,CAAC,CAAC,CAAA;YACF,aAAa,GAAG,IAAI,CAAA;QACtB,CAAC;QAED,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC1C,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9C,CAAC,CAAA;IAED,wEAAwE;IACxE,uEAAuE;IACvE,sDAAsD;IACtD,MAAM,EAAE,GAAG,UAAU,SAAiC;QACpD,SAAS,CAAC,CAAC,CAAC,EAAE;YACZ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACtB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,CAAC,CAAC,CAAA;YACT,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,yEAAyE;QACzE,qEAAqE;QACrE,2CAA2C;QAC3C,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;IAC9B,CAAC,CAAA;IAED,OAAO,EAAE,CAAA;AACX,CAAC,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { HookProgress, TerminalOutput, TerminalOutputCallback } from './core.js';
2
+ import { Repository } from '../models/repository.js';
3
+ import { IPullProgress } from '../models/progress.js';
4
+ import { IRemote } from '../models/remote.js';
5
+ /**
6
+ * Pull from the specified remote.
7
+ *
8
+ * @param repository - The repository in which the pull should take place
9
+ *
10
+ * @param remote - The name of the remote that should be pulled from
11
+ *
12
+ * @param progressCallback - An optional function which will be invoked
13
+ * with information about the current progress
14
+ * of the pull operation. When provided this enables
15
+ * the '--progress' command line flag for
16
+ * 'git pull'.
17
+ */
18
+ export declare function pull(repository: Repository, remote: IRemote, options?: {
19
+ progressCallback?: (progress: IPullProgress) => void;
20
+ onHookProgress?: (progress: HookProgress) => void;
21
+ onHookFailure?: (hookName: string, terminalOutput: TerminalOutput) => Promise<'abort' | 'ignore'>;
22
+ onTerminalOutputAvailable?: TerminalOutputCallback;
23
+ noVerify?: boolean;
24
+ }): Promise<void>;