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
package/src/git/status.ts DELETED
@@ -1,502 +0,0 @@
1
- import { getFilesWithConflictMarkers } from './diff-check'
2
- import {
3
- WorkingDirectoryStatus,
4
- WorkingDirectoryFileChange,
5
- AppFileStatus,
6
- FileEntry,
7
- GitStatusEntry,
8
- AppFileStatusKind,
9
- UnmergedEntry,
10
- ConflictedFileStatus,
11
- UnmergedEntrySummary,
12
- } from '../models/status'
13
- import {
14
- parsePorcelainStatus,
15
- mapStatus,
16
- IStatusEntry,
17
- IStatusHeader,
18
- isStatusHeader,
19
- isStatusEntry,
20
- } from '../lib/status-parser'
21
- import { DiffSelectionType, DiffSelection } from '../models/diff'
22
- import { Repository } from '../models/repository'
23
- import { IAheadBehind } from '../models/branch'
24
- import { fatalError } from '../lib/fatal-error'
25
- import { isMergeHeadSet, isSquashMsgSet } from './merge'
26
- import { getBinaryPaths } from './diff'
27
- import { getRebaseInternalState } from './rebase'
28
- import { RebaseInternalState } from '../models/rebase'
29
- import { isCherryPickHeadFound } from './cherry-pick'
30
- import { git } from '.'
31
-
32
- /** The encapsulation of the result from 'git status' */
33
- export interface IStatusResult {
34
- /** The name of the current branch */
35
- readonly currentBranch?: string
36
-
37
- /** The name of the current upstream branch */
38
- readonly currentUpstreamBranch?: string
39
-
40
- /** The SHA of the tip commit of the current branch */
41
- readonly currentTip?: string
42
-
43
- /** How many commits ahead and behind
44
- * the `currentBranch` is compared to the `currentUpstreamBranch`
45
- */
46
- readonly branchAheadBehind?: IAheadBehind
47
-
48
- /** true if the repository exists at the given location */
49
- readonly exists: boolean
50
-
51
- /** true if repository is in a conflicted state */
52
- readonly mergeHeadFound: boolean
53
-
54
- /** true merge --squash operation started */
55
- readonly squashMsgFound: boolean
56
-
57
- /** details about the rebase operation, if found */
58
- readonly rebaseInternalState: RebaseInternalState | null
59
-
60
- /** true if repository is in cherry pick state */
61
- readonly isCherryPickingHeadFound: boolean
62
-
63
- /** the absolute path to the repository's working directory */
64
- readonly workingDirectory: WorkingDirectoryStatus
65
-
66
- /** whether conflicting files present on repository */
67
- readonly doConflictedFilesExist: boolean
68
- }
69
-
70
- interface IStatusHeadersData {
71
- currentBranch?: string
72
- currentUpstreamBranch?: string
73
- currentTip?: string
74
- branchAheadBehind?: IAheadBehind
75
- match: RegExpMatchArray | null
76
- }
77
-
78
- type ConflictFilesDetails = {
79
- conflictCountsByPath: ReadonlyMap<string, number>
80
- binaryFilePaths: ReadonlyArray<string>
81
- }
82
-
83
- function parseConflictedState(
84
- entry: UnmergedEntry,
85
- path: string,
86
- conflictDetails: ConflictFilesDetails
87
- ): ConflictedFileStatus {
88
- switch (entry.action) {
89
- case UnmergedEntrySummary.BothAdded: {
90
- const isBinary = conflictDetails.binaryFilePaths.includes(path)
91
- if (!isBinary) {
92
- return {
93
- kind: AppFileStatusKind.Conflicted,
94
- entry,
95
- conflictMarkerCount:
96
- conflictDetails.conflictCountsByPath.get(path) || 0,
97
- }
98
- } else {
99
- return {
100
- kind: AppFileStatusKind.Conflicted,
101
- entry,
102
- }
103
- }
104
- }
105
- case UnmergedEntrySummary.BothModified: {
106
- const isBinary = conflictDetails.binaryFilePaths.includes(path)
107
- if (!isBinary) {
108
- return {
109
- kind: AppFileStatusKind.Conflicted,
110
- entry,
111
- conflictMarkerCount:
112
- conflictDetails.conflictCountsByPath.get(path) || 0,
113
- }
114
- } else {
115
- return {
116
- kind: AppFileStatusKind.Conflicted,
117
- entry,
118
- }
119
- }
120
- }
121
- default:
122
- return {
123
- kind: AppFileStatusKind.Conflicted,
124
- entry,
125
- }
126
- }
127
- }
128
-
129
- function convertToAppStatus(
130
- path: string,
131
- entry: FileEntry,
132
- conflictDetails: ConflictFilesDetails,
133
- oldPath?: string
134
- ): AppFileStatus {
135
- if (entry.kind === 'ordinary') {
136
- switch (entry.type) {
137
- case 'added':
138
- return {
139
- kind: AppFileStatusKind.New,
140
- submoduleStatus: entry.submoduleStatus,
141
- }
142
- case 'modified':
143
- return {
144
- kind: AppFileStatusKind.Modified,
145
- submoduleStatus: entry.submoduleStatus,
146
- }
147
- case 'deleted':
148
- return {
149
- kind: AppFileStatusKind.Deleted,
150
- submoduleStatus: entry.submoduleStatus,
151
- }
152
- }
153
- } else if (entry.kind === 'copied' && oldPath != null) {
154
- return {
155
- kind: AppFileStatusKind.Copied,
156
- oldPath,
157
- submoduleStatus: entry.submoduleStatus,
158
- renameIncludesModifications: false,
159
- }
160
- } else if (entry.kind === 'renamed' && oldPath != null) {
161
- return {
162
- kind: AppFileStatusKind.Renamed,
163
- oldPath,
164
- submoduleStatus: entry.submoduleStatus,
165
- renameIncludesModifications:
166
- entry.workingTree === GitStatusEntry.Modified ||
167
- (entry.renameOrCopyScore !== undefined &&
168
- entry.renameOrCopyScore < 100),
169
- }
170
- } else if (entry.kind === 'untracked') {
171
- return {
172
- kind: AppFileStatusKind.Untracked,
173
- submoduleStatus: entry.submoduleStatus,
174
- }
175
- } else if (entry.kind === 'conflicted') {
176
- return parseConflictedState(entry, path, conflictDetails)
177
- }
178
-
179
- return fatalError(`Unknown file status ${status}`)
180
- }
181
-
182
- // List of known conflicted index entries for a file, extracted from mapStatus
183
- // inside `app/src/lib/status-parser.ts` for convenience
184
- const conflictStatusCodes = ['DD', 'AU', 'UD', 'UA', 'DU', 'AA', 'UU']
185
-
186
- /**
187
- * Retrieve the status for a given repository,
188
- * and fail gracefully if the location is not a Git repository
189
- */
190
- export async function getStatus(
191
- repository: Repository
192
- ): Promise<IStatusResult | null>
193
- export async function getStatus(
194
- repository: Repository,
195
- includeUntracked: boolean
196
- ): Promise<IStatusResult | null>
197
- export async function getStatus(
198
- repository: Repository,
199
- includeUntracked: boolean,
200
- rejectOnError: true
201
- ): Promise<IStatusResult>
202
- export async function getStatus(
203
- repository: Repository,
204
- includeUntracked: boolean,
205
- rejectOnError: false
206
- ): Promise<IStatusResult | null>
207
- export async function getStatus(
208
- repository: Repository,
209
- includeUntracked = true,
210
- rejectOnError = false
211
- ): Promise<IStatusResult | null> {
212
- const args = [
213
- '--no-optional-locks',
214
- 'status',
215
- ...(includeUntracked ? ['--untracked-files=all'] : []),
216
- '--branch',
217
- '--porcelain=2',
218
- '-z',
219
- ]
220
-
221
- const { stdout, exitCode } = await git(args, repository.path, 'getStatus', {
222
- successExitCodes: new Set(rejectOnError ? [0] : [0, 128]),
223
- encoding: 'buffer',
224
- })
225
-
226
- if (exitCode === 128) {
227
- console.debug(
228
- `'git status' returned 128 for '${repository.path}' and is likely missing its .git directory`
229
- )
230
- return null
231
- }
232
-
233
- const parsed = parsePorcelainStatus(stdout)
234
- const headers = parsed.filter(isStatusHeader)
235
- const entries = parsed.filter(isStatusEntry)
236
-
237
- const mergeHeadFound = await isMergeHeadSet(repository)
238
- const conflictedFilesInIndex = entries.filter(e =>
239
- conflictStatusCodes.includes(e.statusCode)
240
- )
241
- const rebaseInternalState = await getRebaseInternalState(repository)
242
-
243
- const conflictDetails = await getConflictDetails(
244
- repository,
245
- mergeHeadFound,
246
- conflictedFilesInIndex,
247
- rebaseInternalState
248
- )
249
-
250
- // Map of files keyed on their paths.
251
- const files = entries.reduce(
252
- (files, entry) => buildStatusMap(files, entry, conflictDetails),
253
- new Map<string, WorkingDirectoryFileChange>()
254
- )
255
-
256
- const {
257
- currentBranch,
258
- currentUpstreamBranch,
259
- currentTip,
260
- branchAheadBehind,
261
- } = headers.reduce(parseStatusHeader, {
262
- currentBranch: undefined,
263
- currentUpstreamBranch: undefined,
264
- currentTip: undefined,
265
- branchAheadBehind: undefined,
266
- match: null,
267
- })
268
-
269
- const workingDirectory = WorkingDirectoryStatus.fromFiles([...files.values()])
270
-
271
- const isCherryPickingHeadFound = await isCherryPickHeadFound(repository)
272
-
273
- const squashMsgFound = await isSquashMsgSet(repository)
274
-
275
- return {
276
- currentBranch,
277
- currentTip,
278
- currentUpstreamBranch,
279
- branchAheadBehind,
280
- exists: true,
281
- mergeHeadFound,
282
- rebaseInternalState,
283
- workingDirectory,
284
- isCherryPickingHeadFound,
285
- squashMsgFound,
286
- doConflictedFilesExist: conflictedFilesInIndex.length > 0,
287
- }
288
- }
289
-
290
- /**
291
- *
292
- * Update map of working directory changes with a file status entry.
293
- * Reducer(ish).
294
- *
295
- * (Map is used here to maintain insertion order.)
296
- */
297
- function buildStatusMap(
298
- files: Map<string, WorkingDirectoryFileChange>,
299
- entry: IStatusEntry,
300
- conflictDetails: ConflictFilesDetails
301
- ): Map<string, WorkingDirectoryFileChange> {
302
- const status = mapStatus(
303
- entry.statusCode,
304
- entry.submoduleStatusCode,
305
- entry.renameOrCopyScore
306
- )
307
-
308
- if (status.kind === 'ordinary') {
309
- // when a file is added in the index but then removed in the working
310
- // directory, the file won't be part of the commit, so we can skip
311
- // displaying this entry in the changes list
312
- if (
313
- status.index === GitStatusEntry.Added &&
314
- status.workingTree === GitStatusEntry.Deleted
315
- ) {
316
- return files
317
- }
318
- }
319
-
320
- if (status.kind === 'untracked') {
321
- // when a delete has been staged, but an untracked file exists with the
322
- // same path, we should ensure that we only draw one entry in the
323
- // changes list - see if an entry already exists for this path and
324
- // remove it if found
325
- files.delete(entry.path)
326
- }
327
-
328
- // for now we just poke at the existing summary
329
- const appStatus = convertToAppStatus(
330
- entry.path,
331
- status,
332
- conflictDetails,
333
- entry.oldPath
334
- )
335
-
336
- const initialSelectionType =
337
- appStatus.kind === AppFileStatusKind.Modified &&
338
- appStatus.submoduleStatus !== undefined &&
339
- !appStatus.submoduleStatus.commitChanged
340
- ? DiffSelectionType.None
341
- : DiffSelectionType.All
342
-
343
- const selection = DiffSelection.fromInitialSelection(initialSelectionType)
344
-
345
- files.set(
346
- entry.path,
347
- new WorkingDirectoryFileChange(entry.path, appStatus, selection)
348
- )
349
- return files
350
- }
351
-
352
- /**
353
- * Update status header based on the current header entry.
354
- * Reducer.
355
- */
356
- function parseStatusHeader(results: IStatusHeadersData, header: IStatusHeader) {
357
- let {
358
- currentBranch,
359
- currentUpstreamBranch,
360
- currentTip,
361
- branchAheadBehind,
362
- match,
363
- } = results
364
- const value = header.value
365
-
366
- // This intentionally does not match branch.oid initial
367
- if ((match = value.match(/^branch\.oid ([a-f0-9]+)$/))) {
368
- currentTip = match[1]
369
- } else if ((match = value.match(/^branch.head (.*)/))) {
370
- if (match[1] !== '(detached)') {
371
- currentBranch = match[1]
372
- }
373
- } else if ((match = value.match(/^branch.upstream (.*)/))) {
374
- currentUpstreamBranch = match[1]
375
- } else if ((match = value.match(/^branch.ab \+(\d+) -(\d+)$/))) {
376
- const ahead = parseInt(match[1], 10)
377
- const behind = parseInt(match[2], 10)
378
-
379
- if (!isNaN(ahead) && !isNaN(behind)) {
380
- branchAheadBehind = { ahead, behind }
381
- }
382
- }
383
- return {
384
- currentBranch,
385
- currentUpstreamBranch,
386
- currentTip,
387
- branchAheadBehind,
388
- match,
389
- }
390
- }
391
-
392
- async function getMergeConflictDetails(
393
- repository: Repository,
394
- conflictedFilesInIndex: ReadonlyArray<IStatusEntry>
395
- ) {
396
- const conflictCountsByPath = await getFilesWithConflictMarkers(
397
- repository.path
398
- )
399
- const binaryFilePaths = await getBinaryPaths(
400
- repository,
401
- 'MERGE_HEAD',
402
- conflictedFilesInIndex
403
- )
404
- return {
405
- conflictCountsByPath,
406
- binaryFilePaths,
407
- }
408
- }
409
-
410
- async function getRebaseConflictDetails(
411
- repository: Repository,
412
- conflictedFilesInIndex: ReadonlyArray<IStatusEntry>
413
- ) {
414
- const conflictCountsByPath = await getFilesWithConflictMarkers(
415
- repository.path
416
- )
417
- const binaryFilePaths = await getBinaryPaths(
418
- repository,
419
- 'REBASE_HEAD',
420
- conflictedFilesInIndex
421
- )
422
- return {
423
- conflictCountsByPath,
424
- binaryFilePaths,
425
- }
426
- }
427
-
428
- /**
429
- * We need to do these operations to detect conflicts that were the result
430
- * of popping a stash into the index
431
- */
432
- async function getWorkingDirectoryConflictDetails(
433
- repository: Repository,
434
- conflictedFilesInIndex: ReadonlyArray<IStatusEntry>
435
- ) {
436
- const conflictCountsByPath = await getFilesWithConflictMarkers(
437
- repository.path
438
- )
439
- let binaryFilePaths: ReadonlyArray<string> = []
440
- try {
441
- // its totally fine if HEAD doesn't exist, which throws an error
442
- binaryFilePaths = await getBinaryPaths(
443
- repository,
444
- 'HEAD',
445
- conflictedFilesInIndex
446
- )
447
- } catch (error) {}
448
-
449
- return {
450
- conflictCountsByPath,
451
- binaryFilePaths,
452
- }
453
- }
454
-
455
- /**
456
- * gets the conflicted files count and binary file paths in a given repository.
457
- * for computing an `IStatusResult`.
458
- *
459
- * @param repository to get details from
460
- * @param mergeHeadFound whether a merge conflict has been detected
461
- * @param conflictedFilesInIndex all files marked as being conflicted in the
462
- * index. Used to check for files using the binary
463
- * merge driver and whether it looks like a stash
464
- * has introduced conflicts
465
- * @param rebaseInternalState details about the current rebase operation (if
466
- * found)
467
- */
468
- async function getConflictDetails(
469
- repository: Repository,
470
- mergeHeadFound: boolean,
471
- conflictedFilesInIndex: ReadonlyArray<IStatusEntry>,
472
- rebaseInternalState: RebaseInternalState | null
473
- ): Promise<ConflictFilesDetails> {
474
- try {
475
- if (mergeHeadFound) {
476
- return await getMergeConflictDetails(repository, conflictedFilesInIndex)
477
- }
478
-
479
- if (rebaseInternalState !== null) {
480
- return await getRebaseConflictDetails(repository, conflictedFilesInIndex)
481
- }
482
-
483
- // If there's conflicted files in the index but we don't have a merge head
484
- // or a rebase internal state, then we're likely in a situation where a
485
- // stash has introduced conflicts
486
- if (conflictedFilesInIndex.length > 0) {
487
- return await getWorkingDirectoryConflictDetails(
488
- repository,
489
- conflictedFilesInIndex
490
- )
491
- }
492
- } catch (error) {
493
- console.error(
494
- 'Unexpected error from git operations in getConflictDetails',
495
- error
496
- )
497
- }
498
- return {
499
- conflictCountsByPath: new Map<string, number>(),
500
- binaryFilePaths: new Array<string>(),
501
- }
502
- }
@@ -1,212 +0,0 @@
1
- import { git, IGitStringExecutionOptions } from './core'
2
- import { Repository } from '../models/repository'
3
- import { SubmoduleEntry } from '../models/submodule'
4
- import { pathExists } from '../lib/path-exists'
5
- import { executionOptionsWithProgress, IGitOutput } from '../lib/progress/index'
6
- import {
7
- envForRemoteOperation,
8
- getFallbackUrlForProxyResolve,
9
- } from './environment'
10
- import { AuthenticationErrors } from './authentication'
11
- import { IRemote } from '../models/remote'
12
- import { Progress } from '../models/progress'
13
- import { join, resolve } from 'path'
14
- import { readFile } from 'fs/promises'
15
-
16
- /**
17
- * Update submodules after a git operation.
18
- *
19
- * @param repository - The repository in which to update submodules
20
- * @param remote - The remote for environment setup (can be null)
21
- * @param progressCallback - An optional function which will be invoked
22
- * with information about the current progress
23
- * of the submodule update operation.
24
- * @param progressKind - The kind of progress event ('checkout', 'pull', etc.)
25
- * @param title - The title to use for progress reporting
26
- * @param targetOrRemote - The target (for checkout) or remote name (for pull)
27
- * @param allowFileProtocol - Whether to allow file:// protocol for submodules
28
- */
29
- export async function updateSubmodulesAfterOperation<T extends Progress>(
30
- repository: Repository,
31
- remote: IRemote | null,
32
- progressCallback: ((progress: T) => void) | undefined,
33
- progressKind: T['kind'],
34
- title: string,
35
- targetOrRemote: string,
36
- allowFileProtocol: boolean
37
- ): Promise<void> {
38
- const opts: IGitStringExecutionOptions = {
39
- env: await envForRemoteOperation(
40
- getFallbackUrlForProxyResolve(repository, remote)
41
- ),
42
- expectedErrors: AuthenticationErrors,
43
- }
44
-
45
- const args = [
46
- ...(allowFileProtocol ? ['-c', 'protocol.file.allow=always'] : []),
47
- 'submodule',
48
- 'update',
49
- '--init',
50
- '--recursive',
51
- ]
52
-
53
- if (!progressCallback) {
54
- await git(args, repository.path, 'updateSubmodules', opts)
55
- return
56
- }
57
-
58
- // Initial progress
59
- progressCallback({
60
- kind: progressKind,
61
- title,
62
- description: 'Updating submodules',
63
- value: 0,
64
- // Add the target or remote field based on the progress kind
65
- ...(progressKind === 'checkout'
66
- ? { target: targetOrRemote }
67
- : { remote: targetOrRemote }),
68
- } as T)
69
-
70
- let submoduleEventCount = 0
71
-
72
- const progressOpts = await executionOptionsWithProgress(
73
- { ...opts, trackLFSProgress: true },
74
- {
75
- parse(line: string): IGitOutput {
76
- if (
77
- line.match(/^Submodule path (.)+?: checked out /) ||
78
- line.startsWith('Cloning into ')
79
- ) {
80
- submoduleEventCount += 1
81
- }
82
-
83
- return {
84
- kind: 'context',
85
- text: `Updating submodules: ${line}`,
86
- // Math taken from https://math.stackexchange.com/a/2323106
87
- // We do this to fake a progress that slows down as we process more
88
- // events, as we don't know how many submodules there are upfront, or
89
- // what does git have to do with them (cloning, just checking them
90
- // out...)
91
- percent: 1 - Math.exp(-submoduleEventCount * 0.25),
92
- }
93
- },
94
- },
95
- progress => {
96
- const description =
97
- progress.kind === 'progress' ? progress.details.text : progress.text
98
-
99
- const value = progress.percent
100
-
101
- progressCallback({
102
- kind: progressKind,
103
- title,
104
- description,
105
- value,
106
- ...(progressKind === 'checkout'
107
- ? { target: targetOrRemote }
108
- : { remote: targetOrRemote }),
109
- } as T)
110
- }
111
- )
112
-
113
- await git(args, repository.path, 'updateSubmodules', progressOpts)
114
-
115
- // Final progress
116
- progressCallback({
117
- kind: progressKind,
118
- title,
119
- description: 'Submodules updated',
120
- value: 1,
121
- ...(progressKind === 'checkout'
122
- ? { target: targetOrRemote }
123
- : { remote: targetOrRemote }),
124
- } as T)
125
- }
126
-
127
- export async function listSubmodules(
128
- repository: Repository
129
- ): Promise<ReadonlyArray<SubmoduleEntry>> {
130
- const [submodulesFile, submodulesDir] = await Promise.all([
131
- pathExists(join(repository.path, '.gitmodules')),
132
- pathExists(join(repository.path, '.git', 'modules')),
133
- ])
134
-
135
- if (!submodulesFile && !submodulesDir) {
136
- // repo path + .gitmodules and + .git/modules covers the vast majority of
137
- // "normal" repositories but if we're in a linked worktree the modules
138
- // directory is actually in the git common dir so we'll also check for the
139
- // existence of the modules directory there as well before giving up on the
140
- // existence of submodules in this repo. We're reading the commondir file
141
- // ourselves here instead of calling out to git to avoid the cost of
142
- // spawning a process on Windows
143
- const commonDirPath = join(repository.resolvedGitDir, 'commondir')
144
- const commonDir = await readFile(commonDirPath, 'utf8')
145
- .then(content => content.replace(/\r?\n$/, ''))
146
- .then(p => (p ? resolve(repository.resolvedGitDir, p) : null))
147
- .catch(() => null)
148
-
149
- if (!commonDir || !(await pathExists(join(commonDir, 'modules')))) {
150
- console.info('No submodules found. Skipping "git submodule status"')
151
- return []
152
- }
153
- }
154
-
155
- // We don't recurse when listing submodules here because we don't have a good
156
- // story about managing these currently. So for now we're only listing
157
- // changes to the top-level submodules to be consistent with `git status`
158
- const { stdout, exitCode } = await git(
159
- ['submodule', 'status', '--'],
160
- repository.path,
161
- 'listSubmodules',
162
- { successExitCodes: new Set([0, 128]) }
163
- )
164
-
165
- if (exitCode === 128) {
166
- // unable to parse submodules in repository, giving up
167
- return []
168
- }
169
-
170
- const submodules = new Array<SubmoduleEntry>()
171
-
172
- // entries are of the format:
173
- // 1eaabe34fc6f486367a176207420378f587d3b48 git (v2.16.0-rc0)
174
- //
175
- // first character:
176
- // - " " if no change
177
- // - "-" if the submodule is not initialized
178
- // - "+" if the currently checked out submodule commit does not match the SHA-1 found in the index of the containing repository
179
- // - "U" if the submodule has merge conflicts
180
- //
181
- // then the 40-character SHA represents the current commit
182
- //
183
- // then the path to the submodule
184
- //
185
- // then the output of `git describe` for the submodule in braces
186
- // we're not leveraging this in the app, so go and read the docs
187
- // about it if you want to learn more:
188
- //
189
- // https://git-scm.com/docs/git-describe
190
- const statusRe = /^.([^ ]+) (.+) \((.+?)\)$/gm
191
-
192
- for (const [, sha, path, describe] of stdout.matchAll(statusRe)) {
193
- submodules.push({ path, url: '', describe, sha, status: { commitChanged: false, modifiedChanges: false, untrackedChanges: false } })
194
- }
195
-
196
- return submodules
197
- }
198
-
199
- export async function resetSubmodulePaths(
200
- repository: Repository,
201
- paths: ReadonlyArray<string>
202
- ): Promise<void> {
203
- if (paths.length === 0) {
204
- return
205
- }
206
-
207
- await git(
208
- ['submodule', 'update', '--recursive', '--force', '--', ...paths],
209
- repository.path,
210
- 'updateSubmodule'
211
- )
212
- }