@scolladon/tsgit 2.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/README.md +14 -2
  2. package/dist/cjs/adapters/browser/index.cjs +1 -2
  3. package/dist/cjs/adapters/memory/index.cjs +1 -2
  4. package/dist/cjs/adapters/node/index.cjs +1 -2
  5. package/dist/cjs/chunks/adapter-detect-DW9fsw9d.cjs +1 -0
  6. package/dist/cjs/chunks/browser-http-transport-DGwW5YL7.cjs +1 -0
  7. package/dist/cjs/chunks/context-BcoAzPuU.cjs +0 -1
  8. package/dist/cjs/chunks/error-CfLWDui_.cjs +1 -0
  9. package/dist/cjs/chunks/index-Cy44GVR6.cjs +1 -0
  10. package/dist/cjs/chunks/inflate-CmCtM4-w.cjs +1 -0
  11. package/dist/cjs/chunks/lru-cache-1OU7JhD8.cjs +0 -1
  12. package/dist/cjs/chunks/memory-http-transport-CGriODcQ.cjs +1 -0
  13. package/dist/cjs/chunks/node-ssh-transport-PFu3ijfp.cjs +1 -0
  14. package/dist/cjs/chunks/{progress-CxU62NC1.cjs → progress-D8Dqbftk.cjs} +1 -2
  15. package/dist/cjs/chunks/readable-stream-MTA6D0Zh.cjs +0 -1
  16. package/dist/cjs/chunks/repository-Ci-BBxk0.cjs +1 -0
  17. package/dist/cjs/chunks/write-sparse-checkout-C1dsHCAD.cjs +1 -0
  18. package/dist/cjs/commands/index.cjs +1 -2
  19. package/dist/cjs/index.browser.cjs +1 -2
  20. package/dist/cjs/index.cjs +1 -2
  21. package/dist/cjs/index.default.cjs +1 -2
  22. package/dist/cjs/index.node.cjs +1 -2
  23. package/dist/cjs/operators/index.cjs +0 -1
  24. package/dist/cjs/primitives/index.cjs +1 -2
  25. package/dist/cjs/transport/index.cjs +0 -1
  26. package/dist/esm/adapters/browser/index.js +1 -2
  27. package/dist/esm/adapters/memory/index.js +1 -2
  28. package/dist/esm/adapters/node/index.js +1 -2
  29. package/dist/esm/chunks/adapter-detect-BkCMnjrI.js +1 -0
  30. package/dist/esm/chunks/browser-http-transport-CSxAte5h.js +1 -0
  31. package/dist/esm/chunks/context-CumKOV7K.js +0 -1
  32. package/dist/esm/chunks/error-BotOd-nD.js +1 -0
  33. package/dist/esm/chunks/index-DsvINN8n.js +1 -0
  34. package/dist/esm/chunks/inflate-BCIXqeeE.js +1 -0
  35. package/dist/esm/chunks/lru-cache-Cy7C7Lx2.js +0 -1
  36. package/dist/esm/chunks/memory-http-transport-caqmMGR1.js +1 -0
  37. package/dist/esm/chunks/node-ssh-transport-BgSv2IhT.js +1 -0
  38. package/dist/esm/chunks/{progress-BZobfl7p.js → progress-B_AJnOHx.js} +1 -2
  39. package/dist/esm/chunks/readable-stream-CGuf8k1J.js +0 -1
  40. package/dist/esm/chunks/repository-DyxknzvE.js +1 -0
  41. package/dist/esm/chunks/write-sparse-checkout-BwHbNKNS.js +1 -0
  42. package/dist/esm/commands/index.js +1 -2
  43. package/dist/esm/index.browser.js +1 -2
  44. package/dist/esm/index.default.js +1 -2
  45. package/dist/esm/index.js +1 -2
  46. package/dist/esm/index.node.js +1 -2
  47. package/dist/esm/operators/index.js +0 -1
  48. package/dist/esm/primitives/index.js +1 -2
  49. package/dist/esm/transport/index.js +0 -1
  50. package/dist/types/adapters/browser/index.d.cts +5 -3
  51. package/dist/types/adapters/browser/index.d.ts +5 -3
  52. package/dist/types/adapters/memory/index.d.cts +31 -4
  53. package/dist/types/adapters/memory/index.d.ts +31 -4
  54. package/dist/types/adapters/node/index.d.cts +146 -40
  55. package/dist/types/adapters/node/index.d.ts +146 -40
  56. package/dist/types/chunks/{context-YDw6qicq.d.cts → context-CF1YF2S8.d.cts} +165 -6
  57. package/dist/types/chunks/{context-CCL0_F8R.d.ts → context-sIhhtk2u.d.ts} +165 -6
  58. package/dist/types/chunks/{http-transport--_NdQOiw.d.cts → http-transport-DirKfK2S.d.cts} +1 -1
  59. package/dist/types/chunks/{http-transport--_NdQOiw.d.ts → http-transport-DirKfK2S.d.ts} +1 -1
  60. package/dist/types/chunks/index-B5Dps3fg.d.ts +2468 -0
  61. package/dist/types/chunks/index-B_A8VLaf.d.ts +1221 -0
  62. package/dist/types/chunks/index-Dfh8cvEs.d.cts +2468 -0
  63. package/dist/types/chunks/index-Dqxddhav.d.cts +1221 -0
  64. package/dist/types/chunks/progress-BjAKfkam.d.ts +1217 -0
  65. package/dist/types/chunks/progress-Ldnfb8st.d.cts +1217 -0
  66. package/dist/types/chunks/reflog-entry-Cqh3QrPH.d.ts +697 -0
  67. package/dist/types/chunks/reflog-entry-Dy-O27Dd.d.cts +697 -0
  68. package/dist/types/chunks/{repository-FoS_Laoy.d.ts → repository-D8QBTkEz.d.ts} +58 -20
  69. package/dist/types/chunks/{repository-BeifCqp0.d.cts → repository-D9YrVhcH.d.cts} +58 -20
  70. package/dist/types/commands/index.d.cts +4 -1259
  71. package/dist/types/commands/index.d.ts +4 -1259
  72. package/dist/types/index.browser.d.cts +7 -8
  73. package/dist/types/index.browser.d.ts +7 -8
  74. package/dist/types/index.d.cts +61 -124
  75. package/dist/types/index.d.ts +61 -124
  76. package/dist/types/index.default.d.cts +7 -8
  77. package/dist/types/index.default.d.ts +7 -8
  78. package/dist/types/index.node.d.cts +7 -8
  79. package/dist/types/index.node.d.ts +7 -8
  80. package/dist/types/primitives/index.d.cts +4 -692
  81. package/dist/types/primitives/index.d.ts +4 -692
  82. package/dist/types/transport/index.d.cts +1 -1
  83. package/dist/types/transport/index.d.ts +1 -1
  84. package/package.json +94 -28
  85. package/dist/cjs/adapters/browser/index.cjs.map +0 -1
  86. package/dist/cjs/adapters/memory/index.cjs.map +0 -1
  87. package/dist/cjs/adapters/node/index.cjs.map +0 -1
  88. package/dist/cjs/chunks/adapter-detect-CD_LcgaH.cjs +0 -2
  89. package/dist/cjs/chunks/adapter-detect-CD_LcgaH.cjs.map +0 -1
  90. package/dist/cjs/chunks/browser-http-transport-CiMRqtDS.cjs +0 -2
  91. package/dist/cjs/chunks/browser-http-transport-CiMRqtDS.cjs.map +0 -1
  92. package/dist/cjs/chunks/context-BcoAzPuU.cjs.map +0 -1
  93. package/dist/cjs/chunks/error-CfjFO3x_.cjs +0 -2
  94. package/dist/cjs/chunks/error-CfjFO3x_.cjs.map +0 -1
  95. package/dist/cjs/chunks/index-BWCq_5BJ.cjs +0 -2
  96. package/dist/cjs/chunks/index-BWCq_5BJ.cjs.map +0 -1
  97. package/dist/cjs/chunks/lru-cache-1OU7JhD8.cjs.map +0 -1
  98. package/dist/cjs/chunks/memory-http-transport-BVL6VgB-.cjs +0 -2
  99. package/dist/cjs/chunks/memory-http-transport-BVL6VgB-.cjs.map +0 -1
  100. package/dist/cjs/chunks/node-http-transport-BvfVcf02.cjs +0 -2
  101. package/dist/cjs/chunks/node-http-transport-BvfVcf02.cjs.map +0 -1
  102. package/dist/cjs/chunks/progress-CxU62NC1.cjs.map +0 -1
  103. package/dist/cjs/chunks/readable-stream-MTA6D0Zh.cjs.map +0 -1
  104. package/dist/cjs/chunks/repository-BEg2zNtx.cjs +0 -2
  105. package/dist/cjs/chunks/repository-BEg2zNtx.cjs.map +0 -1
  106. package/dist/cjs/chunks/walk-submodules-D2Sp7JEB.cjs +0 -2
  107. package/dist/cjs/chunks/walk-submodules-D2Sp7JEB.cjs.map +0 -1
  108. package/dist/cjs/commands/index.cjs.map +0 -1
  109. package/dist/cjs/index.browser.cjs.map +0 -1
  110. package/dist/cjs/index.cjs.map +0 -1
  111. package/dist/cjs/index.default.cjs.map +0 -1
  112. package/dist/cjs/index.node.cjs.map +0 -1
  113. package/dist/cjs/operators/index.cjs.map +0 -1
  114. package/dist/cjs/primitives/index.cjs.map +0 -1
  115. package/dist/cjs/transport/index.cjs.map +0 -1
  116. package/dist/esm/adapters/browser/index.js.map +0 -1
  117. package/dist/esm/adapters/memory/index.js.map +0 -1
  118. package/dist/esm/adapters/node/index.js.map +0 -1
  119. package/dist/esm/chunks/adapter-detect-DkZhhUhd.js +0 -2
  120. package/dist/esm/chunks/adapter-detect-DkZhhUhd.js.map +0 -1
  121. package/dist/esm/chunks/browser-http-transport-4rJkHcQu.js +0 -2
  122. package/dist/esm/chunks/browser-http-transport-4rJkHcQu.js.map +0 -1
  123. package/dist/esm/chunks/context-CumKOV7K.js.map +0 -1
  124. package/dist/esm/chunks/error-Dc-SRSJK.js +0 -2
  125. package/dist/esm/chunks/error-Dc-SRSJK.js.map +0 -1
  126. package/dist/esm/chunks/index-jH0UMhh-.js +0 -2
  127. package/dist/esm/chunks/index-jH0UMhh-.js.map +0 -1
  128. package/dist/esm/chunks/lru-cache-Cy7C7Lx2.js.map +0 -1
  129. package/dist/esm/chunks/memory-http-transport-CA1WxWBp.js +0 -2
  130. package/dist/esm/chunks/memory-http-transport-CA1WxWBp.js.map +0 -1
  131. package/dist/esm/chunks/node-http-transport-DPa2lK3T.js +0 -2
  132. package/dist/esm/chunks/node-http-transport-DPa2lK3T.js.map +0 -1
  133. package/dist/esm/chunks/progress-BZobfl7p.js.map +0 -1
  134. package/dist/esm/chunks/readable-stream-CGuf8k1J.js.map +0 -1
  135. package/dist/esm/chunks/repository-DF6ePd1x.js +0 -2
  136. package/dist/esm/chunks/repository-DF6ePd1x.js.map +0 -1
  137. package/dist/esm/chunks/walk-submodules-Dq9oGwP8.js +0 -2
  138. package/dist/esm/chunks/walk-submodules-Dq9oGwP8.js.map +0 -1
  139. package/dist/esm/commands/index.js.map +0 -1
  140. package/dist/esm/index.browser.js.map +0 -1
  141. package/dist/esm/index.default.js.map +0 -1
  142. package/dist/esm/index.js.map +0 -1
  143. package/dist/esm/index.node.js.map +0 -1
  144. package/dist/esm/operators/index.js.map +0 -1
  145. package/dist/esm/primitives/index.js.map +0 -1
  146. package/dist/esm/transport/index.js.map +0 -1
  147. package/dist/types/chunks/index-entry-DtEbVpOG.d.cts +0 -47
  148. package/dist/types/chunks/index-entry-UD4dvtKh.d.ts +0 -47
  149. package/dist/types/chunks/progress-7KKiXXfX.d.ts +0 -405
  150. package/dist/types/chunks/progress-By8yFaUE.d.cts +0 -405
  151. package/dist/types/chunks/reflog-entry-BbNnXCTC.d.cts +0 -368
  152. package/dist/types/chunks/reflog-entry-CSzjnZd4.d.ts +0 -368
  153. package/dist/types/chunks/write-tree-C3oNxOlX.d.cts +0 -196
  154. package/dist/types/chunks/write-tree-DRI-LzSr.d.ts +0 -196
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./error-CfLWDui_.cjs"),t=require("./write-sparse-checkout-C1dsHCAD.cjs"),a=require("./readable-stream-MTA6D0Zh.cjs"),n=require("../transport/index.cjs");const r=e=>{const t=void 0!==e.stage1,a=void 0!==e.stage2,n=void 0!==e.stage3;return t&&a&&n?"both-modified":a&&n?"both-added":t&&a?"deleted-by-them":t&&n?"deleted-by-us":t?"both-deleted":a?"added-by-us":"added-by-them"},i=t=>new e.TsgitError({code:"INVALID_DIFF_INPUT",reason:t}),o=/[ \t\v\f\r]+$/,s=e=>{const t=e.indexOf("\n");return-1===t?e:e.slice(0,t)},c=e=>{const t=[];for(const a of e.split("\n")){const e=a.replace(o,"");if(""!==e)t.push(e);else if(t.length>0)break}return t.join(" ")},d=e=>{const t=[];for(const a of e.split("\n")){const e=a.replace(o,"");(""!==e||0!==t.length&&""!==t[t.length-1])&&t.push(e)}return""===t[t.length-1]&&t.pop(),0===t.length?"":`${t.join("\n")}\n`};function u(e,a,n){return void 0!==a&&void 0!==n?function(e,a,n){if(a.id!==n.id||a.mode!==n.mode)return t.isSameKind(a.mode,n.mode)?{type:"modify",path:e,oldId:n.id,newId:a.id,oldMode:n.mode,newMode:a.mode}:{type:"type-change",path:e,oldId:n.id,newId:a.id,oldMode:n.mode,newMode:a.mode}}(e,a,n):void 0!==a?{type:"add",newPath:(r=a).path,newId:r.id,newMode:r.mode}:function(e,t){return{type:"delete",oldPath:e,oldId:t.id,oldMode:t.mode}}(e,n);var r}function l(a,n){!function(a){if(void 0!==a&&a.entries.size>t.MAX_FLAT_TREE_ENTRIES)throw new e.TsgitError({code:"INVALID_TREE_FOR_DIFF",reason:"FlatTree exceeds MAX_FLAT_TREE_ENTRIES"})}(n);const r=function(e){const t=new Map;for(const a of e.entries)0===a.flags.stage&&t.set(a.path,a);return t}(a),i=function(e,t){const a=new Set;for(const t of e.keys())a.add(t);if(void 0!==t)for(const e of t.entries.keys())a.add(e);return a}(r,n),o=[];for(const e of i){const t=u(e,r.get(e),n?.entries.get(e));void 0!==t&&o.push(t)}return{changes:t.sortByPath(o,t.primaryPath)}}function f(e,t){const a=t.flags.stage;return 1===a?{...e,stage1:t}:2===a?{...e,stage2:t}:{...e,stage3:t}}function h(e){return"distinct-types"===e.type?function(e){const t=[];return void 0!==e.ourId&&void 0!==e.ourMode&&void 0!==e.ourPath&&t.push({id:e.ourId,mode:e.ourMode,stage:2,path:e.ourPath}),void 0!==e.theirId&&void 0!==e.theirMode&&void 0!==e.theirPath&&t.push({id:e.theirId,mode:e.theirMode,stage:3,path:e.theirPath}),void 0!==e.baseId&&void 0!==e.baseMode&&void 0!==e.basePath&&t.push({id:e.baseId,mode:e.baseMode,stage:1,path:e.basePath}),t}(e):function(e){const t=[];return void 0!==e.baseId&&void 0!==e.baseMode&&t.push({id:e.baseId,mode:e.baseMode,stage:1,path:e.path}),void 0!==e.ourId&&void 0!==e.ourMode&&t.push({id:e.ourId,mode:e.ourMode,stage:2,path:e.path}),void 0!==e.theirId&&void 0!==e.theirMode&&t.push({id:e.theirId,mode:e.theirMode,stage:3,path:e.path}),t}(e)}function m(e){if("distinct-types"===e.type){const t=[];return void 0!==e.ourPath&&t.push(e.ourPath),void 0!==e.theirPath&&t.push(e.theirPath),t}return[e.path]}function w(e){return e.flatMap(e=>m(e)).sort(t.comparePaths)}function p(e,a){const n=a(e.mode);return{ctimeSeconds:n.ctimeSeconds,ctimeNanoseconds:n.ctimeNanoseconds,mtimeSeconds:n.mtimeSeconds,mtimeNanoseconds:n.mtimeNanoseconds,dev:n.dev,ino:n.ino,mode:e.mode,uid:n.uid,gid:n.gid,fileSize:n.fileSize,id:e.id,flags:{...t.STAGE0_FLAGS,stage:e.stage},path:e.path}}function g(e,a){const n=new Set;for(const t of e)for(const e of m(t)){if(n.has(e))throw i("duplicate conflict path");n.add(e)}const r=[];for(const t of e)for(const e of h(t))r.push(p(e,a));return r.sort((e,a)=>{const n=t.comparePaths(e.path,a.path);return 0!==n?n:e.flags.stage-a.flags.stage}),r}const y="0000000",v={old:"a/",new:"b/"},b="\",k=(e,a)=>void 0===a?t.isBinary(e):"binary"===a,x=new TextDecoder("utf-8",{fatal:!1});function I(e,t){for(let a=0;a<t.length;a++){const n=t.charCodeAt(a);if(10===n||13===n||0===n)throw i(`${e} contains control character (code ${n}) at index ${a}`)}}function E(e,t){if(I("pathPrefix.old",t.old),I("pathPrefix.new",t.new),"rename"===e.type||"copy"===e.type)return I("oldPath",e.oldPath),void I("newPath",e.newPath);"add"!==e.type?"delete"!==e.type?I("path",e.path):I("oldPath",e.oldPath):I("newPath",e.newPath)}function T(e){return void 0===e||0===e.length?{lines:[],hasTrailingNewline:!0}:{lines:t.splitLines(e).map($),hasTrailingNewline:10===e[e.length-1]}}function $(e){return x.decode(e.subarray(0,e.length>0&&10===e[e.length-1]?e.length-1:e.length))}function O(e){return e.slice(0,7)}function R(e,t,a){return`diff --git ${a.old}${e} ${a.new}${t}`}function S(e,t,a,n){return`@@ -${1===t?`${e}`:`${e},${t}`} +${1===n?`${a}`:`${a},${n}`} @@`}function D(e,t,a){return"common"===e.kind?function(e,t){const a=[];for(let n=e.oursStart;n<e.oursEnd;n++){const r=e.theirsStart+(n-e.oursStart);a.push({kind:"context",oldIndex:n,newIndex:r,text:t[r]})}return a}(e,a):"ours-only"===e.kind?function(e,t){const a=[];for(let n=e.oursStart;n<e.oursEnd;n++)a.push({kind:"delete",oldIndex:n,newIndex:e.theirsStart,text:t[n]});return a}(e,t):function(e,t){const a=[];for(let n=e.theirsStart;n<e.theirsEnd;n++)a.push({kind:"insert",oldIndex:e.oursEnd,newIndex:n,text:t[n]});return a}(e,a)}function A(e,t){const a="insert"!==e.kind&&e.oldIndex===t.lastOldIdx&&t.lastOldIdx===t.oldTotal-1,n="delete"!==e.kind&&e.newIndex===t.lastNewIdx&&t.lastNewIdx===t.newTotal-1;return"context"===e.kind?a&&!t.oldHasTrailingNewline||n&&!t.newHasTrailingNewline:"delete"===e.kind?a&&!t.oldHasTrailingNewline:n&&!t.newHasTrailingNewline}function C(e){return"context"===e?" ":"delete"===e?"-":"+"}function M(e){const t=[];for(const a of e)t.push(`${C(a.kind)}${a.text}`),a.trailingNoNewline&&t.push(b);return t}function N(e,t,a){const n=T(t),r=[];if(r.push(R(e.newPath,e.newPath,a)),r.push(`new file mode ${e.newMode}`),r.push(`index ${y}..${O(e.newId)}`),r.push("--- /dev/null"),r.push(`+++ ${a.new}${e.newPath}`),0===n.lines.length)return r;r.push(S(0,0,1,n.lines.length));for(const e of n.lines)r.push(`+${e}`);return n.hasTrailingNewline||r.push(b),r}function P(e,t,a){const n=T(t),r=[];if(r.push(R(e.oldPath,e.oldPath,a)),r.push(`deleted file mode ${e.oldMode}`),r.push(`index ${O(e.oldId)}..${y}`),r.push(`--- ${a.old}${e.oldPath}`),r.push("+++ /dev/null"),0===n.lines.length)return r;r.push(S(1,n.lines.length,0,0));for(const e of n.lines)r.push(`-${e}`);return n.hasTrailingNewline||r.push(b),r}function L(e){return{path:e.path,oldId:e.oldId,newId:e.newId,oldMode:e.oldMode,newMode:e.newMode}}function _(e){return e.oldMode===e.newMode?[`index ${O(e.oldId)}..${O(e.newId)} ${e.newMode}`]:[`old mode ${e.oldMode}`,`new mode ${e.newMode}`,`index ${O(e.oldId)}..${O(e.newId)}`]}function H(e,t,a,n){return[`Binary files ${0===a.length?"/dev/null":`${t.old}${e.path}`} and ${0===n.length?"/dev/null":`${t.new}${e.path}`} differ`]}function j(e,a,n,r){const i=T(e),o=T(a);return function(e,t,a){if(0===e.length)return[];const n=function(e,t){const a=[];return e.forEach((e,n)=>{if("context"===e.kind)return;const r=a[a.length-1];void 0!==r&&n-r.last<=t?a[a.length-1]={first:r.first,last:n}:a.push({first:n,last:n})}),a}(e,2*t+1);return 0===n.length?[]:n.map(n=>function(e,t,a,n){const r=Math.max(0,e.first-a),i=Math.min(t.length,e.last+a+1),o=t.slice(r,i),s=function(e){let t=0,a=0,n=0,r=0,i=!1,o=!1,s=-1,c=-1;for(const d of e)"insert"!==d.kind&&(i||(t=d.oldIndex+1,i=!0),n++,s=d.oldIndex),"delete"!==d.kind&&(o||(a=d.newIndex+1,o=!0),r++,c=d.newIndex);return 0===n&&(t=e[0].oldIndex),0===r&&(a=e[0].newIndex),{oldStart:t,oldLen:n,newStart:a,newLen:r,lastOldIdx:s,lastNewIdx:c}}(o),c={...n,lastOldIdx:s.lastOldIdx,lastNewIdx:s.lastNewIdx},d=o.map(e=>({kind:e.kind,text:e.text,trailingNoNewline:A(e,c)}));return{oldStart:s.oldStart,oldLen:s.oldLen,newStart:s.newStart,newLen:s.newLen,body:d}}(n,e,t,a))}(function(e,a,n,r,i){const o=t.diffLines(n,r,void 0!==i?.lineKey?{lineKey:i.lineKey}:void 0),s=[];for(const t of o.hunks)for(const n of D(t,e,a))s.push(n);return!0!==i?.ignoreBlankLines?s:function(e,a,n){return e.filter(e=>{if("context"===e.kind)return!0;const r="delete"===e.kind?a.oursLines[e.oldIndex]:a.theirsLines[e.newIndex];return void 0===r||!t.isBlankLine(r,n)})}(s,o,i.lineKey??t.NONE_KEY)}(i.lines,o.lines,e,a,r),n,{oldTotal:i.lines.length,newTotal:o.lines.length,oldHasTrailingNewline:i.hasTrailingNewline,newHasTrailingNewline:o.hasTrailingNewline})}function U(e,t,a,n,r,i){const o=j(a,n,r,i);if(0===o.length&&!0===i?.ignoreBlankLines)return[];const s=[];s.push(`--- ${t.old}${e.path}`),s.push(`+++ ${t.new}${e.path}`);for(const e of o){s.push(S(e.oldStart,e.oldLen,e.newStart,e.newLen));for(const t of M(e.body))s.push(t)}return s}function B(e,a,n,r,i,o){const s=[];if(s.push(R(e.oldPath,e.newPath,r)),e.oldMode!==e.newMode&&(s.push(`old mode ${e.oldMode}`),s.push(`new mode ${e.newMode}`)),s.push(`similarity index ${t.toSimilarityPercent(e.similarity.score)}%`),s.push(`${a} from ${e.oldPath}`),s.push(`${a} to ${e.newPath}`),e.similarity.score===t.MAX_SCORE)return s;const c=function(e,t,a,n,r,i,o){const s=[];if(s.push(function(e){const t=`index ${O(e.oldId)}..${O(e.newId)}`;return e.oldMode===e.newMode?`${t} ${e.newMode}`:t}(e)),k(t,o)||k(a,o))return s.push(`Binary files ${n.old}${e.oldPath} and ${n.new}${e.newPath} differ`),s;const c=j(t,a,r,i);if(0===c.length&&!0===i?.ignoreBlankLines)return s;s.push(`--- ${n.old}${e.oldPath}`),s.push(`+++ ${n.new}${e.newPath}`);for(const e of c){s.push(S(e.oldStart,e.oldLen,e.newStart,e.newLen));for(const t of M(e.body))s.push(t)}return s}(e,n.oldContent??new Uint8Array(0),n.newContent??new Uint8Array(0),r,i,o,n.patchBinaryOverride);return[...s,...c]}function W(e,t){return[R(e.newPath,e.newPath,t),`new file mode ${e.newMode}`,`index ${y}..${O(e.newId)}`,`Binary files /dev/null and ${t.new}${e.newPath} differ`]}function F(e,t){return[R(e.oldPath,e.oldPath,t),`deleted file mode ${e.oldMode}`,`index ${O(e.oldId)}..${y}`,`Binary files ${t.old}${e.oldPath} and /dev/null differ`]}function z(e,a,n,r){const i=e.change,o=e.patchBinaryOverride;if("add"===i.type){const t=e.newContent??new Uint8Array(0);return k(t,o)?W(i,a):N(i,e.newContent,a)}if("delete"===i.type){const t=e.oldContent??new Uint8Array(0);return k(t,o)?F(i,a):P(i,e.oldContent,a)}return"rename"===i.type?function(e,t,a,n,r){return B(e,"rename",t,a,n,r)}(i,e,a,n,r):"copy"===i.type?function(e,t,a,n,r){return B(e,"copy",t,a,n,r)}(i,e,a,n,r):"type-change"===i.type?function(e,t,a,n,r){const i={oldPath:e.path,oldId:e.oldId,oldMode:e.oldMode},o={newPath:e.path,newId:e.newId,newMode:e.newMode};return[...k(t,r)?F(i,n):P(i,t,n),...k(a,r)?W(o,n):N(o,a,n)]}(i,e.oldContent??new Uint8Array(0),e.newContent??new Uint8Array(0),a,o):function(e,a,n,r,i,o,s){return void 0!==e.broken?function(e,a,n,r,i,o,s){const c=e.broken,d=L(e),u=[];u.push(R(d.path,d.path,r)),u.push(`dissimilarity index ${t.toSimilarityPercent(c.score)}%`);const l=`index ${O(d.oldId)}..${O(d.newId)}`;u.push(d.oldMode===d.newMode?`${l} ${d.newMode}`:l);const f=k(a,s)||k(n,s)?H(d,r,a,n):U(d,r,a,n,i,o);for(const e of f)u.push(e);return u}(e,a,n,r,i,o,s):function(e,t,a,n,r,i,o){if(e.oldId!==e.newId&&!k(a,o)&&!k(n,o)){const o=U(e,t,a,n,r,i);if(0===o.length)return[];const s=[];s.push(R(e.path,e.path,t));for(const t of _(e))s.push(t);for(const e of o)s.push(e);return s}const s=[];s.push(R(e.path,e.path,t));for(const t of _(e))s.push(t);if(e.oldId===e.newId)return s;for(const r of H(e,t,a,n))s.push(r);return s}(L(e),r,a,n,i,o,s)}(i,e.oldContent??new Uint8Array(0),e.newContent??new Uint8Array(0),a,n,r,o)}function q(e,t){const a=function(e){if(void 0===e)return 3;if(!Number.isInteger(e)||e<0)throw i(`contextLines must be a non-negative integer; got ${e}`);return e}(t?.contextLines);if(0===e.length)return"";const n=t?.pathPrefix??v;for(const t of e)E(t.change,n);const r=function(e){if(void 0===e)return;const t=e.lineKey,a=e.ignoreBlankLines;return void 0!==t&&!0===a?{lineKey:t,ignoreBlankLines:!0}:void 0!==t?{lineKey:t}:!0===a?{ignoreBlankLines:!0}:void 0}(t),o=[];for(const t of e){const e=z(t,n,a,r);for(const t of e)o.push(t)}return 0===o.length?"":(o.push(""),o.join("\n"))}const G=e=>{const a=e.startsWith("!"),n=a?e.slice(1):e;return t.containsGlob(n)?{pattern:e,body:n,negated:a,isLiteral:!1,compiled:t.compileGlob(n,{anchored:n.includes("/")})}:{pattern:e,body:n,negated:a,isLiteral:!0,compiled:t.compileGlob(n,{anchored:!0,withDirSuffix:!0})}},V=(e,t)=>{let a=!1;for(const n of e)n.compiled.test(t)&&(a=!n.negated);return a},K=t=>new e.TsgitError({code:"INVALID_MERGE_TREE",reason:t}),X=t=>new e.TsgitError({code:"INVALID_MERGE_INPUT",reason:t}),Y=268435456,Z=new TextEncoder;function J(e){let t=0;for(const a of e)t+=a.length;return t}function Q(e){if(0===e.length)return new Uint8Array(0);const t=J(e),a=e[e.length-1],n=0===a.length||10!==a[a.length-1],r=new Uint8Array(t+(n?1:0));let i=0;for(const t of e)r.set(t,i),i+=t.length;return n&&(r[i]=10),r}function ee(e,t,a={}){if("diff3"===a.conflictStyle)throw X("diff3 conflict style requires base lines — not supported in v1");const n=a.labels?.ours??"ours",r=a.labels?.theirs??"theirs";if(J(e)+J(t)>Y)throw X("conflict output exceeds MAX_CONFLICT_OUTPUT_BYTES");const i=a.markerSize??7,o=Z.encode(`${"<".repeat(i)} ${n}\n`),s=Z.encode(`${"=".repeat(i)}\n`),c=Z.encode(`${">".repeat(i)} ${r}\n`),d=Q(e),u=Q(t),l=new Uint8Array(o.length+d.length+s.length+u.length+c.length);let f=0;return l.set(o,f),f+=o.length,l.set(d,f),f+=d.length,l.set(s,f),f+=s.length,l.set(u,f),f+=u.length,l.set(c,f),l}const te="HEAD",ae=e=>e.slice(0,7),ne=(e,t)=>`${ae(e)} (${t})`,re=e=>`parent of ${e}`,ie=(e,t)=>{const a=ne(e,t);return{ours:te,theirs:a,base:re(a)}},oe=(e,t)=>{const a=ne(e,t);return{ours:te,theirs:re(a),base:a}},se={ours:"Updated upstream",theirs:"Stashed changes",base:"Stash base"},ce={ours:"ours",theirs:"theirs",base:""};function de(e,t){const a=[];let n;const r=()=>{void 0!==n&&(a.push({baseStart:n.baseStart,baseEnd:n.baseEnd,replacement:n.replacement}),n=void 0)};for(const a of e)if("common"!==a.kind)if(void 0===n&&(n={baseStart:a.oursStart,baseEnd:a.oursStart,replacement:[]}),"ours-only"===a.kind)n.baseEnd=Math.max(n.baseEnd,a.oursEnd);else for(let e=a.theirsStart;e<a.theirsEnd;e++)n.replacement.push(t[e]);else r();return r(),a}function ue(e,t){return e.baseStart===e.baseEnd?t.baseStart===t.baseEnd?e.baseStart===t.baseStart:e.baseStart>=t.baseStart&&e.baseStart<t.baseEnd:t.baseStart===t.baseEnd?t.baseStart>=e.baseStart&&t.baseStart<e.baseEnd:e.baseStart<t.baseEnd&&t.baseStart<e.baseEnd}function le(e,t,a,n){const r=[];let i=t;for(const t of n){for(let a=i;a<t.baseStart;a++)r.push(e[a]);for(const e of t.replacement)r.push(e);i=t.baseEnd}for(let t=i;t<a;t++)r.push(e[t]);return r}function fe(e,a){const n=Math.min(e.length,a.length);let r=0;for(;r<n&&t.bytesEqual(e[r],a[r]);)r++;let i=0;for(;i<n-r&&t.bytesEqual(e[e.length-1-i],a[a.length-1-i]);)i++;return{prefix:e.slice(0,r),oursMid:e.slice(r,e.length-i),theirsMid:a.slice(r,a.length-i),suffix:e.slice(e.length-i)}}function he(e){if(!(e.ours.length>0))return"clean-theirs";if(!(e.theirs.length>0))return"clean-ours";const[a]=e.ours,[n]=e.theirs;return 1===e.ours.length&&1===e.theirs.length&&a.baseStart===n.baseStart&&a.baseEnd===n.baseEnd&&function(e,a){if(e.length!==a.length)return!1;for(let n=0;n<e.length;n++)if(!t.bytesEqual(e[n],a[n]))return!1;return!0}(a.replacement,n.replacement)?"clean-twin":"conflict"}function me(e){return{kind:"clean",start:e.start,end:e.end,replacement:e.ours.length>0?e.ours[0].replacement:e.theirs[0].replacement}}function we(e){return e.length>0&&10===e[e.length-1]}function pe(e){let t=0;for(let a=0;a<e.length;a++)t+=e[a].length,a<e.length-1&&!we(e[a])&&(t+=1);const a=new Uint8Array(t);let n=0;for(let t=0;t<e.length;t++){const r=e[t];a.set(r,n),n+=r.length,t<e.length-1&&!we(r)&&(a[n]=10,n+=1)}return a}function ge(e,a,n,r){const i=t.diffLines(e,a),o=t.diffLines(e,n),s=i.degraded||o.degraded?[{kind:"conflict",ours:t.splitLines(a),theirs:t.splitLines(n)}]:function(e,t,a){const n=function(e){const t=[];let a=0;for(;a<e.length;){const n=e[a];if("conflict"!==n.classification){t.push(me(n)),a++;continue}let r=n.end;const i=[...n.ours],o=[...n.theirs];let s=a+1;for(;s<e.length;){const t=e[s];if("conflict"!==t.classification||t.start-r>3)break;i.push(...t.ours),o.push(...t.theirs),r=t.end,s++}t.push({kind:"conflict",start:n.start,end:r,ours:i,theirs:o}),a=s}return t}(function(e){const t=[];let a;for(const n of e)void 0!==a&&ue(n,{baseStart:a.start,baseEnd:a.end})?a.end=Math.max(a.end,n.baseEnd):(a={start:n.baseStart,end:n.baseEnd,ours:[],theirs:[]},t.push(a)),("ours"===n.side?a.ours:a.theirs).push(n);return t}(function(e,t){const a=[...e.map(e=>({...e,side:"ours"})),...t.map(e=>({...e,side:"theirs"}))];return a.sort((e,t)=>e.baseStart-t.baseStart),a}(t,a)).map(e=>({...e,classification:he(e)}))),r=[],i=e=>{e.length>0&&r.push({kind:"clean",lines:e})};let o=0;for(const t of n){if(i(e.slice(o,t.start)),"clean"===t.kind)i(t.replacement);else{const a=fe(le(e,t.start,t.end,t.ours),le(e,t.start,t.end,t.theirs));i(a.prefix),r.push({kind:"conflict",ours:a.oursMid,theirs:a.theirsMid}),i(a.suffix)}o=t.end}return i(e.slice(o)),r}(i.oursLines,de(i.hunks,i.theirsLines),de(o.hunks,o.theirsLines));return"union"===r.favor?function(e){const t=[];for(const a of e)"clean"===a.kind?t.push(...a.lines):t.push(...a.ours,...a.theirs);return{status:"clean",bytes:pe(t)}}(s):function(e,t){const a=[];let n=!1;for(const r of e)"clean"===r.kind?a.push(...r.lines):(n=!0,a.push(ee(r.ours,r.theirs,t)));const r=function(e){let t=0;for(const a of e)t+=a.length;const a=new Uint8Array(t);let n=0;for(const t of e)a.set(t,n),n+=t.length;return a}(a);return n?{status:"conflict",conflictType:"content",markedBytes:r}:{status:"clean",bytes:r}}(s,r)}const ye=new Uint8Array(0);function ve(e,t){return e.id===t.id&&e.mode===t.mode}function be(e){return e===t.FILE_MODE.GITLINK}function ke(e,a){if(void 0!==e&&e.entries.size>t.MAX_FLAT_TREE_ENTRIES)throw K(`${a} FlatTree exceeds MAX_FLAT_TREE_ENTRIES`)}function xe(e){return{status:"conflict",conflict:e}}function Ie(e,t,a,n){return xe({type:"modify-delete",path:e,baseId:t.id,baseMode:t.mode,...void 0===a?{}:{ourId:a.id,ourMode:a.mode},...void 0===n?{}:{theirId:n.id,theirMode:n.mode}})}function Ee(e,t,a,n){return xe({type:"type-change",path:e,baseId:t.id,ourId:a.id,theirId:n.id,baseMode:t.mode,ourMode:a.mode,theirMode:n.mode})}function Te(e,t,a,n){return void 0===t?{status:"resolved-known",path:e,id:a.id,mode:a.mode}:ve(t,a)?{status:"resolved-deleted",path:e}:"our"===n?Ie(e,t,a,void 0):Ie(e,t,void 0,a)}function $e(e){return"file"===t.kindOf(e)}function Oe(e){return e===t.FILE_MODE.SYMLINK}function Re(e,t,a,n,r,i){const o=$e(t.mode),s=function(e,t,a){const n=`${t}~${function(e){return e.replace(/\//g,"_")}(a)}`;let r=n,i=0;for(;e.has(r);)r=`${n}_${i}`,i+=1;return e.add(r),r}(r,e,o?n.ours:n.theirs),c=o?s:e,d=o?e:s;if(void 0===i)return xe({type:"distinct-types",path:e,ourId:t.id,ourMode:t.mode,theirId:a.id,theirMode:a.mode,ourPath:c,theirPath:d});const u=$e(i.mode)?s:e;return xe({type:"distinct-types",path:e,baseId:i.id,baseMode:i.mode,basePath:u,ourId:t.id,ourMode:t.mode,theirId:a.id,theirMode:a.mode,ourPath:c,theirPath:d})}function Se(e,t){if(e.length>Y)throw X(`contentMerger returned oversize ${t}`)}async function De(e,t,a,n){const r={path:e,ourId:t.id,theirId:a.id,ourMode:t.mode,theirMode:a.mode},i=await n(r,void 0,ye,ye);return"clean"===i.status?(Se(i.bytes,"clean bytes"),t.mode===a.mode?void 0!==i.id?{tag:"resolved",outcome:{status:"resolved-known",path:e,id:i.id,mode:t.mode}}:{tag:"resolved",outcome:{status:"resolved-merged",path:e,bytes:i.bytes,mode:t.mode}}:{tag:"clean-split",bytes:i.bytes}):(Se(i.markedBytes,"marked bytes"),{tag:"conflict",bytes:i.markedBytes,conflictType:i.conflictType})}function Ae(e,a,n,r,i,o,s){return void 0===n&&void 0===r?{status:"resolved-deleted",path:e}:void 0===n?Te(e,a,r,"their"):void 0===r?Te(e,a,n,"our"):void 0===a?async function(e,t,a,n,r,i){if(ve(t,a))return{status:"resolved-known",path:e,id:t.id,mode:t.mode};const o=$e(t.mode),s=$e(a.mode),c=Oe(t.mode),d=Oe(a.mode);if(o&&d||c&&s)return Re(e,t,a,r,i);if(!o||!s)return function(e,t,a){return xe({type:"add-add",path:e,ourId:t.id,theirId:a.id,ourMode:t.mode,theirMode:a.mode})}(e,t,a);const u=await De(e,t,a,n);return"resolved"===u.tag?u.outcome:xe({type:"add-add",path:e,ourId:t.id,theirId:a.id,ourMode:t.mode,theirMode:a.mode,conflictContent:u.bytes,contentVerdict:"clean-split"===u.tag?"clean":u.conflictType})}(e,n,r,i,o,s):async function(e,a,n,r,i,o,s){const c=ve(a,n),d=ve(a,r);return c&&d?{status:"unchanged",path:e,id:a.id,mode:a.mode}:c?{status:"resolved-known",path:e,id:r.id,mode:r.mode}:d||ve(n,r)?{status:"resolved-known",path:e,id:n.id,mode:n.mode}:function(e,a,n,r,i,o,s){if(be(n.mode)||be(r.mode))return be(n.mode)&&be(r.mode)&&be(a.mode)?function(e,t,a,n){return xe({type:"gitlink",path:e,baseId:t.id,ourId:a.id,theirId:n.id,baseMode:t.mode,ourMode:a.mode,theirMode:n.mode})}(e,a,n,r):Ee(e,a,n,r);const c=Oe(n.mode),d=Oe(r.mode);if(c&&d)return function(e,t,a,n){return xe({type:"content",path:e,baseId:t.id,baseMode:t.mode,ourId:a.id,ourMode:a.mode,theirId:n.id,theirMode:n.mode})}(e,a,n,r);if(c||d)return be(a.mode)?Ee(e,a,n,r):Re(e,n,r,o,s,a);if(!t.isSameKind(a.mode,n.mode))return async function(e,t,a,n,r){const i=await De(e,a,n,r);return"resolved"===i.tag?i.outcome:xe("clean-split"===i.tag?{type:"content",path:e,baseId:t.id,baseMode:t.mode,ourId:a.id,ourMode:a.mode,theirId:n.id,theirMode:n.mode,conflictContent:i.bytes,contentVerdict:"clean"}:{type:i.conflictType,path:e,baseId:t.id,baseMode:t.mode,ourId:a.id,ourMode:a.mode,theirId:n.id,theirMode:n.mode,conflictContent:i.bytes})}(e,a,n,r,i);const u=function(e,t,a){return t.mode===a.mode?t.mode:t.mode===e.mode?a.mode:t.mode}(a,n,r);return async function(e,t,a,n,r,i){const o={path:e,baseId:t.id,ourId:a.id,theirId:n.id,baseMode:t.mode,ourMode:a.mode,theirMode:n.mode},s=await i(o,void 0,ye,ye);return"clean"===s.status?(Se(s.bytes,"clean bytes"),void 0!==s.id?{status:"resolved-known",path:e,id:s.id,mode:r}:{status:"resolved-merged",path:e,bytes:s.bytes,mode:r}):(Se(s.markedBytes,"marked bytes"),xe({type:s.conflictType,path:e,baseId:t.id,ourId:a.id,theirId:n.id,baseMode:t.mode,ourMode:a.mode,theirMode:n.mode,conflictContent:s.markedBytes,mergedMode:r}))}(e,a,n,r,u,i)}(e,a,n,r,i,o,s)}(e,a,n,r,i,o,s)}async function Ce(e,a,n,r,i=ce){ke(e,"base"),ke(a,"ours"),ke(n,"theirs");const o=function(e,a,n){const r=new Set;for(const t of[e,a,n])if(void 0!==t)for(const e of t.entries.keys())r.add(e);if(r.size>t.MAX_FLAT_TREE_ENTRIES)throw K("union FlatTree exceeds MAX_FLAT_TREE_ENTRIES");return r}(e,a,n),s=t.sortByPath([...o],e=>e),c=new Set(o),d=[];for(const t of s){const o=Ae(t,e?.entries.get(t),a?.entries.get(t),n?.entries.get(t),r,i,c),s=o instanceof Promise?await o:o;d.push(s)}const u=function(e){const t=[];for(const a of e)"conflict"===a.status&&t.push(a.conflict);return t}(d);return{outcomes:d,conflicts:u,cleanMerge:0===u.length}}const Me="agent=tsgit/0.0",Ne=["multi_ack_detailed","side-band-64k","ofs-delta","thin-pack","no-progress","include-tag","filter",Me],Pe=["report-status","side-band-64k","ofs-delta","atomic","delete-refs",Me],Le="push-cert",_e=e=>{const t=e.indexOf("=");return t<0?e:e.slice(0,t)},He=(e,t)=>{const a=new Map;for(const t of e)a.set(_e(t),t);const n=[];for(const e of t){const t=_e(e),r=a.get(t);void 0!==r&&n.push(r)}return n},je=t=>new e.TsgitError({code:"PKT_LENGTH_RESERVED",value:t}),Ue=t=>new e.TsgitError({code:"PKT_TOO_LARGE",value:t}),Be=t=>new e.TsgitError({code:"INVALID_BASE_URL",reason:t}),We=(t,a)=>new e.TsgitError({code:"MISSING_SERVICE_HEADER",expected:t,actual:a}),Fe=t=>new e.TsgitError({code:"INVALID_REF_LINE",line:t}),ze=t=>new e.TsgitError({code:"INVALID_SIDEBAND_CHANNEL",channel:t}),qe=t=>new e.TsgitError({code:"SIDEBAND_FATAL",message:t}),Ge=t=>new e.TsgitError({code:"INVALID_REPORT_STATUS",line:t}),Ve=(t,a)=>new e.TsgitError({code:"REFSPEC_INVALID",raw:t,reason:a}),Ke=(t,a)=>new e.TsgitError({code:"TOO_MANY_ADVERTISED_REFS",count:t,limit:a}),Xe=(t,a)=>new e.TsgitError({code:"INVALID_FILTER_SPEC",spec:t,reason:a}),Ye=()=>new e.TsgitError({code:"REMOTE_FILTER_UNSUPPORTED"}),Ze=t=>new e.TsgitError({code:"UNEXPECTED_V2_SECTION",section:t}),Je=t=>new e.TsgitError({code:"V2_COMMAND_UNSUPPORTED",command:t}),Qe=(t,a,n)=>new e.TsgitError({code:"TOO_MANY_SECTION_ENTRIES",section:t,count:a,limit:n}),et="blob:limit=",tt="tree:",at=/^(\d+)([kmg])?$/i,nt=/^\d+$/,rt=e=>{if(""===e)throw Xe(e,"empty");if("blob:none"===e)return{kind:"blob-none"};if(e.startsWith(et))return(e=>{const t=e.slice(11).match(at);if(null===t)throw Xe(e,"bad-blob-limit");const a=Number(t[1])*(e=>{switch(e?.toLowerCase()){case"k":return 1024;case"m":return 1048576;case"g":return 1073741824;default:return 1}})(t[2]);if(!Number.isSafeInteger(a))throw Xe(e,"bad-blob-limit");return{kind:"blob-limit",bytes:a}})(e);if(e.startsWith(tt))return(e=>{const t=e.slice(5);if(!nt.test(t))throw Xe(e,"bad-tree-depth");const a=Number(t);if(!Number.isSafeInteger(a))throw Xe(e,"bad-tree-depth");return{kind:"tree-depth",depth:a}})(e);throw Xe(e,"unknown-kind")},it=e=>{switch(e.kind){case"blob-none":return"blob:none";case"blob-limit":return`${et}${e.bytes}`;case"tree-depth":return`${tt}${e.depth}`}},ot=new TextEncoder,st=new TextDecoder("utf-8",{fatal:!1}),ct=/^[0-9a-f]{4}$/i,dt=65520,ut=ot.encode("0000"),lt=ot.encode("0001");ot.encode("0002");const ft=e=>{const t=(e+65536).toString(16).slice(-4);return ot.encode(t)},ht=(e,t)=>{let a=t.byteLength;for(const t of e){if(t.byteLength>65516)throw new RangeError(`pkt-line: payload too large (${t.byteLength} > 65516)`);a+=t.byteLength+4}const n=new Uint8Array(a);let r=0;for(const t of e)n.set(ft(t.byteLength+4),r),r+=4,n.set(t,r),r+=t.byteLength;return n.set(t,r),n},mt=e=>ht(e,ut),wt=e=>ht(e,new Uint8Array(0)),pt=t=>{const a=st.decode(t.subarray(0,4));if(!ct.test(a))throw new e.TsgitError({code:"INVALID_PKT_LENGTH",value:a});const n=Number.parseInt(a,16);if(n>dt)throw Ue(n);return n},gt=(t,a)=>{const n=a?.v2??!1;return{[Symbol.asyncIterator]:()=>async function*(t,a){const n=new vt;for await(const e of t)n.accept(e),yield*bt(n,a);if(n.used>0)throw new e.TsgitError({code:"PKT_TRUNCATED",remaining:n.used})}(t,n)}},yt=(e,t,a)=>{if(0===e)return{kind:"flush",consume:4};if(1===e){if(!a)throw je(1);return{kind:"delim",consume:4}}if(2===e){if(!a)throw je(2);return{kind:"response-end",consume:4}}if(e<4)throw je(e);return t<e?{kind:"wait"}:{kind:"data",consume:e}};class vt{acc=new Uint8Array(dt);used=0;accept(e){if(this.used+e.byteLength<=dt)return this.acc.set(e,this.used),void(this.used+=e.byteLength);const t=Math.max(0,4-this.used),a=e.subarray(0,t);throw this.acc.set(a,this.used),this.used+=a.byteLength,pt(this.acc),Ue(this.used)}drop(e){this.acc.copyWithin(0,e,this.used),this.used-=e}slice(e,t){return this.acc.slice(e,t)}}function*bt(e,t){for(;e.used>=4;){const a=pt(e.acc),n=yt(a,e.used,t);if("wait"===n.kind)return;if("data"===n.kind){const t=e.slice(4,n.consume);e.drop(n.consume),yield{kind:"data",payload:t};continue}e.drop(n.consume),yield{kind:n.kind}}}const kt=new TextDecoder("utf-8",{fatal:!1}),xt=new TextEncoder,It=(e,t)=>{const a=0===t.length?"":`\0${t.join(" ")}`;return xt.encode(`${e.oldId} ${e.newId} ${e.name}${a}\n`)},Et=e=>[xt.encode("certificate version 0.1\n"),xt.encode(`pusher ${e.pusher}\n`),xt.encode(`pushee ${e.pushee}\n`),xt.encode(`nonce ${e.nonce}\n`),xt.encode("\n"),...e.updates.map(e=>It(e,[]))],Tt=e=>e.endsWith("\n")?e.slice(0,-1):e,$t=e=>{if(e.startsWith("ok "))return{name:e.slice(3),accepted:!0};if(e.startsWith("ng ")){const t=e.slice(3),a=t.indexOf(" ");if(a<0)throw Ge(e);return{name:t.slice(0,a),accepted:!1,reason:t.slice(a+1)}}throw Ge(e)},Ot=async e=>{const t=await(async e=>{const t=[];for await(const a of e){if("data"!==a.kind)return t;t.push(Tt(kt.decode(a.payload)))}return t})(e);if(0===t.length)throw Ge("");const[a,...n]=t,r=(e=>{if("unpack ok"===e)return{ok:!0};if(e.startsWith("unpack "))return{ok:!1,error:e.slice(7)};throw Ge(e)})(a);return r.ok?{unpackOk:!0,refUpdates:n.map($t)}:{unpackOk:!1,unpackError:r.error,refUpdates:[]}},Rt=new TextDecoder("utf-8",{fatal:!1}),St=(e,t)=>{if(e)try{e(t)}catch{}},Dt=(e,t)=>({[Symbol.asyncIterator]:()=>async function*(e,t){for await(const a of e){if("data"!==a.kind)return;if(0===a.payload.byteLength)throw ze(-1);const e=a.payload[0],n=a.payload.subarray(1);if(1!==e){if(2!==e){if(3===e){const e=Rt.decode(n);throw St(t.onError,e),qe(e)}throw ze(e)}St(t.onProgress,Rt.decode(n))}else yield n}}(e,t)}),At=new TextDecoder("utf-8",{fatal:!1}),Ct=new TextEncoder,Mt=/^[0-9a-f]{40}([0-9a-f]{24})?$/i,Nt=/^# service=(?<service>[^\n]+)\n?$/,Pt=5e5,Lt=(e,t)=>{let a;try{a=new URL(e)}catch{throw Be("invalid URL")}if(""!==a.hash)throw Be("fragment must not be set");const n=a.pathname.endsWith("/")?a.pathname.slice(0,-1):a.pathname;return`${a.protocol}//${a.host}${n}/info/refs${""===a.search?`?service=${t}`:`${a.search}&service=${t}`}`},_t=e=>e.endsWith("\n")?e.slice(0,-1):e,Ht=e=>{if(!Mt.test(e))throw Fe(e);return t.ObjectId.from(e)},jt=e=>{const t=e.indexOf(" ");if(t<0)throw Fe(e);const a=e.slice(0,t),n=e.slice(t+1);if(0===n.length)throw Fe(e);return{id:a,name:n}},Ut=async(e,t,a)=>{const n=((e,t)=>{if(e.done||"data"!==e.value.kind)throw We(t,"");const a=_t(At.decode(e.value.payload)),n=Nt.exec(`${a}\n`),r=n?.groups?.service;if(void 0===r)throw We(t,a);if(r!==t)throw We(t,r);return r})(t,a),r=await e.next();if(r.done||"flush"!==r.value.kind)throw We(a,n)},Bt=(t,a,n)=>{if(t.byName.has(a))throw(t=>new e.TsgitError({code:"DUPLICATE_REF",name:t}))(a);t.refs.push({id:n,name:a}),t.byName.set(a,t.refs.length-1)},Wt=(t,a,n)=>{if(void 0===a){const a=(t=>{const a=t.indexOf("\0");if(a<0)throw new e.TsgitError({code:"MISSING_CAPABILITIES"});const n=t.slice(0,a),r=t.slice(a+1),i=n.indexOf(" ");if(i<0)throw Fe(t);const o=n.slice(0,i),s=n.slice(i+1);if(0===s.length)throw Fe(t);return{id:o,name:s,tail:r}})(n);return Bt(t,a.name,Ht(a.id)),(e=>{const t=new Map;for(const a of e)t.set(_e(a),a);return Array.from(t.values())})(a.tail.split(" ").filter(e=>e.length>0))}if(n.endsWith("^{}"))return((e,t)=>{const a=t.slice(0,-3),n=jt(a),r=Ht(n.id),i=e.byName.get(n.name);if(void 0===i)throw Fe(t);e.refs[i]={...e.refs[i],peeled:r}})(t,n),a;const r=jt(n);return Bt(t,r.name,Ht(r.id)),a},Ft=async(e,t,a)=>{const n=e[Symbol.asyncIterator]();try{(a?.servicePrologue??1)&&await(async(e,t)=>{const a=await e.next();await Ut(e,a,t)})(n,t);const{capabilities:e,refs:r}=await(async e=>{const t={refs:[],byName:new Map};let a,n=await e.next();for(;!n.done&&"data"===n.value.kind;){if(t.refs.length>=Pt)throw Ke(t.refs.length+1,Pt);const r=_t(At.decode(n.value.payload));a=Wt(t,a,r),n=await e.next()}return{capabilities:a??[],refs:t.refs}})(n),i=((e,t)=>{const a=t.find(e=>"HEAD"===e.name);if(a)return a;const n=e.find(e=>e.startsWith("symref=HEAD:"));if(!n)return;const r=n.slice(12),i=t.find(e=>e.name===r);return i?{name:"HEAD",id:i.id}:void 0})(e,r);return i?{capabilities:e,refs:r,head:i}:{capabilities:e,refs:r}}finally{await(n.return?.())}},zt=e=>Ct.encode(`have ${e}\n`),qt=(e=>{if(e.byteLength>65516)throw new RangeError(`pkt-line: payload too large (${e.byteLength} > 65516)`);const t=e.byteLength+4,a=new Uint8Array(t);return a.set(ft(t),0),a.set(e,4),a})(Ct.encode("done\n")),Gt=a=>{const n=_t(a).split(" "),r=t.ObjectId.from(n[1]),i=n[2];if(void 0===i)return{id:r,status:"ack"};if("continue"===i||"common"===i||"ready"===i)return{id:r,status:i};throw new e.TsgitError({code:"UNKNOWN_ACK_STATUS",value:i})},Vt="shallow ",Kt="unshallow ",Xt=(e,a)=>{const n=_t(e),r=n.slice(a.length);if(!Mt.test(r))throw Fe(n);return t.ObjectId.from(r)},Yt=(e,t)=>e.startsWith(Vt)?(t.shallow.push(Xt(e,Vt)),!0):!!e.startsWith(Kt)&&(t.unshallow.push(Xt(e,Kt)),!0),Zt=new WeakMap,Jt="sha1",Qt=new Set(["ls-refs","fetch"]),ea=new TextDecoder,ta=async e=>{const t=await e.next();var a;if(!t.done&&"data"===t.value.kind)return(a=ea.decode(t.value.payload)).endsWith("\n")?a.slice(0,-1):a},aa=(t,a)=>{const[n,r]=(e=>{const t=e.indexOf("=");return-1===t?[e,void 0]:[e.slice(0,t),e.slice(t+1)]})(a);if("agent"!==n){if("object-format"!==n)((e,t,a)=>{if(Qt.has(t)&&(e.commands.add(t),"fetch"===t))for(const t of(e=>void 0===e?[]:e.split(" ").filter(e=>e.length>0))(a))e.fetchFeatures.add(t)})(t,n,r);else if(t.objectFormat=r??"",t.objectFormat!==Jt)throw new e.TsgitError({code:"UNSUPPORTED_OBJECT_FORMAT",format:t.objectFormat})}else t.agent=r},na=["acknowledgments","shallow-info","wanted-refs","packfile"],ra=new TextEncoder,ia=new TextDecoder,oa=e=>na.includes(e),sa=e=>e.endsWith("\n")?e.slice(0,-1):e,ca=(e,t,a)=>{const n=wt([ra.encode(`command=${e}\n`),ra.encode(`${Me}\n`),ra.encode("object-format=sha1\n")]),r=wt([...t.map(e=>ra.encode(`${e}\n`)),...a]);return((...e)=>{const t=e.reduce((e,t)=>e+t.byteLength,0),a=new Uint8Array(t);let n=0;for(const t of e)a.set(t,n),n+=t.byteLength;return a})(n,lt,r,ut)};async function*da(e,t){for(;;){const a=await e.next();if(a.done||"data"!==a.value.kind)return void t(!a.done&&"delim"===a.value.kind);yield a.value}}const ua=new TextEncoder,la=new TextDecoder,fa=Pt;async function*ha(e,t){let a=0;for await(const n of t){if(a+=1,a>fa)throw Qe(e,a,fa);yield n}}const ma=e=>ua.encode(`want ${e}\n`),wa=e=>ua.encode(`have ${e}\n`),pa=ua.encode("done\n"),ga=async e=>{const t=[];let a=!1,n=!1;for await(const r of e){const e=la.decode(r.payload);e.startsWith("ACK ")?t.push(Gt(e)):e.startsWith("NAK")?a=!0:n=!0}return{acks:t,nak:a,ready:n}},ya=async e=>{const t={shallow:[],unshallow:[]};for await(const a of e)Yt(la.decode(a.payload),t);return t},va=e=>{const a=e.indexOf(" "),n=e.slice(a+1).replace(/\n$/,"");return{id:t.ObjectId.from(e.slice(0,a)),name:n}},ba=async e=>{const t=[];for await(const a of e)t.push(va(la.decode(a.payload)));return t},ka=new TextEncoder,xa=new TextDecoder,Ia=/^[0-9a-f]{40}([0-9a-f]{24})?$/i,Ea=e=>ka.encode(`ref-prefix ${e}\n`),Ta=e=>e.endsWith("\n")?e.slice(0,-1):e,$a=(e,t)=>{const a=e.find(e=>e.startsWith(t));return void 0===a?void 0:a.slice(t.length)},Oa=e=>{const t=e.indexOf(" ");if(t<0)throw Fe(e);const a=e.slice(0,t);if("unborn"!==a&&!Ia.test(a))throw Fe(e);const n=e.slice(t+1),r=n.indexOf(" "),i=-1===r?n:n.slice(0,r);if(0===i.length)throw Fe(e);const o=-1===r?[]:n.slice(r+1).split(" "),s=$a(o,"symref-target:");if(void 0!==s)return{name:i,oidToken:a,symrefTarget:s};const c=$a(o,"peeled:");return void 0===c?{name:i,oidToken:a}:{name:i,oidToken:a,peeled:c}},Ra=(e,a)=>{if(!Ia.test(e))throw Fe(a);return t.ObjectId.from(e)},Sa=(e,t,a)=>{if(e.length>=Pt)throw Ke(e.length+1,Pt);const n=Ra(t.oidToken,a);e.push(void 0===t.peeled?{id:n,name:t.name}:{id:n,name:t.name,peeled:Ra(t.peeled,a)})},Da={second:1,minute:60,hour:3600,day:86400,week:604800,month:2592e3,year:31536e3},Aa=/^(\d{4})-(\d{2})-(\d{2})(?: (\d{2}):(\d{2}):(\d{2}))?$/,Ca=/^(\d+)[ .]([a-z]+?)s?(?:[ .]ago)?$/;function Ma(e,t){const a=e.trim().toLowerCase();return"now"===a?t:"yesterday"===a?t-86400:function(e){const t=Aa.exec(e);if(null===t)return;const[,a,n,r,i,o,s]=t,c=Number(a),d=Number(n),u=Number(r),l=void 0===i?0:Number(i),f=void 0===o?0:Number(o),h=void 0===s?0:Number(s);if(d<1||d>12)return;if(u<1||u>function(e,t){return 2===t&&function(e){return e%4==0&&e%100!=0||e%400==0}(e)?29:Na[t-1]}(c,d))return;if(l>23)return;if(f>59)return;if(h>59)return;const m=new Date(c,d-1,u,l,f,h);return m.setFullYear(c),Math.floor(m.getTime()/1e3)}(a)??function(e,t){const a=Ca.exec(e);if(null===a)return;const[,n,r]=a,i=Da[r];return void 0===i?void 0:t-Number(n)*i}(a,t)}const Na=[31,28,31,30,31,30,31,31,30,31,30,31],Pa=e=>[e,`refs/${e}`,`refs/tags/${e}`,`refs/heads/${e}`,`refs/remotes/${e}`,`refs/remotes/${e}/HEAD`],La=e=>`commit (cherry-pick): ${e}`,_a=e=>`commit: ${e}`,Ha=e=>`branch: Created from ${e}`,ja=e=>`reset: moving to ${e}`,Ua=e=>`clone: from ${e}`,Ba=e=>`fetch ${e}: storing head`,Wa=e=>`revert: ${e}`,Fa=e=>`rebase (start): checkout ${e}`,za=e=>`rebase (pick): ${e}`,qa=e=>`rebase (reword): ${e}`,Ga=e=>`rebase (continue): ${e}`,Va=(e,t)=>`rebase (finish): ${e} onto ${t}`,Ka=e=>`rebase (abort): returning to ${e}`,Xa="merge",Ya="rebase",Za="cherry-pick",Ja="revert",Qa=`${Xa} --abort`,en=`${Za} --continue`,tn=`${Za} --skip`,an=`${Za} --abort`,nn=`${Ja} --continue`,rn=`${Ja} --skip`,on=`${Ja} --abort`,sn=e=>`${e.layout.gitDir}/${t.MERGE_HEAD}`,cn=e=>`${e.layout.gitDir}/${t.MERGE_MSG}`,dn=e=>`${e.layout.gitDir}/${t.ORIG_HEAD}`,un=async(e,t)=>{await e.fs.writeUtf8(cn(e),t)},ln=async(e,t)=>{await e.fs.writeUtf8(dn(e),`${t}\n`)},fn=async e=>{const a=sn(e);if(!await e.fs.exists(a))return;const n=(await e.fs.readUtf8(a)).trim();return 0!==n.length?t.ObjectId.from(n):void 0},hn=async e=>{const t=cn(e);if(await e.fs.exists(t))return e.fs.readUtf8(t)},mn=async e=>{for(const t of[sn(e),cn(e)])await e.fs.exists(t)&&await e.fs.rm(t)},wn=async e=>{const t=cn(e);await e.fs.exists(t)&&await e.fs.rm(t)},pn=t.RefName.from("HEAD"),gn=async t=>{const a=`${t.layout.gitDir}/HEAD`;if(!await t.fs.exists(a))throw new e.TsgitError({code:"NOT_A_REPOSITORY",path:t.layout.workDir});return t.layout.bare?t.layout.gitDir:t.layout.workDir},yn=["excludesfile","attributesfile"],vn=async a=>{const n=await gn(a);return await(async a=>{const[n,r]=await Promise.all([t.findFirstValuelessEntry(a,"core",void 0,yn),t.findFirstInvalidCompression(a)]);if(void 0!==n&&(void 0===r||n.line<r.line))throw e.configMissingValue(n.key,n.source,n.line);if(void 0!==r){if("numeric"===r.failure.kind)throw e.configBadNumericValue(r.key,r.source,r.failure.value,r.failure.reason);throw e.configBadZlibLevel(r.failure.level)}})(a),n},bn=async(a,n)=>{if(await(async e=>{const a=await t.readConfig(e);return a.core?.bare??!1})(a))throw(t=>new e.TsgitError({code:"BARE_REPOSITORY",operation:t}))(n)},kn=async a=>{const n=`${a.layout.gitDir}/HEAD`;let r;try{r=await a.fs.readUtf8(n)}catch(a){if(a instanceof e.TsgitError&&"FILE_NOT_FOUND"===a.data.code)throw t.refNotFound(pn);throw a}const i=t.parseLooseRef(r);return"symbolic"===i.type?{kind:"symbolic",target:i.target}:{kind:"direct",id:i.target}},xn=e=>"symbolic"===e.kind?e.target:void 0,In=[{file:t.MERGE_HEAD,operation:Xa},{file:t.CHERRY_PICK_HEAD,operation:Za},{file:t.REVERT_HEAD,operation:Ja},{file:t.REBASE_HEAD,operation:Ya}],En=async(t,a={})=>{const n=a.except,r=e=>Array.isArray(n)?n.includes(e):n===e,i=await Promise.all(In.map(e=>t.fs.exists(`${t.layout.gitDir}/${e.file}`)));for(let t=0;t<In.length;t+=1){const a=In[t];if(void 0!==a&&!r(a.operation)&&!0===i[t])throw e.operationInProgress(a.operation)}},Tn=e=>{if("object"!=typeof e)return 7;const t=(e=>{if(!/^[+-]?[0-9]+$/.test(e))return;const t=Number(e);return t>2147483647?void 0:t})(e.set);return void 0!==t&&t>0?t:7},$n=(e,t)=>{switch(e){case"O":return t.O;case"A":return t.A;case"B":return t.B;case"L":return t.L;case"P":return t.P;case"S":return t.S;case"X":return t.X;case"Y":return t.Y;case"%":return"%";default:return`%${e}`}},On=async(e,a)=>{const n=await t.loadSparseMatcher(e),r=await t.readObject(e,a);if("commit"!==r.type)throw t.unexpectedObjectType("commit",r.type,a);const i=await t.acquireIndexLock(e);try{const a=await t.readIndex(e),o=await t.materializeTree(e,{targetTree:r.data.tree,currentIndex:a,force:!0,forceRewriteAll:!0,...void 0!==n?{sparse:n}:{}});await i.commit(o.newIndexEntries)}finally{await i.release()}},Rn=async a=>{if(await vn(a),await bn(a,Qa),void 0===await fn(a))throw e.noOperationInProgress(Xa);const n=await(async e=>{const a=dn(e);if(!await e.fs.exists(a))return;const n=(await e.fs.readUtf8(a)).trim();return 0!==n.length?t.ObjectId.from(n):void 0})(a);if(void 0===n)throw e.noOperationInProgress(Xa);const r=await kn(a);if("symbolic"!==r.kind)throw e.unsupportedOperation(Qa,"cannot abort with detached HEAD");return await On(a,n),await t.updateRef(a,r.target,n,{reflogMessage:ja("HEAD")}),await mn(a),{origHead:n,branch:r.target}},Sn=(e,a,n,r)=>({ctimeSeconds:Math.floor(e.ctimeMs/1e3),ctimeNanoseconds:0,mtimeSeconds:Math.floor(e.mtimeMs/1e3),mtimeNanoseconds:0,dev:e.dev,ino:e.ino,mode:a,uid:e.uid,gid:e.gid,fileSize:e.size,id:n,flags:t.STAGE0_FLAGS,path:r}),Dn=t.validateWorkingTreePath,An=(e,a)=>t.joinPath(e.layout.workDir,a),Cn=async(t,a)=>{const n=Dn(a),r=An(t,n);let i;try{i=await t.fs.lstat(r)}catch{throw e.checkoutOverwriteDirty({localChanges:[n],untracked:[]})}if(!i.isFile&&!i.isSymbolicLink)throw e.checkoutOverwriteDirty({localChanges:[n],untracked:[]});await t.fs.rm(r)},Mn=async(e,t,a)=>{const n=Dn(t),r=Dn(a);await Nn(e,An(e,n),An(e,r))},Nn=async(t,a,n)=>{const r=await t.fs.lstat(a);if(r.isDirectory&&!r.isSymbolicLink){for(const e of await t.fs.readdir(a))await Nn(t,`${a}/${e.name}`,`${n}/${e.name}`);return void await t.fs.rmRecursive(a)}const i=e.dirname(n);""!==i&&await t.fs.mkdir(i),await t.fs.rename(a,n)},Pn=new TextEncoder,Ln=e=>{for(const t of e){const e=t.startsWith("!")?t.slice(1):t;Dn(e),_n(t)}const t=(e=>e.map(G))(e),a=t.filter(Un).map(e=>Wn(e)),n=t.some(Bn);return{matcher:t,literalMustMatch:a,hasGlob:n}},_n=t=>{if(Pn.encode(t).byteLength>256)throw e.invalidOption("paths","pattern exceeds max length 256 bytes");if(Hn(t)>4)throw e.invalidOption("paths","pattern exceeds max **-token count 4")},Hn=e=>{let t=0,a=0;for(;a<e.length;)"*"!==e[a]||"*"!==e[a+1]?a+=1:(t+=1,a+=2);return t},jn=(t,a)=>{if(0===t.length)return;const n=new Set(a);for(const r of t)if(!n.has(r)&&!a.some(e=>e.startsWith(`${r}/`)))throw e.pathspecNoMatch(r)},Un=e=>!e.negated&&e.isLiteral,Bn=e=>!e.negated&&!e.isLiteral,Wn=e=>e.body,Fn=new Set(["FILE_NOT_FOUND","INVALID_INDEX_HEADER","INVALID_INDEX_ENTRY"]),zn=async(a,n,r)=>{const i=await t.acquireIndexLock(a);try{const t=await Yn(a),o=new Map(t),s=[],c=[];for(const i of n){const n=await Zn(a,i,r);if("missing"===n)throw e.pathspecNoMatch(i);const d=t.get(i);o.set(i,n),void 0===d?s.push(i):d.id===n.id&&d.mode===n.mode||c.push(i)}return await i.commit(Array.from(o.values())),{added:s,modified:c,removed:[]}}finally{await i.release()}},qn=async(e,a)=>{if(0===a.length)return!1;for(const n of a){const a=await e.fs.lstat(t.joinPath(e.layout.workDir,n)).catch(()=>{});if(void 0===a)return!1;if(a.isDirectory&&!a.isSymbolicLink)return!1}return!0},Gn=async(e,a,n,r)=>{const i=await t.buildRepoIgnorePredicate(e),o=async(e,t)=>!!await i(e,t)||!t&&!V(a,e),s=await t.acquireIndexLock(e);try{const a=await Yn(e),i=new Map(a),c=[],d=[],u=[],l=new Set;for await(const n of t.walkWorkingTree(e,{ignore:o})){const t=await Xn(e,n,a,l,r);void 0!==t&&(c.push(t.path),i.set(t.path,t.entry),"added"===t.kind?d.push(t.path):"modified"===t.kind&&u.push(t.path))}return jn(n,c),d.sort(),u.sort(),await s.commit(Array.from(i.values())),{added:d,modified:u,removed:[]}}finally{await s.release()}},Vn=async(e,t,a)=>{const n=[];for(const[r,i]of e)t.has(r)||i.flags.skipWorktree||await Kn(r,a)||n.push(r);return n},Kn=async(e,t)=>{if(await t(e,!1))return!0;const a=e.split("/");for(let e=1;e<a.length;e+=1){const n=a.slice(0,e).join("/");if(await t(n,!0))return!0}return!1},Xn=async(a,n,r,i,o)=>{const{path:s,stat:c}=n;if(i.add(s),c.size>t.MAX_WORKING_TREE_BLOB_BYTES)throw e.workingTreeFileTooLarge(s,c.size,t.MAX_WORKING_TREE_BLOB_BYTES);const d=await Jn(a,s,c,o),u=r.get(s);return void 0===u?{kind:"added",path:s,entry:d}:u.id!==d.id||u.mode!==d.mode?{kind:"modified",path:s,entry:d}:{kind:"unchanged",path:s,entry:d}},Yn=async a=>{try{const e=await t.readIndex(a),n=new Map;for(const t of e.entries)n.set(t.path,t);return n}catch(t){if(t instanceof e.TsgitError&&Fn.has(t.data.code))return new Map;throw t}},Zn=async(e,a,n)=>{const r=await e.fs.lstat(t.joinPath(e.layout.workDir,a)).catch(()=>{});return void 0===r?"missing":Jn(e,a,r,n)},Jn=async(a,n,r,i)=>{const o=await a.fs.lstat(t.joinPath(a.layout.workDir,n));if(o.isSymbolicLink!==r.isSymbolicLink||o.isDirectory!==r.isDirectory||o.isFile!==r.isFile)throw e.operationAborted();if(o.size>t.MAX_WORKING_TREE_BLOB_BYTES)throw e.workingTreeFileTooLarge(n,o.size,t.MAX_WORKING_TREE_BLOB_BYTES);const s=t.deriveWorkingMode(o),c=await er(a,n,o),d=await Qn(a,n,c,o.isSymbolicLink,i),u=await t.writeObject(a,{type:"blob",id:"",content:d});return Sn(o,s,u,n)},Qn=async(a,n,r,i,o)=>{if(void 0===o||void 0===a.command||i)return r;const s=await t.resolveFilterDriver(a,o,n);if("external"!==s.kind||void 0===s.clean)return r;const c=await t.runFilterDriver(a,a.command,s.clean,r);if(c.ok)return c.bytes;if(s.required)throw e.cleanFilterFailed(n,s.name,c.exitCode);return r},er=async(a,n,r)=>{if(r.isSymbolicLink){const r=(new TextEncoder).encode(await a.fs.readlink(t.joinPath(a.layout.workDir,n)));if(r.byteLength>t.MAX_WORKING_TREE_BLOB_BYTES)throw e.workingTreeFileTooLarge(n,r.byteLength,t.MAX_WORKING_TREE_BLOB_BYTES);return r}return(async(e,t)=>{const a=Dn(t);return e.fs.read(An(e,a))})(a,n)},tr=async(e,a,n)=>{let r=a;for(let a=0;a<5;a+=1){const a=await t.readObject(e,r);if(a.type===n)return r;if("tag"!==a.type){if("tree"===n&&"commit"===a.type)return a.data.tree;throw t.objectNotFound(r)}r=a.data.object}throw t.objectNotFound(r)},ar=async(t,a,n,r)=>{const i=await nr(t,a,n);if(void 0===i)throw e.pathNotInTree(r,n);return i},nr=async(e,a,n)=>{const r=n.split("/"),i=r.length-1;let o="string"==typeof a?await t.readTree(e,a):a;for(let a=0;a<i;a+=1){const n=rr(o,r[a]);if(void 0===n)return;const i=await t.readObject(e,n.id);if("tree"!==i.type)return;o=i}return rr(o,r[i])},rr=(e,t)=>e.entries.find(e=>e.name===t),ir=/^[0-9a-f]{40}$/,or=/^[0-9a-f]{4,39}$/,sr=/^[0-9a-f]{38}$/,cr=async(e,a)=>{const n=t.objectsDir(t.commonGitDir(e),a.slice(0,2));if(!await e.fs.exists(n))return[];const r=a.slice(2),i=[];for(const t of await e.fs.readdir(n))t.isFile&&sr.test(t.name)&&t.name.startsWith(r)&&i.push(a.slice(0,2)+t.name);return i},dr=async(e,a)=>{const n=await t.getPackRegistry(e).all(),r=[];for(const e of n)for(const n of t.findByPrefix(e.index,a))r.push(n);return r},ur=async(t,a)=>{if(ir.test(a))return a;if(!or.test(a))return;const[n,r]=await Promise.all([cr(t,a),dr(t,a)]),i=[...new Set([...n,...r])];if(0!==i.length){if(1===i.length)return i[0];throw e.ambiguousOidPrefix(a,i.slice(0,16))}},lr=new Set(["commit","tree","blob","tag"]),fr=/^:(\d):(.+)$/,hr=/^[0-9a-f]{1,3}$/,mr=t=>{throw e.revparseUnresolved(t)},wr=e=>{if(""===e&&mr(e),e.startsWith(":"))return gr(e);const t=pr(e);return-1!==t?{kind:"tree-path",rev:e.slice(0,t),path:e.slice(t+1)}:e.includes("@{")?br(e):yr(e)},pr=e=>{let t=!1;for(let a=0;a<e.length;a+=1)if(t||"@"!==e[a]||"{"!==e[a+1]){if(t&&"}"===e[a])t=!1;else if(!t&&":"===e[a])return a}else t=!0,a+=1;return-1},gr=e=>{const t=fr.exec(e);null===t&&mr(e);const a=t[2],n=Number(t[1]);return n>3&&mr(e),{kind:"index-stage",stage:n,path:a}},yr=e=>{const t=kr(e),a=-1===t?e:e.slice(0,t);return""===a&&mr(e),hr.test(a)&&-1===t&&mr(e),{kind:"ref-or-hex",base:a,operations:-1===t?[]:xr(e,t)}},vr=/^\d+$/,br=e=>{const t=e.indexOf("@{"),a=e.indexOf("}",t+2),n=e.slice(0,t),r=e.slice(t+2,a);return""===r&&mr(e),{kind:"ref-or-hex",base:n,reflog:vr.test(r)?{kind:"index",n:Number(r)}:{kind:"date",raw:r},operations:xr(e.slice(a+1),0)}},kr=e=>{for(let t=0;t<e.length;t+=1){const a=e[t];if("~"===a||"^"===a)return t}return-1},xr=(e,t)=>{const a=[];let n=t;for(;n<e.length;){const t=e[n];if("~"===t){const t=Ir(e,n);a.push(t.op),n=t.next}else if("^"===t){const t=Er(e,n);a.push(t.op),n=t.next}else mr(e)}return a},Ir=(e,t)=>{let a=t+1;for(;a<e.length&&Tr(e.charCodeAt(a));)a+=1;return a===t+1&&mr(e),{op:{kind:"ancestor",n:Number(e.slice(t+1,a))},next:a}},Er=(e,t)=>{if("{"===e[t+1]){const a=e.indexOf("}",t+2);-1===a&&mr(e);const n=e.slice(t+2,a);return lr.has(n)||mr(e),{op:{kind:"peel",target:n},next:a+1}}let a=t+1;for(;a<e.length&&Tr(e.charCodeAt(a));)a+=1;const n=e.slice(t+1,a);return{op:{kind:"parent",n:""===n?1:Number(n)},next:a}},Tr=e=>e>=48&&e<=57,$r=async(e,t)=>{await vn(e);const a=wr(t);return Or(e,a,t)},Or=async(e,t,a)=>{if("index-stage"===t.kind)return Hr(e,t);if("tree-path"===t.kind)return jr(e,t.rev,t.path);const n=Math.floor(Date.now()/1e3);let r=void 0!==t.reflog?await Sr(e,t.base,t.reflog,n,a):await Rr(e,t.base);for(const a of t.operations)r=await Lr(e,r,a);return r},Rr=async(e,a)=>{if(/^[0-9a-f]{40}$/.test(a))return t.ObjectId.from(a);for(const n of Pa(a))try{return await t.resolveRef(e,n)}catch{}const n=await ur(e,a);if(void 0!==n)return n;throw t.objectNotFound(a)},Sr=async(a,n,r,i,o)=>{const s=""===n?await Dr(a):await Ar(a,n),c=await t.readReflog(a,s);if(0===c.length)throw e.revparseUnresolved(o);return"index"===r.kind?Nr(c,r.n,s):Pr(c,r.raw,i,o)},Dr=async e=>{const a=await t.getRefStore(e).resolveDirect("HEAD");return"symbolic"===a.kind?a.target:"HEAD"},Ar=async(e,a)=>{const n=Cr(a),r=Pa(n);for(const a of r)if(await t.reflogExists(e,a))return a;for(const t of r)if(await Mr(e,t))return t;return n},Cr=a=>{try{return t.validateRefName(a)}catch{throw e.revparseUnresolved(a)}},Mr=async(e,a)=>{try{return await t.resolveRef(e,a),!0}catch{return!1}},Nr=(e,a,n)=>{const r=e[e.length-1-a];if(void 0===r)throw t.reflogEntryOutOfRange(n,a,e.length);return r.newId},Pr=(t,a,n,r)=>{const i=Ma(a,n);if(void 0===i)throw e.revparseUnresolved(r);for(let e=t.length-1;e>=0;e-=1){const a=t[e];if(a.identity.timestamp<=i)return a.newId}return t[0].oldId},Lr=async(e,t,a)=>{if("parent"===a.kind)return _r(e,t,a.n);if("ancestor"===a.kind){let n=t;for(let t=0;t<a.n;t+=1)n=await _r(e,n,1);return n}return tr(e,t,a.target)},_r=async(e,a,n)=>{const r=await t.readObject(e,a);if("commit"!==r.type)throw t.objectNotFound(a);const i=r.data.parents[n-1];if(void 0===i)throw t.objectNotFound(a);return i},Hr=async(e,a)=>{const n=await t.readIndex(e);for(const e of n.entries)if(e.path===a.path&&e.flags.stage===a.stage)return e.id;throw t.objectNotFound(`${a.stage}:${a.path}`)},jr=async(e,a,n)=>{const r=await Or(e,wr(a),a),i=await tr(e,r,"tree");if(""===n)return i;const o=await t.readTree(e,i);return(await ar(e,o,n,a)).id};async function*Ur(e,a){for await(const n of t.walkTree(e,a,{maxEntries:Number.MAX_SAFE_INTEGER,maxDepth:Number.MAX_SAFE_INTEGER})){const{path:a,id:r,mode:i}=n;if(i===t.FILE_MODE.DIRECTORY||i===t.FILE_MODE.GITLINK)yield{path:a,mode:i,oid:r};else{const n=await t.readBlob(e,r);yield{path:a,mode:i,oid:r,content:n.content}}}}const Br=(e,t)=>{const a=Wr(t),n=[],r=[];for(const t of e)Fr(t,a,n,r);return{passed:n,kept:r}},Wr=e=>{const t=new Map;for(const a of e.hunks){if("common"!==a.kind)continue;const e=a.theirsEnd-a.theirsStart;for(let n=0;n<e;n+=1)t.set(a.theirsStart+n,a.oursStart+n)}return t},Fr=(e,t,a,n)=>{const r=e.sourceStart+e.count;let i=e.sourceStart;for(;i<r;){const o=e.finalStart+(i-e.sourceStart),s=t.get(i);if(void 0===s){let e=i+1;for(;e<r&&!t.has(e);)e+=1;n.push({finalStart:o,count:e-i,sourceStart:i}),i=e}else{let e=i+1,n=s+1;for(;e<r&&t.get(e)===n;)e+=1,n+=1;a.push({finalStart:o,count:e-i,sourceStart:s}),i=e}}},zr=async(e,a)=>{if(/^[0-9a-f]{40}$/.test(a))return a;for(const n of Pa(a))try{return await t.resolveRef(e,n,{peel:!0})}catch{}const n=await ur(e,a);if(void 0!==n)return n;throw t.refNotFound(a)},qr=async(e,a)=>{const n=await t.readObject(e,a);if("commit"!==n.type)throw t.unexpectedObjectType("commit",n.type,a);return n.data},Gr=async(e,t)=>(await qr(e,t)).tree,Vr=async(t,a)=>{const n=await kn(t);if("symbolic"!==n.kind)throw e.unsupportedOperation(a,"cannot run with detached HEAD");return n.target},Kr=new TextEncoder,Xr="HEAD",Yr=async(a,n)=>{const r=t.joinPath(a.layout.workDir,n),i=await a.fs.lstat(r).catch(()=>{});if(void 0===i)throw e.worktreeFileAbsent(n);return i.isSymbolicLink?Kr.encode(await a.fs.readlink(r)):a.fs.read(r)},Zr=(e,a,n,r,i)=>{const o=t.splitLines(n);for(const t of r)for(const n of ni(t.count))e.finalized.push({committed:!1,...ai(t,n,o,a,i)})},Jr=(t,a)=>{if(void 0===a)return t;const{start:n,end:r}=a;if(!Number.isInteger(n)||!Number.isInteger(r))throw e.invalidOption("-L","line numbers must be integers");if(n<1)throw e.invalidOption("-L",`invalid line number: ${n}`);if(n>t.length)throw e.invalidOption("-L",`file has only ${t.length} lines`);if(r<n)throw e.invalidOption("-L",`range end ${r} precedes start ${n}`);const i=Math.min(r,t.length);return t.filter(e=>e.finalLine>=n&&e.finalLine<=i)},Qr=async(e,a)=>{const n=await qr(e.ctx,a.commit),r=t.splitLines(a.blob);let i,o=a.entries;for(const t of n.parents){const r=await ri(e.ctx,t,n.tree,a.path,a.blobId);if(void 0!==r&&(i??={commit:t,path:r.sourcePath},o=ei(e,a,t,r,o),0===o.length))break}ti(e,a,n,r,o,i)},ei=(e,a,n,r,i)=>{if("treesame"===r.kind)return oi(e,n,r.sourcePath,r.date,a.blob,a.blobId,i),[];const{passed:o,kept:s}=Br(i,t.diffLines(r.blob,a.blob));return oi(e,n,r.sourcePath,r.date,r.blob,r.blobId,o),s},ti=(e,t,a,n,r,i)=>{const o=0===a.parents.length,c=s(a.message);for(const s of r)for(const r of ni(s.count))e.finalized.push({committed:!0,commit:t.commit,author:a.author,committer:a.committer,summary:c,boundary:o,...ai(s,r,n,t.path,i)})},ai=(e,t,a,n,r)=>({finalLine:e.finalStart+t+1,sourceLine:e.sourceStart+t+1,sourcePath:n,...void 0!==r?{previous:r}:{},content:a[e.sourceStart+t]}),ni=e=>Array.from({length:e},(e,t)=>t),ri=async(e,a,n,r,i)=>{const o=await qr(e,a),s=o.committer.timestamp,c=await si(e,o.tree,r);if(void 0!==c)return c.id===i?{kind:"treesame",sourcePath:r,date:s}:{kind:"changed",blob:(await t.readBlob(e,c.id)).content,blobId:c.id,sourcePath:r,date:s};const d=await ii(e,o.tree,n,r);return void 0!==d?{kind:"changed",blob:(await t.readBlob(e,d.blobId)).content,blobId:d.blobId,sourcePath:d.sourcePath,date:s}:void 0},ii=async(e,a,n,r)=>{const i=await t.diffTrees(e,a,n,{recursive:!0,detectRenames:!0});for(const e of i.changes)if("rename"===e.type&&e.newPath===r)return{sourcePath:e.oldPath,blobId:e.oldId}},oi=(e,t,a,n,r,i,o)=>{0!==o.length&&e.queue.push({oid:t,date:n,value:{commit:t,path:a,blob:r,blobId:i,entries:o}})},si=async(e,a,n)=>{const r=await nr(e,a,n);if(void 0!==r&&r.mode!==t.FILE_MODE.DIRECTORY&&r.mode!==t.FILE_MODE.GITLINK)return r},ci=async(e,a,n)=>{const r=await si(e,a,n);if(void 0!==r)return{id:r.id,content:(await t.readBlob(e,r.id)).content}},di="refs/heads/",ui=new TextEncoder,li=async(e,a,n)=>{const r=t.validateRefName(a),i=t.validateRefName(n),o=t.looseRefPath(e.layout.gitDir,r),s=ui.encode(t.serializeSymbolicRef(i));await t.atomicWriteRef(e,r,o,s)},fi=async e=>{await vn(e);const a=`${e.layout.gitDir}/refs/heads`;if(!await e.fs.exists(a))return{branches:[]};const n=await kn(e),r=xn(n),i=r?.startsWith(di)?r:void 0,o=await e.fs.readdir(a),s=[];for(const a of o){if(!a.isFile)continue;const n=`${di}${a.name}`,r=await t.resolveRef(e,n);s.push({name:n,id:r,current:n===i})}return s.sort((e,t)=>hi(e.name,t.name)),{branches:s}},hi=(e,t)=>e<t?-1:e>t?1:0,mi=async(a,n)=>{await vn(a);const r=t.validateRefName(`${di}${n.name}`),i=n.startPoint??"HEAD",o=await gi(a,i),s=Ha(i);try{await t.updateRef(a,r,o,!0===n.force?{reflogMessage:s}:{expected:"absent",reflogMessage:s})}catch(t){if(t instanceof e.TsgitError&&"REF_UPDATE_CONFLICT"===t.data.code)throw e.branchExists(r);throw t}return{name:r,id:o}},wi=async(a,n)=>{await vn(a);const r=t.validateRefName(`${di}${n.name}`),i=await kn(a);if("symbolic"===i.kind&&i.target===r)throw e.cannotDeleteCheckedOutBranch(r);if(!await a.fs.exists(`${a.layout.gitDir}/${r}`))throw e.branchNotFound(r);return await t.updateRef(a,r,t.ZERO_OID,{delete:!0}),{name:r}},pi=async(a,n)=>{await vn(a);const r=t.validateRefName(`${di}${n.from}`),i=t.validateRefName(`${di}${n.to}`),o=await t.resolveRef(a,r),s=((e,t)=>`branch: renamed ${e} to ${t}`)(r,i),c=await t.readReflog(a,r);try{await t.updateRef(a,i,o,!0===n.force?{reflogMessage:s}:{expected:"absent",reflogMessage:s})}catch(t){if(t instanceof e.TsgitError&&"REF_UPDATE_CONFLICT"===t.data.code)throw e.branchExists(i);throw t}c.length>0&&await t.writeReflog(a,i,[...c,...await t.readReflog(a,i)]),await t.updateRef(a,r,t.ZERO_OID,{delete:!0});const d=await kn(a);return"symbolic"===d.kind&&d.target===r&&await li(a,"HEAD",i),{from:r,to:i}},gi=async(a,n)=>{if(/^[0-9a-f]{40}$/.test(n))return n;const r="HEAD"===n?["HEAD"]:[`${di}${n}`,n];for(const e of r)try{return await t.resolveRef(a,e)}catch{}throw e.branchNotFound(n)},yi="# v2 git bundle",vi="# v3 git bundle",bi=/^[0-9a-f]{40}$/,ki=e=>bi.test(e),xi=(a,n)=>{const r=a.slice(1),i=r.indexOf(" "),o=-1===i?r:r.slice(0,i),s=-1===i?"":r.slice(i+1);if(!ki(o))throw e.bundleBadHeader(n,"malformed-header");return{oid:t.ObjectId.from(o),comment:s}},Ii=(a,n)=>{const r=a.indexOf(" ");if(-1===r)throw e.bundleBadHeader(n,"malformed-header");const i=a.slice(0,r),o=a.slice(r+1);if(!ki(i))throw e.bundleBadHeader(n,"malformed-header");return{oid:t.ObjectId.from(i),name:t.RefName.from(o)}},Ei=(t,a)=>{const n=(e=>{for(let t=0;t<e.length-1;t++)if(10===e[t]&&10===e[t+1])return t+2;return-1})(t);if(-1===n)return((t,a)=>{const n=t.subarray(0,Math.min(t.length,64)),r=(new TextDecoder).decode(n);if(r.split("\n")[0]===vi)throw e.bundleUnsupportedVersion(a,3);if(!r.startsWith(yi)&&!r.startsWith(vi))throw e.bundleBadHeader(a,"not-a-bundle");throw e.bundleBadHeader(a,"malformed-header")})(t,a);const{version:r,hashAlgorithm:i,prerequisites:o,refs:s}=((t,a,n)=>{const r=(new TextDecoder).decode(t.subarray(0,a)).split("\n").filter(e=>e.length>0),[i,...o]=r;if(void 0===i)throw e.bundleBadHeader(n,"not-a-bundle");const{version:s,hashAlgorithm:c}=((t,a)=>{if(t===vi)throw e.bundleUnsupportedVersion(a,3);if(t!==yi)throw e.bundleBadHeader(a,"not-a-bundle");return{version:2,hashAlgorithm:"sha1"}})(i,n),d=[],u=[];for(const t of o)if(t.startsWith("-"))d.push(xi(t,n));else{if(t.startsWith("@"))throw e.bundleBadHeader(n,"malformed-header");u.push(Ii(t,n))}return{version:s,hashAlgorithm:c,prerequisites:d,refs:u}})(t,n,a);return{version:r,hashAlgorithm:i,prerequisites:o,refs:s,packOffset:n}},Ti=e=>`-${e.oid} ${e.comment}\n`,$i=e=>`${e.oid} ${e.name}\n`,Oi=async(a,n,r,i,o=0)=>{if(i.has(n))return;if(i.add(n),o>1024)throw t.treeDepthExceeded(o);if(a.signal?.aborted)throw e.operationAborted();r.add(n);const s=await t.readObject(a,n);if("tree"===s.type)for(const e of s.entries)t.isGitlink(e.mode)||(t.isDirectory(e.mode)?await Oi(a,e.id,r,i,o+1):r.add(e.id))},Ri=async(a,n,r,i,o,s=0)=>{if(o.has(n))return;if(o.add(n),s>1024)throw t.treeDepthExceeded(s);if(a.signal?.aborted)throw e.operationAborted();r.has(n)||t.tryEmit(i,n);const c=await t.readObject(a,n);if("tree"===c.type)for(const e of c.entries)t.isGitlink(e.mode)||(t.isDirectory(e.mode)?await Ri(a,e.id,r,i,o,s+1):r.has(e.id)||t.tryEmit(i,e.id))},Si=["refs/","refs/tags/","refs/heads/","refs/remotes/"],Di=(e,t)=>{const a=t;if(a.includes(e))return e;for(const t of Si){const n=`${t}${e}`;if(a.includes(n))return n}},Ai=async(e,a,n)=>{const r=await t.resolveRef(e,a);n.refs.push({name:a,oid:r}),n.wants.push(r)},Ci=(e,t)=>t.filter(t=>t.startsWith(e)).sort(),Mi=async(e,t,a,n)=>{const r=await $r(e,t),i=Di(t,a);void 0!==i&&n.refs.push({name:i,oid:r}),n.wants.push(r)},Ni=async(e,t,a)=>{const n=await $r(e,t);a.haves.push(await tr(e,n,"commit"))},Pi=async(e,t,a,n)=>{const[r,i]=t,o=await $r(e,r);n.haves.push(await tr(e,o,"commit"));const s=await $r(e,i),c=Di(i,a);void 0!==c&&n.refs.push({name:c,oid:s}),n.wants.push(s)},Li=async(e,a,n,r)=>{const[i,o]=a,s=await $r(e,i),c=Di(i,n);void 0!==c&&r.refs.push({name:c,oid:s}),r.wants.push(s);const d=await $r(e,o),u=Di(o,n);void 0!==u&&r.refs.push({name:u,oid:d}),r.wants.push(d);const l=await t.mergeBase(e,[await tr(e,s,"commit"),await tr(e,d,"commit")],{all:!0});r.haves.push(...l)},_i=async(a,n)=>{await gn(a);const r=await t.enumerateRefs(a),i={refs:[],wants:[],haves:[]};await(async(e,t,a,n)=>{if(!0===t.branches)for(const t of Ci("refs/heads/",a))await Ai(e,t,n);if(!0===t.tags)for(const t of Ci("refs/tags/",a))await Ai(e,t,n);if(!0===t.all){for(const t of Ci("refs/",a))await Ai(e,t,n);await Ai(e,"HEAD",n)}})(a,n,r,i),await(async(e,t,a,n)=>{for(const r of t)"tip"in r?await Mi(e,r.tip,a,n):"exclude"in r?await Ni(e,r.exclude,n):"range"in r?await Pi(e,r.range,a,n):await Li(e,r.symmetricRange,a,n)})(a,n.revs??[],r,i);const o=(e=>{const t=new Set;return e.filter(e=>!t.has(e.name)&&(t.add(e.name),!0))})(i.refs);if(i.refs.splice(0,i.refs.length,...o),0===i.refs.length)throw e.bundleEmpty("no-refs");const s=await(async(e,a)=>{if(0===a.wants.length)return{objects:[],boundary:[]};const n={emitted:new Set,boundary:new Set,cap:a.maxObjects??t.MAX_PUSH_OBJECTS},r=new Set,i=await(async(e,a,n)=>{const r=new Set,i=new Set;if(0===a.length)return{commits:r,objects:i};for await(const o of t.walkCommits(e,{from:a,ignoreMissing:!0}))r.add(o.id),i.add(o.id),await Oi(e,o.data.tree,i,n);return{commits:r,objects:i}})(e,a.haves,r),o=[];for(const r of a.wants)o.push(await t.resolveTagChain(e,r,e=>{t.tryEmit(n,e)}));return await(async(e,a,n,r,i)=>{for await(const o of t.walkCommits(e,{from:a,until:[...n.commits],ignoreMissing:!0})){t.tryEmit(r,o.id),await Ri(e,o.data.tree,n.objects,r,i);for(const e of o.data.parents)n.commits.has(e)&&r.boundary.add(e)}})(e,o,i,n,r),{objects:[...n.emitted],boundary:[...n.boundary]}})(a,{wants:i.wants,haves:i.haves});if(0===s.objects.length)throw e.bundleEmpty("no-objects");const d=await(async(a,n)=>Promise.all([...n].sort().map(async n=>{const r=((t,a)=>{if("commit"!==t.type)throw e.bundlePrerequisiteNotCommit(a,t.type);return t})(await t.readObject(a,n),n);return{oid:n,comment:c(r.data.message)}})))(a,s.boundary),u=await t.buildPack(a,{oids:s.objects}),l=(e=>{const t=(a=e.prerequisites,[...a].sort((e,t)=>e.oid.localeCompare(t.oid)));var a;const n=["# v2 git bundle\n"];for(const e of t)n.push(Ti(e));for(const t of e.refs)n.push($i(t));return n.push("\n"),(new TextEncoder).encode(n.join(""))})({prerequisites:d,refs:i.refs});return{version:2,bytes:((e,t)=>{const a=new Uint8Array(e.length+t.length);return a.set(e,0),a.set(t,e.length),a})(l,u.bytes),refs:i.refs,prerequisites:d,objectCount:u.objectCount,packSha:u.sha}},Hi=async(e,t)=>{const a=await ji(e,t),n=Ei(a,t);return{header:n,packBytes:a.subarray(n.packOffset)}},ji=async(t,a)=>{try{return await t.fs.read(a)}catch(n){if(!(n instanceof e.TsgitError))throw n;if("FILE_NOT_FOUND"===n.data.code||"PERMISSION_DENIED"===n.data.code)throw await Ui(t,a);throw n}},Ui=async(t,a)=>{try{if((await t.fs.stat(a)).isDirectory)return e.bundleBadHeader(a,"not-a-bundle")}catch{}return e.bundleReadFailed(a)},Bi=async(e,t)=>{const{header:a}=await Hi(e,t.path),n=Wi(a.refs,t.names);return{version:a.version,refs:n}},Wi=(e,t)=>{if(void 0===t)return e;const a=new Set(t);return e.filter(e=>a.has(e.name))},Fi=async(e,a)=>{const{header:n,packBytes:r}=await Hi(e,a.path),i=await Gi(e,n.prerequisites);if(i.length>0)return zi(n,i);await t.verifyPackTrailer(r,e);const o=n.prerequisites.length>0?qi(e):void 0;return await t.walkPackEntries(e,r,o),zi(n,[])},zi=(e,t)=>({version:e.version,hashAlgorithm:e.hashAlgorithm,refs:e.refs,prerequisites:e.prerequisites,missingPrerequisites:t,prerequisitesPresent:0===t.length,recordsCompleteHistory:0===e.prerequisites.length}),qi=a=>{const n=new Map;return async r=>{if(n.has(r))return n.get(r);const i=await(async(a,n)=>{try{const e=await t.readObject(a,n),r=t.serializeObject(e,a.hashConfig),{contentOffset:i}=t.parseHeader(r);return{type:e.type,content:r.subarray(i)}}catch(t){if(t instanceof e.TsgitError&&"OBJECT_NOT_FOUND"===t.data.code)return;throw t}})(a,r);return n.set(r,i),i}},Gi=async(e,t)=>{const a=[];for(const n of t)await Vi(e,n.oid)&&a.push(n.oid);return a},Vi=async(a,n)=>{try{return await t.readObject(a,n),!1}catch(t){if(t instanceof e.TsgitError&&"OBJECT_NOT_FOUND"===t.data.code)return!0;throw t}},Ki=e=>"string"==typeof e?t.ObjectId.from(e):e,Xi="checkout:materialize",Yi=async(e,a)=>{if("HEAD"===a){const a=await t.resolveRef(e,"HEAD");return(await t.readTree(e,a)).id}return(await t.readTree(e,a)).id},Zi=async(a,n)=>{await vn(a),await bn(a,"checkout"),await En(a);const r=(e=>"rev"in e&&void 0!==e.rev)(n),i=(e=>"paths"in e&&void 0!==e.paths)(n);if(r&&i)throw e.invalidOption("paths","cannot be combined with rev");if(!r&&!i)throw e.invalidOption("rev","either rev or paths must be provided");a.progress.start(Xi);try{return i?await(async(a,n)=>{if(0===n.paths.length)throw e.invalidOption("paths","must not be empty");const r=n.source??"index",{matcher:i,literalMustMatch:o}=Ln(n.paths),s=(await(async(e,a)=>{if("index"===a)return(await t.readIndex(e)).entries.map(e=>e.path);const n=await Yi(e,a),r=[];for await(const a of t.walkTree(e,n))a.mode!==t.FILE_MODE.DIRECTORY&&r.push(a.path);return r})(a,r)).filter(e=>V(i,e));jn(o,s);const c=new Set(s);if(0===c.size)return{branch:void 0,id:await t.resolveRef(a,"HEAD"),detached:!1,changedPaths:0};const d="index"===r?await(async(e,a)=>{const n=await t.readIndex(e),r=await t.synthesizeTreeFromIndex(e,n.entries);return t.materializeTree(e,{targetTree:r,currentIndex:n,force:!0,forceRewriteAll:!0,paths:a})})(a,c):await(async(e,a,n)=>{const r=await t.acquireIndexLock(e);try{const i=await t.readIndex(e),o=await t.materializeTree(e,{targetTree:a,currentIndex:i,force:!0,forceRewriteAll:!0,paths:n});return await r.commit(o.newIndexEntries),o}finally{await r.release()}})(a,await Yi(a,r),c),u=await t.resolveRef(a,"HEAD");return await t.runInformationalHook(a,"post-checkout",{args:[u,u,"0"]}),{branch:void 0,id:u,detached:!1,changedPaths:d.written+d.deleted}})(a,n):await(async(a,n)=>{const r=!0===n.detach||/^[0-9a-f]{40}$/.test(n.rev),i=await kn(a),o=await t.resolveRef(a,"HEAD");let s,c;if(r)c=await(async(e,a)=>/^[0-9a-f]{40}$/.test(a)?a:t.resolveRef(e,a))(a,n.rev);else{if(s=t.validateRefName(`${di}${n.rev}`),!await a.fs.exists(`${a.layout.gitDir}/${s}`))throw e.branchNotFound(s);c=await t.resolveRef(a,s)}const d=await t.readTree(a,c),u=await t.loadSparseMatcher(a),l=await t.acquireIndexLock(a);let f;try{const e=await t.readIndex(a);f=await t.materializeTree(a,{targetTree:d.id,currentIndex:e,force:n.force??!1,...void 0!==u?{sparse:u}:{}}),await l.commit(f.newIndexEntries)}finally{await l.release()}const h=(e=>{if("symbolic"!==e.kind)return e.id.slice(0,7);if(e.target.startsWith(di))return e.target.slice(11);const t=e.target.lastIndexOf("/");return-1===t?e.target:e.target.slice(t+1)})(i);return r?(await a.fs.writeUtf8(`${a.layout.gitDir}/HEAD`,`${c}\n`),await t.recordRefUpdate(a,"HEAD",o,c,`checkout: moving from ${h} to ${c.slice(0,7)}`)):(await li(a,"HEAD",s),await t.recordRefUpdate(a,"HEAD",o,c,`checkout: moving from ${h} to ${n.rev}`)),await t.runInformationalHook(a,"post-checkout",{args:[o,c,"1"]}),{branch:r?void 0:s,id:c,detached:r,changedPaths:f.written+f.deleted}})(a,n)}finally{a.progress.end(Xi)}},Ji={kind:"text"},Qi={kind:"union"},eo={kind:"binary"},to=(e,a)=>!1===a?Promise.resolve(eo):!0===a||"unspecified"===a?Promise.resolve(Ji):(async(e,a)=>{const n=(await t.readConfig(e)).merge?.get(a);return void 0!==n?.driver?void 0===n.name?{kind:"external",command:n.driver}:{kind:"external",command:n.driver,name:n.name}:void 0===n||void 0===n.name&&void 0===n.recursive?"binary"===a?eo:"union"===a?Qi:Ji:{kind:"missing-command",name:a}})(e,a.set),ao=new Uint8Array(0),no=(a,n=ce)=>{let r,i;return async o=>{await(i??=t.findFirstValuelessInSection(a,"merge",["driver","name","recursive"],{requireSubsection:!0}).then(t=>{if(void 0!==t)throw e.configMissingValue(t.key,t.source,t.line)}));const[s,c,d]=await Promise.all([t.readBlob(a,o.ourId,{maxBytes:Y}),t.readBlob(a,o.theirId,{maxBytes:Y}),void 0!==o.baseId?t.readBlob(a,o.baseId,{maxBytes:Y}):Promise.resolve(void 0)]),{driver:u,markerSize:l}=await(async(e,a,n)=>{const{sources:r,macros:i}=await a.sourcesForPath(n);return{driver:await to(e,t.resolveAttribute(r,n,"merge",i)),markerSize:Tn(t.resolveAttribute(r,n,"conflict-marker-size",i))}})(a,await(r??=t.buildAttributeProvider(a)),o.path);if("missing-command"===u.kind)throw e.mergeDriverMissingCommand(u.name);return"binary"===u.kind?{status:"conflict",conflictType:"binary",markedBytes:s.content}:"external"===u.kind&&void 0!==a.command?(async(e,t,a)=>{const{gitDir:n,workDir:r}=e.layout,i=`${n}/MERGE_DRIVER_O`,o=`${n}/MERGE_DRIVER_A`,s=`${n}/MERGE_DRIVER_B`;await Promise.all([e.fs.write(i,a.base??ao),e.fs.write(o,a.ours),e.fs.write(s,a.theirs)]);try{const c=((e,t)=>{let a="",n=0;for(;n<e.length;){const r=e[n];if("%"!==r){a+=r,n+=1;continue}const i=e[n+1];void 0!==i?(a+=$n(i,t),n+=2):(a+="%",n+=1)}return a})(a.command,{O:i,A:o,B:s,L:String(a.markerSize),P:a.path,S:a.labels.base,X:a.labels.ours,Y:a.labels.theirs}),{exitCode:d}=await t.run({command:c,cwd:r,env:{GIT_DIR:n},...void 0!==e.signal?{signal:e.signal}:{}}),u=await e.fs.read(o);return 0===d?{status:"clean",bytes:u}:{status:"conflict",conflictType:"content",markedBytes:u}}finally{await Promise.all([e.fs.rm(i),e.fs.rm(o),e.fs.rm(s)])}})(a,a.command,{command:u.command,base:d?.content,ours:s.content,theirs:c.content,path:o.path,markerSize:l,labels:n}):function(e,a,n,r={}){return t.isBinary(a)||t.isBinary(n)||void 0!==e&&t.isBinary(e)?{status:"conflict",conflictType:"binary",markedBytes:a}:void 0===e?t.bytesEqual(a,n)?{status:"clean",bytes:a}:ge(new Uint8Array(0),a,n,r):t.bytesEqual(a,e)?{status:"clean",bytes:n}:t.bytesEqual(n,e)||t.bytesEqual(a,n)?{status:"clean",bytes:a}:ge(e,a,n,r)}(d?.content,s.content,c.content,{favor:"union"===u.kind?"union":"none",markerSize:l,labels:{ours:n.ours,theirs:n.theirs}})}},ro=(e,t)=>{if("unchanged"===e.status)return!1;if("resolved-known"===e.status){const a=t.get(e.path);return void 0===a||a.id!==e.id||a.mode!==e.mode}return"resolved-merged"===e.status||"resolved-deleted"===e.status&&t.has(e.path)},io=(e,t,a)=>{const n=new Set;for(const t of e)"conflict"!==t.status&&ro(t,a)&&n.add(t.path);for(const e of t)for(const t of m(e))n.add(t);return n},oo=async(e,a)=>{try{return await e.fs.lstat(t.joinPath(e.layout.workDir,a)),!0}catch{return!1}},so=async(e,a,n)=>{const r=(e=>{const t=new Map;for(const a of e.entries)0===a.flags.stage&&t.set(a.path,a);return t})(n),i=await t.maybeBuildAttributeProvider(e),o=[],s=[];for(const n of a){const a=r.get(n);void 0!==a?t.isWorkingTreeModified(await t.compareWorkingTreeEntry(e,a,i))&&o.push(n):await oo(e,n)&&s.push(n)}return{localChanges:[...o].sort(t.comparePaths),untracked:[...s].sort(t.comparePaths)}},co=e=>({ctimeSeconds:0,ctimeNanoseconds:0,mtimeSeconds:0,mtimeNanoseconds:0,dev:0,ino:0,mode:e,uid:0,gid:0,fileSize:0}),uo=(e,a,n)=>({...co(n),id:a,flags:t.STAGE0_FLAGS,path:e}),lo=async(e,a)=>{const{ourPath:n,theirPath:r,ourId:i,ourMode:o,theirId:s,theirMode:c}=a;if(void 0!==n&&void 0!==i&&void 0!==o){const a=await t.readBlob(e,i,{maxBytes:Y});await t.writeWorkingTreeEntry(e,n,a.content,o)}if(void 0!==r&&void 0!==s&&void 0!==c){const a=await t.readBlob(e,s,{maxBytes:Y});await t.writeWorkingTreeEntry(e,r,a.content,c)}},fo=new Set(["rename-rename","gitlink"]),ho=async(e,a)=>{const n=[];for(const r of a)if("resolved-deleted"!==r.status&&"conflict"!==r.status){if("resolved-merged"===r.status){const a=await t.writeObject(e,{type:"blob",content:r.bytes,id:""});n.push(uo(r.path,a,r.mode));continue}n.push(uo(r.path,r.id,r.mode))}return t.synthesizeTreeFromIndex(e,n)},mo=async(e,a)=>{const n=a.mergedMode??a.ourMode??a.theirMode;if(void 0===n)return;const r=await(async(e,a)=>{if(void 0!==a.conflictContent)return a.conflictContent;if("modify-delete"===a.type){const n=a.ourId??a.theirId;return void 0!==n?(await t.readBlob(e,n,{maxBytes:Y})).content:void 0}return void 0!==a.ourId?(await t.readBlob(e,a.ourId,{maxBytes:Y})).content:void 0})(e,a);void 0!==r&&await t.writeWorkingTreeEntry(e,a.path,r,n)},wo=(e,t)=>{const a=[];for(const t of e)"unchanged"!==t.status&&"resolved-known"!==t.status||a.push(uo(t.path,t.id,t.mode));const n=[...a,...g(t,co)];return n.sort((e,t)=>e.path<t.path?-1:e.path>t.path?1:e.flags.stage-t.flags.stage),n},po=async(a,n)=>{const[r,i,o]=await Promise.all([void 0!==n.baseTree?t.flattenTree(a,n.baseTree):Promise.resolve(void 0),t.flattenTree(a,n.oursTree),t.flattenTree(a,n.theirsTree)]),s=await Ce(r,i,o,no(a,n.labels),n.labels);s.cleanMerge||(t=>{for(const a of t)if(fo.has(a.type))throw e.unsupportedOperation("apply-merge",`conflict type '${a.type}' not supported (path=${a.path})`)})(s.conflicts);const c=io(s.outcomes,s.conflicts,i.entries),d=await so(a,c,n.currentIndex);if(d.localChanges.length>0||d.untracked.length>0)return{kind:"would-overwrite",localChanges:d.localChanges,untracked:d.untracked};if(s.cleanMerge){const e=await ho(a,s.outcomes);return{kind:"clean",mergedTree:e,result:await t.materializeTree(a,{targetTree:e,currentIndex:n.currentIndex,force:!0})}}return await(async(e,a,n,r)=>{for(const n of a)if("conflict"!==n.status&&r.has(n.path))if("resolved-deleted"!==n.status)if("resolved-merged"!==n.status){if("resolved-known"===n.status){const a=await t.streamBlob(e,n.id);await t.writeWorkingTreeFileStream(e,n.path,a)}}else await t.writeWorkingTreeFile(e,n.path,n.bytes);else await t.removeWorkingTreeFile(e,n.path);for(const t of n)"distinct-types"!==t.type?await mo(e,t):await lo(e,t)})(a,s.outcomes,s.conflicts,c),{kind:"conflict",conflicts:s.conflicts,indexEntries:wo(s.outcomes,s.conflicts)}},go=/^(pick|revert) (\S+) (.*)$/,yo=async(e,a)=>{if(!await e.fs.exists(a))return;const n=(await e.fs.readUtf8(a)).trim();return 0!==n.length?t.ObjectId.from(n):void 0},vo=e=>`${e.layout.gitDir}/sequencer`,bo=e=>`${vo(e)}/head`,ko=e=>`${vo(e)}/todo`,xo=e=>`${vo(e)}/opts`,Io=(e,t)=>e.fs.writeUtf8(bo(e),`${t}\n`),Eo=e=>yo(e,bo(e)),To=(e,t)=>e.fs.writeUtf8((e=>`${vo(e)}/abort-safety`)(e),`${t}\n`),$o=(e,t)=>e.fs.writeUtf8(ko(e),(e=>e.map(e=>`${e.command} ${e.oid} ${e.subject}\n`).join(""))(t)),Oo=async t=>{const a=ko(t);if(!await t.fs.exists(a))return;const n=(t=>{const a=[];for(const n of t.split("\n")){if(""===n||n.startsWith("#"))continue;const t=go.exec(n);if(null===t)throw e.invalidSequencerTodo(n);a.push({command:t[1],oid:t[2],subject:t[3]})}return a})(await t.fs.readUtf8(a)),r=[];for(const a of n){const n=await ur(t,a.oid);if(void 0===n)throw e.invalidSequencerTodo(`cannot resolve commit ${a.oid}`);r.push({command:a.command,oid:n,subject:a.subject})}return r},Ro=async(e,t)=>{(t.noCommit||t.recordOrigin||t.allowEmpty)&&await e.fs.writeUtf8(xo(e),(e=>{let t="[options]\n";return e.noCommit&&(t+="\tno-commit = true\n"),e.recordOrigin&&(t+="\trecord-origin = true\n"),e.allowEmpty&&(t+="\tallow-empty = true\n"),t})(t))},So=(e,t)=>e.some(e=>"options"===e.section.toLowerCase()&&e.entries.some(e=>e.key.toLowerCase()===t&&null!==e.value&&"true"===e.value.toLowerCase())),Do=async e=>{const t=vo(e);await e.fs.exists(t)&&await e.fs.rmRecursive(t)},Ao=async(e,a)=>{await On(e,a.target),await t.updateRef(e,a.branch,a.target,{reflogMessage:ja(a.target)}),await a.clearHead(e),await wn(e),await Do(e)},Co=e=>`${e.layout.gitDir}/CHERRY_PICK_HEAD`,Mo=e=>yo(e,Co(e)),No=async e=>{const t=Co(e);await e.fs.exists(t)&&await e.fs.rm(t)},Po=(e,t)=>`${e.replace(/\s+$/,"")}\n\n# Conflicts:\n${t.map(e=>`#\t${e}\n`).join("")}`,Lo=async(e,a,n)=>{const r=await t.flattenTree(e,n),i=new Set(a.map(e=>e.path)),o=[];for(const e of a){const t=r.entries.get(e.path);void 0!==t&&t.id===e.id&&t.mode===e.mode||o.push(e.path)}for(const e of r.entries.keys())i.has(e)||o.push(e);return o},_o=async(e,a)=>{const n=await t.maybeBuildAttributeProvider(e),r=[];for(const i of a)i.flags.skipWorktree||"unchanged"!==await t.compareWorkingTreeEntry(e,i,n)&&r.push(i.path);return r},Ho=async(a,n)=>{const{stage0:r,unmerged:i}=(e=>{const t=[],a=[];for(const n of e)0===n.flags.stage?t.push(n):a.push(n.path);return{stage0:t,unmerged:a}})((await t.readIndex(a)).entries),o=new Set([...i,...await Lo(a,r,n),...await _o(a,r)]);if(o.size>0)throw e.workingTreeDirty({localChanges:[...o].sort(t.comparePaths),untracked:[]})},jo=t=>{if(void 0!==t.explicit)return t.explicit;if(void 0!==t.configUser)return t.configUser;throw e.authorUnconfigured()},Uo=t=>{if(void 0!==t.explicit)return t.explicit;if(void 0!==t.author)return t.author;if(void 0!==t.configUser)return t.configUser;throw e.authorUnconfigured()},Bo=(t,a)=>{const n=d(t);if(""===n&&!a.allowEmpty)throw e.emptyCommitMessage();return n},Wo=e=>e.split("\n").filter(e=>!e.startsWith("#")).join("\n"),Fo=async e=>{const a=(await t.readConfig(e)).user;await t.assertNoValuelessConfig(e,"user",void 0,["name","email"]);const n=void 0!==a?.name&&void 0!==a?.email?{name:a.name,email:a.email,timestamp:Math.floor(Date.now()/1e3),timezoneOffset:"+0000"}:void 0;return Uo({configUser:n})},zo=e=>e.parents.length>=2,qo=e=>e.map(e=>({path:e.path,type:e.type})),Go=/^(.+)\.\.(.+)$/,Vo=async(e,a,n)=>{const r=new Set;for await(const n of t.walkCommits(e,{from:[a]}))r.add(n.id);const i=[];for await(const a of t.walkCommits(e,{from:[n],until:[...r]}))i.push(a.id);return i.reverse()},Ko=async(e,t,a,n,r)=>{await Io(e,t.sequenceHead),await $o(e,await(async(e,t)=>{const a=[];for(const n of t){const t=await qr(e,n);a.push({command:"pick",oid:n,subject:s(t.message)})}return a})(e,a)),await To(e,n),await Ro(e,{recordOrigin:r.recordOrigin,allowEmpty:r.allowEmpty,noCommit:!1})},Xo=async(t,a,n,r,i,o)=>{let s=r;const c=[];for(let r=0;r<a.length;r+=1){const d=a[r],u=await qr(t,d);if(zo(u))throw o.multiPick&&await Ko(t,o,a.slice(r),s,i),e.cherryPickMergeNoMainline(d);const l=await Zo(t,d,u,n,s,i);if("committed"===l.kind){c.push({source:d,created:l.id}),s=l.id;continue}await Jo(t,d,u,"conflict"===l.kind?l.conflicts:void 0,i),o.multiPick&&await Ko(t,o,a.slice(r),s,i);const f=a.length-(r+1);return"conflict"===l.kind?{kind:"conflict",commit:d,conflicts:qo(l.conflicts),remaining:f}:{kind:"empty",commit:d,remaining:f}}return await Do(t),{kind:"picked",commits:c}},Yo=(e,t,a)=>a?((e,t)=>`${e.replace(/\s+$/,"")}\n\n(cherry picked from commit ${t})`)(e,t):e,Zo=async(a,n,r,i,o,c)=>{const d=r.parents[0],u=void 0!==d?await Gr(a,d):void 0,l=await Gr(a,o),f=await t.acquireIndexLock(a);try{const d=await t.readIndex(a),m=await po(a,{baseTree:u,oursTree:l,theirsTree:r.tree,currentIndex:d,labels:ie(n,s(r.message))});if("would-overwrite"===m.kind)throw e.workingTreeDirty({localChanges:m.localChanges,untracked:m.untracked});if("conflict"===m.kind)return await f.commit(m.indexEntries),{kind:"conflict",conflicts:m.conflicts};if(m.mergedTree===l&&!c.allowEmpty)return{kind:"empty"};await f.commit(m.result.newIndexEntries);const w=await(async(e,a,n,r,i,o)=>{const s=await Fo(e);return t.createCommit(e,{tree:i,parents:[r],author:n.author,committer:s,message:Bo(Yo(n.message,a,o.recordOrigin),{allowEmpty:!1}),extraHeaders:[]})})(a,n,r,o,m.mergedTree,c);return await t.updateRef(a,i,w,{expected:o,reflogMessage:(h=s(r.message),`cherry-pick: ${h}`)}),{kind:"committed",id:w}}finally{await f.release()}var h},Jo=async(e,t,a,n,r)=>{await(async(e,t)=>{await e.fs.writeUtf8(Co(e),`${t}\n`)})(e,t);const i=Yo(a.message,t,r.recordOrigin),o=void 0!==n&&n.length>0?Po(i,w(n)):i;await un(e,o)},Qo=async(a,n)=>{await vn(a),await bn(a,Za),await En(a);const r=await kn(a);if("symbolic"!==r.kind)throw e.unsupportedOperation(Za,"cannot cherry-pick with detached HEAD");const i=await(async(a,n)=>{try{return await t.resolveRef(a,n)}catch(t){if(t instanceof e.TsgitError&&"REF_NOT_FOUND"===t.data.code)throw e.noInitialCommit();throw t}})(a,r.target),o=await(async(t,a)=>{const n=[];for(const r of a){if(r.includes("...")||r.includes("^"))throw e.invalidOption("commits",`unsupported revision form '${r}' (use a commit-ish or A..B)`);const a=Go.exec(r);if(null===a){n.push(await zr(t,r));continue}const i=await $r(t,a[1]),o=await $r(t,a[2]);n.push(...await Vo(t,i,o))}return n})(a,n.commits);return await Ho(a,await Gr(a,i)),!0===n.noCommit?(async(a,n)=>{const r=await t.acquireIndexLock(a);try{let i=await t.readIndex(a);for(let o=0;o<n.length;o+=1){const c=n[o],d=await qr(a,c);if(zo(d))throw e.cherryPickMergeNoMainline(c);const u=d.parents[0],l=void 0!==u?await Gr(a,u):void 0,f=await t.synthesizeTreeFromIndex(a,i.entries),h=await po(a,{baseTree:l,oursTree:f,theirsTree:d.tree,currentIndex:i,labels:ie(c,s(d.message))});if("would-overwrite"===h.kind)throw e.workingTreeDirty({localChanges:h.localChanges,untracked:h.untracked});if("conflict"===h.kind)return await r.commit(h.indexEntries),{kind:"conflict",commit:c,conflicts:qo(h.conflicts),remaining:n.length-(o+1)};i={...i,entries:h.result.newIndexEntries}}return await r.commit(i.entries),{kind:"no-commit",sources:n}}finally{await r.release()}})(a,o):Xo(a,o,r.target,i,{recordOrigin:n.recordOrigin??!1,allowEmpty:n.allowEmpty??!1},{multiPick:o.length>1,sequenceHead:i})},es=async(e,a)=>{if(void 0!==await Eo(e)){const a=await(async e=>{const a=xo(e);if(!await e.fs.exists(a))return{recordOrigin:!1,allowEmpty:!1,noCommit:!1};const n=t.parseIniSections(await e.fs.readUtf8(a),a);return{noCommit:So(n,"no-commit"),recordOrigin:So(n,"record-origin"),allowEmpty:So(n,"allow-empty")}})(e);return{recordOrigin:a.recordOrigin,allowEmpty:a.allowEmpty}}return{recordOrigin:!1,allowEmpty:a.allowEmpty??!1}},ts=async(a,n={})=>{await vn(a),await bn(a,en);const r=await Mo(a),i=await Oo(a);if(void 0===r&&(void 0===i||0===i.length))throw e.noOperationInProgress(Za);const o=await kn(a);if("symbolic"!==o.kind)throw e.unsupportedOperation(en,"cannot continue with detached HEAD");const c=await es(a,n);let d=await t.resolveRef(a,o.target);const u=[];if(void 0!==r){const n=void 0!==i?i.length-1:0,l=await(async(a,n,r,i,o)=>{const c=await t.readIndex(a);(t=>{const a=new Set;for(const e of t)0!==e.flags.stage&&a.add(e.path);if(a.size>0)throw e.mergeHasConflicts(a.size,[...a])})(c.entries);const d=await t.synthesizeTreeFromIndex(a,c.entries);if(d===await Gr(a,i)&&!o.allowEmpty)return{empty:!0};const u=await(async(e,a,n,r,i)=>{const o=await qr(e,a),c=await Fo(e),d=Bo(Wo(await hn(e)??""),{allowEmpty:!1}),u=await t.createCommit(e,{tree:i,parents:[n],author:o.author,committer:c,message:d,extraHeaders:[]});return await t.updateRef(e,r,u,{expected:n,reflogMessage:La(s(d))}),u})(a,n,i,r,d);return await No(a),await wn(a),{created:u}})(a,r,o.target,d,c);if("empty"in l)return{kind:"empty",commit:r,remaining:n};u.push({source:r,created:l.created}),d=l.created}const l=(i??[]).slice(void 0!==r?1:0).map(e=>e.oid);if(0===l.length)return await Do(a),{kind:"picked",commits:u};const f=await Eo(a)??d,h=await Xo(a,l,o.target,d,c,{multiPick:!0,sequenceHead:f});return"picked"===h.kind?{kind:"picked",commits:[...u,...h.commits]}:h},as=async(a,n={})=>{await vn(a),await bn(a,tn);const r=await Mo(a),i=await Oo(a);if(void 0===r&&(void 0===i||0===i.length))throw e.noOperationInProgress(Za);const o=await Vr(a,tn),s=await t.resolveRef(a,o),c=await es(a,n);await On(a,s),await No(a),await wn(a);const d=(i??[]).slice(1).map(e=>e.oid);if(0===d.length)return await Do(a),{kind:"picked",commits:[]};const u=await Eo(a)??s;return Xo(a,d,o,s,c,{multiPick:!0,sequenceHead:u})},ns=async a=>{await vn(a),await bn(a,an);const n=await Mo(a),r=await Eo(a);if(void 0===n&&void 0===r)throw e.noOperationInProgress(Za);const i=await Vr(a,an),o=r??await t.resolveRef(a,i);return await Ao(a,{branch:i,target:o,clearHead:No}),{head:o,branch:i}},rs=async(e,a)=>{const n=t.validateRefName(a.initialBranch),r=e.layout.gitDir;try{await e.fs.mkdir(r),await e.fs.writeUtf8(`${r}/HEAD`,`ref: refs/heads/${n}\n`),await e.fs.writeUtf8(`${r}/config`,(i=a.bare,`[core]\n\trepositoryformatversion = 0\n\tfilemode = true\n\tbare = ${i?"true":"false"}\n`)),await e.fs.mkdir(`${r}/refs/heads`),await e.fs.mkdir(`${r}/refs/tags`),await e.fs.mkdir(`${r}/objects/info`),await e.fs.mkdir(`${r}/objects/pack`),await e.fs.writeUtf8(`${r}/info/exclude`,"# git ls-files --others --exclude-from=.git/info/exclude\n# Lines that start with '#' are comments.\n# For a project mostly in C, the following would be a good set of\n# exclude patterns (uncomment them if you want to use them):\n# *.[oa]\n# *~\n"),await e.fs.writeUtf8(`${r}/description`,"Unnamed repository; edit this file 'description' to name the repository.\n")}catch(t){throw await e.fs.rmRecursive(r).catch(()=>{}),t}var i;return{gitDir:r,initialBranch:n,bare:a.bare}},is=new TextDecoder,os=e=>{return!e.done&&"data"===e.value.kind&&"version 2"===((t=is.decode(e.value.payload)).endsWith("\n")?t.slice(0,-1):t);var t},ss=(e,t)=>{let a=!1;return{[Symbol.asyncIterator]:()=>({next:()=>a?e.next():(a=!0,Promise.resolve(t)),return:async t=>await(e.return?.(t))??{done:!0,value:void 0}})}},cs=async e=>{const t=(await e.advertisement())[Symbol.asyncIterator](),a=await t.next(),n=await(async(e,t,a)=>!a||os(t)?t:(await Ut(e,t,"git-upload-pack"),e.next()))(t,a,e.servicePrologue);if(!os(n))return{version:1,advertisement:await Ft(ss(t,n),"git-upload-pack",{servicePrologue:!1})};const r=await(async e=>{const t=e[Symbol.asyncIterator]();try{const e=await ta(t);if("version 2"!==e)throw Je(e??"");const a={commands:new Set,fetchFeatures:new Set,agent:void 0,objectFormat:Jt};for(let e=await ta(t);void 0!==e;e=await ta(t))aa(a,e);return void 0===a.agent?{version:2,commands:a.commands,fetchFeatures:a.fetchFeatures,objectFormat:a.objectFormat}:{version:2,agent:a.agent,commands:a.commands,fetchFeatures:a.fetchFeatures,objectFormat:a.objectFormat}}finally{await(t.return?.())}})(ss(t,n));if(!(i=r).commands.has("fetch")||!i.commands.has("ls-refs"))throw Je("fetch");var i;const o=await e.exchange((e=>{const t=[];t.push(ka.encode("symrefs\n")),!0===e.peel&&t.push(ka.encode("peel\n"));for(const a of e.refPrefixes??[])t.push(Ea(a));return ca("ls-refs",[],t)})({})),s=await(async e=>{const t=e[Symbol.asyncIterator]();try{const e=[];let a,n=await t.next();for(;!n.done&&"data"===n.value.kind;){const r=Ta(xa.decode(n.value.payload)),i=Oa(r);void 0!==i.symrefTarget?"HEAD"===i.name&&(a=i.symrefTarget):Sa(e,i,r),n=await t.next()}const r=((e,t)=>{const a=e.find(e=>"HEAD"===e.name);if(a)return a;if(void 0===t)return;const n=e.find(e=>e.name===t);return void 0===n?void 0:{name:"HEAD",id:n.id}})(e,a),i=void 0===a?[]:[`symref=HEAD:${a}`];return void 0===r?{capabilities:i,refs:e}:{capabilities:i,refs:e,head:r}}finally{await(t.return?.())}})(o);return{version:2,advertisement:(c=s,d=r.fetchFeatures,d.has("filter")?{...c,capabilities:[...c.capabilities,"filter"]}:c)};var c,d},ds=e=>{const t=[];return void 0!==e.depth&&t.push(`deepen ${e.depth}`),void 0!==e.filter&&t.push(`filter ${e.filter}`),t},us=async(a,n,r)=>{const i=(e=>{const t=[...e.wants.map(ma),...e.haves.map(wa)];return t.push(pa),ca("fetch",e.args??[],t)})({wants:r.wants,haves:r.haves,args:ds(r)}),o=await n.exchange(i),s=await(async(e,t={})=>{let a=[],n=!1,r=!1,i=[],o=[],s=[],c=async function*(){}();for await(const d of async function*(e){const t=e[Symbol.asyncIterator]();let a=await t.next();for(;!a.done&&"data"===a.value.kind;){const e=sa(ia.decode(a.value.payload));if(!oa(e))throw Ze(e);let n=!1;const r=da(t,e=>{n=e});yield{name:e,lines:r},a=n?await t.next():{done:!0,value:void 0}}}(e)){if("acknowledgments"===d.name){const e=await ga(ha(d.name,d.lines));a=e.acks,n=e.nak,r=e.ready;continue}if("shallow-info"===d.name){const e=await ya(ha(d.name,d.lines));i=e.shallow,o=e.unshallow;continue}"wanted-refs"!==d.name?c=Dt(d.lines,t.onProgress?{onProgress:t.onProgress}:{}):s=await ba(ha(d.name,d.lines))}return{acks:a,nak:n,ready:r,packBody:c,shallow:i,unshallow:o,wantedRefs:s}})(o,{onProgress:t=>a.progress.update(r.progressOp,0,void 0,e.sanitize(t))});return{packBytes:await t.drainPackBodyBounded(a,r,s.packBody),shallow:s.shallow,unshallow:s.unshallow}},ls=(a,n,r,i)=>2===r?us(a,n,i):(async(a,n,r)=>{const i=(t=>{if(0===t.wants.length)throw new e.TsgitError({code:"EMPTY_WANTS"});const a=[];t.wants.forEach((e,n)=>{a.push(((e,t)=>{const a=0===t.length?"":` ${t.join(" ")}`;return Ct.encode(`want ${e}${a}\n`)})(e,0===n?t.capabilities:[]))}),void 0!==t.depth&&a.push(Ct.encode(`deepen ${t.depth}\n`)),void 0!==t.filter&&a.push(Ct.encode(`filter ${t.filter}\n`));const n=mt(a),r=((e,t)=>{if(0===e.length)return new Uint8Array(0);const a=e.map(zt);return!0===t?wt(a):mt(a)})(t.haves,t.done),i=t.done?qt:new Uint8Array(0),o=new Uint8Array(n.byteLength+r.byteLength+i.byteLength);let s=0;return o.set(n,s),s+=n.byteLength,o.set(r,s),s+=r.byteLength,o.set(i,s),o})({wants:r.wants,haves:r.haves,capabilities:r.capabilities,done:!0,...void 0!==r.depth?{depth:r.depth}:{},...void 0!==r.filter?{filter:r.filter}:{}}),o=await n.exchange(i),s=await(async(e,t)=>{const a=e[Symbol.asyncIterator](),n=!0===t.expectShallow?await(async e=>{const t={shallow:[],unshallow:[]};let a=await e.next();for(;!a.done;){if("data"!==a.value.kind)return{shallow:t.shallow,unshallow:t.unshallow};const n=At.decode(a.value.payload);if(!Yt(n,t))return Zt.set(e,a.value),{shallow:t.shallow,unshallow:t.unshallow};a=await e.next()}return{shallow:t.shallow,unshallow:t.unshallow}})(a):{shallow:[],unshallow:[]},r=await(async e=>{const t=[];let a=!1;const n=Zt.get(e);void 0!==n&&Zt.delete(e);let r=void 0!==n?{done:!1,value:n}:await e.next();for(;!r.done;){if("data"!==r.value.kind)return{acks:t,nak:a,buffered:[r.value]};const n=At.decode(r.value.payload);if(n.startsWith("ACK "))t.push(Gt(n)),r=await e.next();else{if(!n.startsWith("NAK"))return{acks:t,nak:a,buffered:[r.value]};a=!0,r=await e.next()}}return{acks:t,nak:a,buffered:[]}})(a);return{acks:r.acks,nak:r.nak,shallow:n.shallow,unshallow:n.unshallow,packBody:{[Symbol.asyncIterator]:()=>async function*(e,t,a){const n=async function*(e,t){for(const t of e)yield t;let a=await t.next();for(;!a.done;)yield a.value,a=await t.next()}(e,t);if(a.sideBand){const e=a.onProgress?{onProgress:a.onProgress}:{};return void(yield*Dt(n,e))}yield*async function*(e){for await(const t of e){if("data"!==t.kind)return;yield t.payload}}(n)}(r.buffered,a,t)}}})(o,{sideBand:t.hasSideBand(r.capabilities),onProgress:t=>a.progress.update(r.progressOp,0,void 0,e.sanitize(t)),expectShallow:void 0!==r.depth});return{packBytes:await t.drainPackBodyBounded(a,r,s.packBody),shallow:s.shallow,unshallow:s.unshallow}})(a,n,i),fs={attempts:3,backoff:"exponential",baseMs:250,maxDelayMs:5e3},hs=e=>"request"===e.kind||"response"===e.kind?{...e,url:ws(e.url),headers:ms(e.headers)}:{...e,url:ws(e.url),errorMessage:ws(e.errorMessage)},ms=e=>{const t={};for(const[a,n]of Object.entries(e))t[a]=ws(n);return t},ws=e=>{let t="";for(let a=0;a<e.length;a+=1){const n=e.charCodeAt(a);t+=9===n||10===n?e[a]:n<32||n>126?`\\x${n.toString(16).padStart(2,"0").toUpperCase()}`:e[a]}return t},ps=/[\n\r\0]/,gs=e=>{const t=e.indexOf("@");if(-1===t)return e;const a=e.indexOf("://");if(-1===a)return e.slice(t+1).includes(":")?e.slice(t+1):e;const n=a+3,r=e.indexOf("/",n);return-1!==r&&r<t?e:`${e.slice(0,n)}${e.slice(t+1)}`},ys=e=>{const t=e.indexOf(":");if(-1===t)return!1;const a=e.indexOf("/");return(-1===a||t<a)&&!e.includes("://")},vs=t=>{try{return new URL(t)}catch{throw e.invalidUrl("not a valid URL")}},bs=e=>e.startsWith("/~")?e.slice(1):e,ks=e=>e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e,xs=e=>{const t=e.indexOf(":");return{hostToken:e.slice(0,t),path:e.slice(t+1)}},Is=e=>{const t=e.indexOf("@");return-1===t?{host:e}:{user:e.slice(0,t),host:e.slice(t+1)}},Es=(e,t)=>void 0===e?t:`${e}@${t}`,Ts=(e,t,a,n)=>({kind:"ssh",...void 0!==e?{user:e}:{},host:t,...void 0!==a?{port:a}:{},path:n}),$s=(e,t)=>{Os("hostname",e),Os("pathname",t)},Os=(t,a)=>{if(a.startsWith("-"))throw e.invalidUrl(`strange ${t} '${e.sanitize(a)}' blocked`)},Rs=(e,a)=>`${e} ${t.sqQuote(a)}`,Ss=e=>void 0!==e&&""!==e,Ds=e=>{const[t,...a]=Ms(e);return void 0===t?{program:e,baseArgs:[]}:{program:t,baseArgs:a}},As=/'([^']*)'|"((?:[^"\\]|\\.)*)"|((?:[^\s'"\\]|\\.)+)/g,Cs=/(?:'[^']*'|"(?:[^"\\]|\\.)*"|(?:[^\s'"\\]|\\.))+/g,Ms=e=>Array.from(e.matchAll(Cs),e=>Ns(e[0])),Ns=e=>Array.from(e.matchAll(As),Ps).join(""),Ps=e=>{const[,t,a,n]=e;return void 0!==t?t:void 0!==a?a.replace(/\\(["\\])/g,"$1"):(n??"").replace(/\\(.)/g,"$1")},Ls={"git-upload-pack":{"content-type":"application/x-git-upload-pack-request",accept:"application/x-git-upload-pack-result"},"git-receive-pack":{"content-type":"application/x-git-receive-pack-request",accept:"application/x-git-receive-pack-result"}},_s={"git-upload-pack":"application/x-git-upload-pack-advertisement","git-receive-pack":"application/x-git-receive-pack-advertisement"},Hs={"git-protocol":"version=2"},js={},Us=e=>"git-upload-pack"===e?Hs:js,Bs=(t,a,n)=>{const r=(t=>{(t=>{if(ps.test(t))throw e.invalidUrl("contains forbidden control character")})(t);const a=(t=>{if(t.startsWith("http://")||t.startsWith("https://"))return"http";if(t.startsWith("ssh://"))return"sshUrl";if(ys(t))return"scp";throw e.invalidUrl("unrecognised remote URL")})(t);return"http"===a?{kind:"http",url:t}:"sshUrl"===a?(e=>{const t=vs(e),a=""===t.username?void 0:t.username,n=ks(t.hostname),r=""===t.port?void 0:Number(t.port),i=bs(t.pathname);return $s(Es(a,n),i),Ts(a,n,r,i)})(t):(e=>{const{hostToken:t,path:a}=xs(e);$s(t,a);const{user:n,host:r}=Is(t);return Ts(n,r,void 0,a)})(t)})(a);if("http"===r.kind)return Ws(t,r.url,n);if(void 0===t.ssh)throw e.adapterUnavailable(t.runtime,"ssh: transport unavailable in this runtime");return new zs(t,t.ssh,r,n)},Ws=(t,r,i)=>{const o=((e,t={})=>{const a=void 0!==t.logger?(r=t.logger,{log:e=>r.log(hs(e))}):void 0;var r;let i=e.transport;return i=n.withRetry(t.retry??fs)(i),void 0!==t.auth&&(i=n.withAuth(t.auth)(i)),void 0!==a&&(i=n.withLogging({logger:a})(i)),i})(t,void 0!==t.config?.auth?{auth:t.config.auth}:{}),s=async n=>{const r=await o.request({url:n.url,method:n.method,headers:n.headers,...void 0!==n.body?{body:n.body}:{},...void 0!==t.signal?{signal:t.signal}:{}});if(200!==r.statusCode)throw e.httpError(r.statusCode,`${n.reasonLabel} returned ${r.statusCode}`);return gt(a.readableStreamToAsyncIterable(r.body),{v2:!0})};return{advertisement:()=>s({url:Lt(r,i),method:"GET",headers:{accept:_s[i],...Us(i)},reasonLabel:`${i} discovery`}),exchange:e=>s({url:Fs(r,i),method:"POST",headers:{...Ls[i],...Us(i)},reasonLabel:i,body:e}),close:async()=>{},servicePrologue:!0}},Fs=(e,t)=>{let a;try{a=new URL(e)}catch{throw Be("invalid URL")}if(""!==a.hash)throw Be("fragment must not be set");const n=a.pathname.endsWith("/")?a.pathname.slice(0,-1):a.pathname;return`${a.protocol}//${a.host}${n}/${t}${a.search}`};class zs{servicePrologue=!1;ctx;ssh;remote;service;channel;lines;constructor(e,t,a,n){this.ctx=e,this.ssh=t,this.remote=a,this.service=n}advertisement=()=>this.continuation();exchange=async e=>{const t=await this.openChannel();return this.continuation(Gs(t.stdin,e))};close=async()=>{if(void 0===this.channel)return;const e=await this.channel;await e.close()};openChannel(){return this.channel??=qs(this.ctx,this.ssh,this.remote,this.service),this.channel}async continuation(e){const t=await this.openChannel(),a=await this.sharedIterator(t),n=this.ctx.signal;return{[Symbol.asyncIterator]:()=>Vs({iterator:a,channel:t,signal:n,awaitWrite:e})}}sharedIterator(e){return this.lines??=Promise.resolve(gt(a.readableStreamToAsyncIterable(e.stdout))[Symbol.asyncIterator]()),this.lines}}const qs=async(e,a,n,r)=>{const i=await(async e=>{const a=e.env?.get("GIT_SSH_COMMAND");if(Ss(a))return Ds(a);const n=await t.readConfig(e),r=n.core?.sshCommand;if(Ss(r))return Ds(r);const i=e.env?.get("GIT_SSH");return Ss(i)?{program:i,baseArgs:[]}:{program:"ssh",baseArgs:[]}})(e),o=[...(c={service:r,parsed:n,baseArgs:i.baseArgs}).baseArgs,...(s=c.parsed.port,void 0===s?[]:["-p",String(s)]),Es(c.parsed.user,c.parsed.host),Rs(c.service,c.parsed.path)];var s,c;return a.open({command:i.program,args:o,env:{},...void 0!==e.signal?{signal:e.signal}:{}})},Gs=(e,t)=>{let a;const n=(async(e,t)=>{const a=e.getWriter();try{await a.write(t)}finally{a.releaseLock()}})(e,t).catch(e=>{a=e});return async()=>{if(await n,void 0!==a)throw a}},Vs=({iterator:e,channel:t,signal:a,awaitWrite:n})=>({next:async()=>{const r=await e.next();return r.done&&(await Ks(t,a),await(n?.())),r},return:async()=>({done:!0,value:void 0})}),Ks=async(t,a)=>{const n=await t.exit;if(0!==n){if(!0===a?.aborted)throw e.operationAborted();throw e.networkError(`ssh exited with code ${n}`)}},Xs=e=>{const t=Ne.filter(e=>"thin-pack"!==e&&"no-progress"!==e&&e!==Me);return[...He(e,t),Me]},Ys=e=>{const t=new Set,a=[];for(const n of e)t.has(n.id)||(t.add(n.id),a.push(n.id));return a},Zs=e=>e.includes("filter"),Js="clone:discover",Qs=async(t,a)=>{if(await t.fs.exists(`${t.layout.gitDir}/HEAD`))throw e.targetDirectoryNotEmpty(t.layout.workDir);if(""===a.url)throw e.remoteAdvertisesNoRefs();const n=void 0!==a.filter?it(rt(a.filter)):void 0;t.progress.start(Js);try{const e=await rs(t,{initialBranch:a.initialBranch??"main",bare:a.bare??!1});try{return await ec(t,a,e.gitDir,n)}catch(e){throw await t.fs.rmRecursive(t.layout.gitDir).catch(()=>{}),e}}finally{t.progress.end(Js)}},ec=async(e,t,a,n)=>{const r=Bs(e,t.url,"git-upload-pack");try{return await tc(e,t,a,n,r)}finally{await r.close()}},tc=async(a,n,r,i,o)=>{const s=await cs(o),c=s.advertisement;if(0===c.refs.length)throw e.remoteAdvertisesNoRefs();if(void 0!==i&&!Zs(c.capabilities))throw Ye();const d=Xs(c.capabilities),u=Ys(c.refs),l=await t.fetchPack(a,(e,t)=>ls(e,o,s.version,t),{wants:u,haves:[],capabilities:d,progressOp:"clone:write-objects",...void 0!==n.depth?{depth:n.depth}:{},...void 0!==i?{filter:i,promisor:!0}:{}});l.shallow.length>0&&await t.updateShallow(a,{shallow:l.shallow,unshallow:l.unshallow});const f=gs(n.url),h=await nc(a,c,f),m=await oc(a,c,f);return await ac(a,n.url,ic(c),i),{path:r,head:m,fetchedRefs:h}},ac=async(e,a,n,r)=>{await t.updateConfigEntries(e,[{section:"remote",subsection:"origin",key:"url",value:a},{section:"remote",subsection:"origin",key:"fetch",value:"+refs/heads/*:refs/remotes/origin/*"},...void 0!==n?[{section:"branch",subsection:n,key:"remote",value:"origin"},{section:"branch",subsection:n,key:"merge",value:`refs/heads/${n}`}]:[],...void 0!==r?[{section:"core",key:"repositoryformatversion",value:"1"},{section:"remote",subsection:"origin",key:"promisor",value:"true"},{section:"remote",subsection:"origin",key:"partialclonefilter",value:r},{section:"extensions",key:"partialClone",value:"origin"}]:[]])},nc=async(e,a,n)=>{const r=ic(a),i=[];for(const o of a.refs)if("HEAD"!==o.name&&t.isSafeRefName(o.name)){if(o.name.startsWith("refs/heads/")){const t=o.name.slice(11),a=`refs/remotes/origin/${t}`;if(await rc(e,a,o.id,n),i.push({name:a,id:o.id}),void 0!==r&&t===r){const t=o.name;await rc(e,t,o.id,n),i.push({name:t,id:o.id})}continue}if(o.name.startsWith("refs/tags/")){const t=o.name;await rc(e,t,o.id,n),i.push({name:t,id:o.id});continue}e.logger?.debug?.("clone: skipping unsupported ref namespace",{name:o.name})}return i},rc=async(e,a,n,r)=>{const i=`${e.layout.gitDir}/${a}`;await e.fs.writeUtf8(i,`${n}\n`),await t.recordRefUpdate(e,a,t.ZERO_OID,n,Ua(r))},ic=e=>{const t=e.capabilities.find(e=>e.startsWith("symref=HEAD:refs/heads/"));if(void 0!==t)return t.slice(23)},oc=async(e,t,a)=>{const n=ic(t),r=t.head?.id;if(void 0!==n){const t=`refs/heads/${n}`;return await e.fs.writeUtf8(`${e.layout.gitDir}/HEAD`,`ref: ${t}\n`),await sc(e,r,a),t}if(void 0!==t.head)return await e.fs.writeUtf8(`${e.layout.gitDir}/HEAD`,`${t.head.id}\n`),void await sc(e,r,a)},sc=async(e,a,n)=>{void 0!==a&&await t.recordRefUpdate(e,"HEAD",t.ZERO_OID,a,Ua(n))},cc=e=>`${e.layout.gitDir}/${t.REVERT_HEAD}`,dc=e=>yo(e,cc(e)),uc=async e=>{const t=cc(e);await e.fs.exists(t)&&await e.fs.rm(t)},lc=(e,t)=>{return`Revert ${a=s(e.message),`"${a.replace(/([\\"])/g,"\\$1")}"`}\n\nThis reverts commit ${t}.\n`;var a},fc=(e,a,n)=>{const r=e.gpg?.format??"openpgp",i="ssh"===r?e.gpg?.ssh?.program:e.gpg?.program;return{format:r,selector:"ssh"===r?n??e.user?.signingKey??"":t.resolveSigningSelector({...void 0!==e.user?.signingKey?{signingKey:e.user.signingKey}:{},...void 0!==n?{keyOverride:n}:{},fallbackIdent:`${a.name} <${a.email}>`}),...void 0!==i?{program:i}:{}}},hc=async(a,n,r)=>{const i=await t.signPayload(a,n,r);if(!i.ok)throw"off-node"===i.reason?e.signingFailed(i.reason):e.signingFailed(i.reason,r.format);return i.armor},mc=async(a,n)=>{await vn(a),await bn(a,"commit");const r=await gc(a),{mergeHead:i,cherryPickHead:o,revertHead:s}=r,c=yc(r);await En(a,void 0!==c?{except:c}:{});const d=n.noVerify??!1;await(async(e,a)=>{a||await t.runHook(e,"pre-commit")})(a,d);const u=void 0!==i||void 0!==o||void 0!==s,l=u?"merge":"message",f=await bc(a,n,u),h=await t.readConfig(a),m=Ec(h.user);void 0===n.author&&void 0===m&&await t.assertNoValuelessConfig(a,"user",void 0,["name","email"]);const w=jo(Tc(n.author,m)),p=Uo($c(n.committer,w,m)),g=await t.readIndex(a);Ic(g.entries);const y=await Sc(a,g.entries),v=await kn(a),b="symbolic"===v.kind?await Oc(a,v.target):v.id,k=xc(b,i);if(!n.allowEmpty&&void 0!==b&&void 0===i&&await Rc(a,b)===y)throw e.nothingToCommit();const x=await(async(e,a,n)=>{if(void 0===e.hooks)return a;const r=`${e.layout.gitDir}/COMMIT_EDITMSG`;await e.fs.writeUtf8(r,a),await t.runHook(e,"prepare-commit-msg",{args:[r,n.source]}),n.noVerify||await t.runHook(e,"commit-msg",{args:[r]});const i=await e.fs.readUtf8(r);return Bo(i,{allowEmpty:n.allowEmptyMessage})})(a,f,{noVerify:d,allowEmptyMessage:n.allowEmptyMessage??!1,source:l}),I={tree:y,parents:k,author:w,committer:p,message:x,extraHeaders:[]},E=await wc(a,h,I,p,n),T=await t.createCommit(a,{...I,...void 0!==E?{gpgSignature:E}:{}}),$="symbolic"===v.kind?v.target:void 0,O=kc(x,b,i,o);return await pc(a,{branch:$,id:T,parentId:b,reflogMessage:O}),await vc(a,r),await t.runInformationalHook(a,"post-commit"),{id:T,tree:y,branch:$,parents:k}},wc=async(e,a,n,r,i)=>{if(i.sign??!0===a.commit?.gpgSign)return(async(e,a,n,r,i)=>{const o=fc(a,r,i),s=t.serializeCommitContent({data:n}),c=await hc(e,s,o);return c.endsWith("\n")?c.slice(0,-1):c})(e,a,n,r,i.signKey)},pc=async(e,a)=>{const{branch:n,id:r,parentId:i,reflogMessage:o}=a;void 0===n?(await e.fs.writeUtf8(`${e.layout.gitDir}/HEAD`,`${r}\n`),await t.recordRefUpdate(e,"HEAD",i??t.ZERO_OID,r,o)):await t.updateRef(e,n,r,void 0!==i?{expected:i,reflogMessage:o}:{reflogMessage:o})},gc=async e=>({mergeHead:await fn(e),cherryPickHead:await Mo(e),revertHead:await dc(e)}),yc=e=>void 0!==e.mergeHead?Xa:void 0!==e.cherryPickHead?Za:void 0!==e.revertHead?Ja:void 0,vc=async(e,t)=>{if(void 0===t.mergeHead)return void 0!==t.cherryPickHead?(await No(e),void await wn(e)):void(void 0!==t.revertHead&&(await uc(e),await wn(e)));await mn(e)},bc=async(e,t,a)=>{if(t.message.length>0||!a)return Bo(t.message,{allowEmpty:t.allowEmptyMessage??!1});const n=await hn(e);return Bo(Wo(n??""),{allowEmpty:t.allowEmptyMessage??!1})},kc=(e,t,a,n)=>{const r=s(e);return void 0===t?(e=>`commit (initial): ${e}`)(r):void 0!==a?(e=>`commit (merge): ${e}`)(r):void 0!==n?La(r):_a(r)},xc=(e,t)=>{const a=[];return void 0!==e&&a.push(e),void 0!==t&&a.push(t),a},Ic=t=>{const a=new Set;for(const e of t)0!==e.flags.stage&&a.add(e.path);if(a.size>0)throw e.mergeHasConflicts(a.size,[...a])},Ec=e=>{if(void 0!==e?.name&&void 0!==e?.email)return{name:e.name,email:e.email,timestamp:Math.floor(Date.now()/1e3),timezoneOffset:"+0000"}},Tc=(e,t)=>{const a={};return void 0!==e&&(a.explicit=e),void 0!==t&&(a.configUser=t),a},$c=(e,t,a)=>{const n={};return void 0!==e&&(n.explicit=e),void 0!==t&&(n.author=t),void 0!==a&&(n.configUser=a),n},Oc=async(e,a)=>{try{return await t.resolveRef(e,a)}catch{return}},Rc=async(e,a)=>{const n=await t.readObject(e,a);return"commit"!==n.type?t.ZERO_OID:n.data.tree},Sc=async(e,t)=>{const a={files:new Map,subdirs:new Map};for(const e of t)Dc(a,e.path.split("/"),e);return Ac(e,a)},Dc=(e,t,a)=>{if(1===t.length)return void e.files.set(t[0],{id:a.id,mode:a.mode});const[n,...r]=t,i=n;let o=e.subdirs.get(i);void 0===o&&(o={files:new Map,subdirs:new Map},e.subdirs.set(i,o)),Dc(o,r,a)},Ac=async(e,a)=>{const n=[];for(const[e,t]of a.files)n.push({mode:t.mode,name:e,id:t.id});const r=await Promise.all(Array.from(a.subdirs).map(async([t,a])=>({name:t,id:await Ac(e,a)})));for(const{name:e,id:t}of r)n.push({mode:"40000",name:e,id:t});return t.writeTree(e,n)},Cc=e=>e,Mc=async(e,a)=>(await gn(e),void 0===a.scope?await t.getConfigValue({ctx:e,key:a.key}):await t.getConfigValue({ctx:e,key:a.key,scope:a.scope})),Nc=async(e,a)=>(await gn(e),void 0===a.scope?await t.getAllConfigValues({ctx:e,key:a.key}):await t.getAllConfigValues({ctx:e,key:a.key,scope:a.scope})),Pc=async(e,a)=>{await gn(e);const n=void 0===a.scope?await t.readConfigSections({ctx:e}):await t.readConfigSections({ctx:e,scope:a.scope}),r=[];for(const{scope:e,section:i}of n)for(const n of i.entries){const o=t.qualifyKey(i,n.key);a.keyPattern.test(o)&&(void 0===a.valuePattern||a.valuePattern.test(n.value??""))&&r.push({key:Cc(o),value:n.value,scope:e})}return{entries:r}},Lc=async(e,a)=>{await gn(e);const n=void 0===a?.scope?await t.readConfigSections({ctx:e}):await t.readConfigSections({ctx:e,scope:a.scope}),r=[];for(const{scope:e,section:a}of n)for(const n of a.entries){const i=t.qualifyKey(a,n.key);r.push({key:Cc(i),value:n.value,scope:e})}return{entries:r}},_c=async(a,n)=>{await gn(a);const r=n.scope??"local",i=await t.getAllConfigValues({ctx:a,key:n.key,scope:r});if(i.values.length>1)throw e.configMultipleValues(n.key,i.values.length,"overwrite",r);return await t.setConfigEntry({ctx:a,key:n.key,value:n.value,scope:r}),{key:n.key,value:n.value,scope:r}},Hc=async(a,n)=>{await gn(a);const r=n.scope??"local",i=await t.getAllConfigValues({ctx:a,key:n.key,scope:r});if(0===i.values.length)return{key:n.key,scope:r,removed:!1};if(i.values.length>1)throw e.configMultipleValues(n.key,i.values.length,"remove",r);const[o]=i.values;return await t.unsetConfigEntry({ctx:a,key:n.key,scope:r}),{key:n.key,scope:r,removed:!0,previousValue:o.value}},jc=async(e,a)=>{await gn(e);const n=a.scope??"local",r=await t.getAllConfigValues({ctx:e,key:a.key,scope:n});return 0===r.values.length?{key:a.key,scope:n,removed:0}:(await t.unsetAllConfigEntries({ctx:e,key:a.key,scope:n}),{key:a.key,scope:n,removed:r.values.length})},Uc=async(e,a)=>{await gn(e);const n=a.scope??"local";return await t.renameConfigSection({ctx:e,oldName:a.oldName,newName:a.newName,scope:n}),{oldName:a.oldName,newName:a.newName,scope:n}},Bc=async(e,a)=>{await gn(e);const n=a.scope??"local";return await t.removeConfigSection({ctx:e,sectionName:a.name,scope:n}),{name:a.name,scope:n}},Wc=async(t,a={})=>{if(await vn(t),await bn(t,"merge --continue"),void 0===await fn(t))throw e.noOperationInProgress("merge");return mc(t,Fc(a))},Fc=e=>({message:e.message??"",...void 0!==e.author&&{author:e.author},...void 0!==e.committer&&{committer:e.committer},...void 0!==e.noVerify&&{noVerify:e.noVerify}}),zc=(e,t)=>e.depth!==t.depth?e.depth-t.depth:e.foundOrder-t.foundOrder,qc=e=>t.compileGlob(e,{anchored:!0}),Gc=(e,t)=>t?e.startsWith("refs/")?e.slice(5):e:e.startsWith("refs/tags/")?e.slice(10):e,Vc=(e,t)=>t.priority>e.priority||2===t.priority&&t.taggerDate>e.taggerDate,Kc=async(e,a)=>{let n=await t.readObject(e,a),r=!1,i=0;for(let a=0;"tag"===n.type;a+=1){if(t.exceedsMaxPeelDepth(a))return;r||(i=n.data.tagger?.timestamp??0),r=!0,n=await t.readObject(e,n.data.object)}if("commit"===n.type)return{commit:n,viaTag:r,taggerDate:i}},Xc=["candidates","exactMatch","firstParent","dirty","broken"],Yc=e=>void 0===e?[]:"string"==typeof e?[e]:e,Zc=t=>{if(void 0!==t.candidates&&(!Number.isInteger(t.candidates)||t.candidates<0))throw e.invalidOption("candidates",`expected a non-negative integer, got ${t.candidates}`);return!0===t.exactMatch?0:t.candidates??10},Jc=Number.MIN_SAFE_INTEGER,Qc=(e,t)=>e<t,ed=(e,t)=>(e=>{const t=[...e].map(e=>"*"===e?".*":"?"===e?".":e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("");return new RegExp(`^${t}$`)})(e).test(t),td=e=>({...e,generation:e.generation+1,distance:e.distance+1}),ad=(e,t)=>({...e,steps:[...nd(e),{kind:"parent",number:t}],generation:0,distance:e.distance+65535}),nd=e=>e.generation>0?[...e.steps,{kind:"ancestor",count:e.generation}]:e.steps,rd=e=>void 0===e?[]:"string"==typeof e?[e]:e,id=async(e,t)=>tr(e,await $r(e,t),"commit"),od=async(e,t)=>tr(e,await $r(e,t),"tree"),sd=async(e,a,n={})=>{await vn(e);const r=await id(e,a??"HEAD"),i=0===(o=(await t.readObject(e,r)).data.committer.timestamp)?0:o>Jc+86400?o-86400:Jc;var o;const s=(e=>({qualifies:t=>"HEAD"!==t&&!(e.tags&&!t.startsWith("refs/tags/"))&&(t=>0===e.refs.length||e.refs.some(e=>ed(e,t)))(t)&&!(t=>e.exclude.some(e=>ed(e,t)))(t)}))((e=>({tags:!0===e.tags,refs:rd(e.refs),exclude:rd(e.exclude)}))(n)),c=[...await t.enumerateRefs(e)].filter(e=>s.qualifies(e)).sort(),d=new Map;for(const t of c)await cd(e,t,d,i);const u=d.get(r);return void 0===u?{oid:r,ref:void 0,tagDeref:!1,steps:[]}:{oid:r,ref:u.ref,tagDeref:u.tagDeref,steps:nd(u)}},cd=async(e,t,a,n)=>{const r=await dd(e,t,a,n);if(void 0===r)return;const i=[r];for(;i.length>0;){const t=i.pop(),r=a.get(t.id),o=await ud(e,t,r,a,n);for(let e=o.length-1;e>=0;e-=1)i.push(o[e])}},dd=async(e,a,n,r)=>{const i=await t.getRefStore(e).resolveDirect(a);if("direct"!==i.kind)return;const o=await Kc(e,i.id);if(void 0===o)return;if(Qc(o.commit.data.committer.timestamp,r))return;const s={ref:a,tagDeref:o.viaTag,fromTag:a.startsWith("refs/tags/"),taggerDate:o.viaTag?o.taggerDate:o.commit.data.committer.timestamp,generation:0,distance:0,steps:[]};return ld(n,o.commit.id,s)?o.commit:void 0},ud=async(e,a,n,r,i)=>{const o=[],s=a.data.parents;for(let a=0;a<s.length;a+=1){const c=s[a],d=0===a?td(n):ad(n,a+1);if(!ld(r,c,d))continue;const u=await t.readObject(e,c);"commit"===u.type&&(Qc(u.data.committer.timestamp,i)||o.push(u))}return o},ld=(e,t,a)=>{const n=e.get(t);return!(void 0!==n&&!((e,t)=>e.fromTag!==t.fromTag?t.fromTag:e.distance!==t.distance?e.distance>t.distance:e.taggerDate>t.taggerDate)(n,a)||(e.set(t,a),0))},fd="status:scan",hd=async e=>{await vn(e);const a=await kn(e),n=xn(a),r="direct"===a.kind,i=await t.readIndex(e),o=function(e){const t=[],a=new Map;for(const n of e.entries)if(0===n.flags.stage)t.push(n);else{const e=a.get(n.path)??{};a.set(n.path,f(e,n))}return{staged:t,unmerged:a}}(i),s=new Map(o.staged.map(e=>[e.path,e])),c=new Set(o.unmerged.keys());for(const e of s.keys())c.add(e);e.progress.start(fd);try{const a=((e,t)=>{let a=0,n=0;return{tick:()=>{a+=1;const r=Math.floor(a/100);r>n&&(n=r,e.update(t,a))}}})(e.progress,fd),d=await t.maybeBuildAttributeProvider(e),u=await md(e,o.staged,a,d),l=await wd(e,c),f=await t.readHeadTree(e),h=pd(i,f,o.unmerged),m=gd(h,u,f,s),w=await xd(e,o.unmerged);return{branch:n,detached:r,changes:m,untracked:l,unmerged:w,clean:0===m.length&&0===l.length&&0===w.length}}finally{e.progress.end(fd)}},md=async(e,a,n,r)=>{const i=new Map;return await Promise.all(a.map(async a=>{a.flags.skipWorktree||i.set(a.path,await t.compareWorkingTreeDelta(e,a,r)),n.tick()})),i},wd=async(e,a)=>{const n=await t.buildRepoIgnorePredicate(e),r=[];for await(const{path:i}of t.walkWorkingTree(e,{ignore:n}))a.has(i)||r.push(i);return r.sort(t.comparePaths)},pd=(e,a,n)=>{const r=new Map;for(const i of l(e,a).changes){const e=t.primaryPath(i);n.has(e)||r.set(e,vd(i))}return r},gd=(e,a,n,r)=>{const i=new Set(e.keys());for(const[e,t]of a)void 0!==bd(t.status)&&i.add(e);return[...i].map(t=>yd(t,e.get(t),a.get(t),n,r.get(t))).sort((e,a)=>t.comparePaths(e.path,a.path))},yd=(e,t,a,n,r)=>{const i=n?.entries.get(e),o=void 0===a?void 0:bd(a.status);return{path:e,...void 0!==t&&{staged:t},...void 0!==o&&{unstaged:o},...void 0!==i&&{head:{id:i.id,mode:i.mode}},...void 0!==r&&{index:{id:r.id,mode:r.mode}},...void 0!==a?.worktreeMode&&{worktree:{mode:a.worktreeMode}}}},vd=e=>"add"===e.type?"added":"delete"===e.type?"deleted":"type-change"===e.type?"type-changed":"modify"===e.type&&e.oldId===e.newId?"mode-changed":"modified",bd=e=>"absent"===e?"deleted":"type-changed"===e?"type-changed":"mode-changed"===e?"mode-changed":"modified"===e?"modified":void 0,kd=e=>({id:e.id,mode:e.mode}),xd=(e,t)=>Promise.all([...t].map(async([t,a])=>{const n=await Id(e,t);return{kind:r(a),path:t,...a.stage1&&{base:kd(a.stage1)},...a.stage2&&{ours:kd(a.stage2)},...a.stage3&&{theirs:kd(a.stage3)},...void 0!==n&&{worktree:{mode:n}}}})),Id=async(e,a)=>{const n=await e.fs.lstat(t.joinPath(e.layout.workDir,a)).catch(()=>{});return void 0===n?void 0:t.deriveWorkingMode(n)},Ed="refs/tags/",Td=(e,a,n,r,i)=>({tag:t.RefName.from(i?`refs/${e}`:`${Ed}${e}`),name:e,distance:a,oid:n,exact:0===a,dirty:r}),$d=(e,t)=>({tag:void 0,name:"",distance:0,oid:e,exact:!1,dirty:t}),Od=(e,t,a)=>({name:t,priority:e.startsWith(Ed)?a.viaTag?2:1:0,taggerDate:a.taggerDate}),Rd=e=>{const{step:t,candidates:a,reach:n,tally:r}=e,i=t.commit.id,o=e.nameMap.get(i);if(void 0!==o){const t=((e,t,a,n,r,i)=>{if(e.priority<t)return{annotated:0,skippedLowPriority:!0};const o=r.length;return r.push({name:e.name,commitOid:a,depth:n,foundOrder:o}),Pd(i,a).add(o),{annotated:2===e.priority?1:0,skippedLowPriority:!1}})(o,e.minPriority,i,e.depth,a,n);r.annotatedCount+=t.annotated,r.sawUnannotated=r.sawUnannotated||t.skippedLowPriority}return Md(a,n.get(i)),Nd(n,t.commit,e.firstParent),((e,t,a,n)=>e>0&&t.frontierEmpty&&((e,t)=>{if(void 0===t)return!1;const a=Math.min(...e.map(e=>e.depth));return e.every(e=>e.depth!==a||t.has(e.foundOrder))})(a,n))(r.annotatedCount,t,a,n.get(i))},Sd=(e,t,a)=>e.length===t||e.length===a,Dd=(e,t,a,n)=>(Cd(e,a.commit,t,n),((e,t,a,n)=>!0===e.get(n)?.has(t.foundOrder)&&a.frontier().every(a=>!0===e.get(a)?.has(t.foundOrder)))(e,t,a,a.commit.id)),Ad=e=>[...e].sort(zc)[0],Cd=(e,t,a,n)=>{Md([a],e.get(t.id)),Nd(e,t,n)},Md=(e,t)=>{for(const a of e)void 0!==t&&t.has(a.foundOrder)||(a.depth+=1)},Nd=(e,a,n)=>{const r=e.get(a.id);if(void 0!==r)for(const i of t.selectParents(a,n)){const t=Pd(e,i);for(const e of r)t.add(e)}},Pd=(e,t)=>{let a=e.get(t);return void 0===a&&(a=new Set,e.set(t,a)),a},Ld=e=>e.startsWith(di)?e.slice(11):e,_d="origin",Hd=e=>void 0!==e.remote&&1===e.remote.size?e.remote.keys().next().value:void 0,jd=(e,t,a)=>t??(void 0!==a?e.branch?.get(a)?.remote:void 0)??Hd(e)??_d,Ud=(e,t,a)=>t??(void 0!==a?e.branch?.get(a)?.pushRemote:void 0)??e.remotePushDefault??(void 0!==a?e.branch?.get(a)?.remote:void 0)??Hd(e)??_d,Bd=/^[A-Za-z0-9._-]+$/,Wd=t=>{if(!Bd.test(t))throw e.invalidOption("remote",`invalid remote name: ${t}`)},Fd="fetch:negotiate",zd=async(e,a={})=>{await vn(e);const n=await kn(e),r=xn(n),i=void 0!==r?Ld(r):void 0,o=await t.readConfig(e),s=jd(o,a.remote,i),{url:c,filter:d}=await Xd(e,s);e.progress.start(Fd);try{return await qd(e,a,s,c,d)}finally{e.progress.end(Fd)}},qd=async(e,t,a,n,r)=>{const i=Bs(e,n,"git-upload-pack");try{return await Gd(e,t,a,n,r,i)}finally{await i.close()}},Gd=async(a,n,r,i,o,s)=>{const c=await cs(s),d=c.advertisement;if(0===d.refs.length)throw e.remoteAdvertisesNoRefs();if(void 0!==o&&!Zs(d.capabilities))throw Ye();const u=Xs(d.capabilities),l=Ys(d.refs);if(void 0===o&&void 0===n.depth&&await Vd(a,l))return Kd(a,n,r,i,d,[],[]);const f=await Yd(a,r),h=await t.fetchPack(a,(e,t)=>ls(e,s,c.version,t),{wants:l,haves:f,capabilities:u,progressOp:"fetch:write-objects",...void 0!==n.depth?{depth:n.depth}:{},...void 0!==o?{filter:o,promisor:!0}:{}});return(h.shallow.length>0||h.unshallow.length>0)&&await t.updateShallow(a,{shallow:h.shallow,unshallow:h.unshallow}),Kd(a,n,r,i,d,h.shallow,h.unshallow)},Vd=async(e,a)=>{for(const n of a)if(!await t.hasObject(e,n))return!1;return!0},Kd=async(e,t,a,n,r,i,o)=>({remote:a,url:n,updatedRefs:await tu(e,a,r),prunedRefs:!0===t.prune?await ru(e,a,r):[],shallow:i,unshallow:o}),Xd=async(a,n)=>{Wd(n);const r=await t.readConfig(a),i=r.remote?.get(n);if(void 0===i?.url||""===i.url)throw await t.assertNoValuelessConfig(a,"remote",n,["url"]),e.remoteNotConfigured(n);const o=void 0!==i.partialCloneFilter?it(rt(i.partialCloneFilter)):void 0;return{url:i.url,filter:o}},Yd=async(e,a)=>{const n=await Zd(e,a);if(0===n.length)return[];const r=new Set,i=[];for(const e of n)if(!r.has(e)&&(r.add(e),i.push(e),i.length>=t.MAX_HAVES))return i;const o=n.slice(0,t.MAX_WALK_SEEDS);for await(const a of t.walkCommits(e,{from:o,ignoreMissing:!0,verifyHash:!1}))if(!r.has(a.id)&&(r.add(a.id),i.push(a.id),i.length>=t.MAX_HAVES))break;return i},Zd=async(e,a)=>{const n=[],r=[`refs/remotes/${a}`,"refs/tags"];for(const t of r){const a=`${e.layout.gitDir}/${t}`;await e.fs.exists(a)&&await Jd(e,a,n)}const i=`refs/remotes/${a}/`,o=await t.getRefStore(e).getPackedRefs();for(const e of o.entries)(e.name.startsWith(i)||e.name.startsWith("refs/tags/"))&&n.push(e.id);return n},Jd=async(e,t,a)=>{const n=await e.fs.readdir(t);for(const r of n){const n=`${t}/${r.name}`;if(r.isDirectory){await Jd(e,n,a);continue}const i=(await e.fs.readUtf8(n)).trim();eu(i)&&a.push(i)}},Qd=/^[0-9a-f]{40}([0-9a-f]{24})?$/i,eu=e=>Qd.test(e),tu=async(e,a,n)=>{const r=[];for(const i of n.refs){const n=au(a,i);if(void 0===n)continue;const o=await nu(e,n);o!==i.id?(await t.updateRef(e,n,i.id,{reflogMessage:Ba(a)}),r.push({name:n,oldId:o,newId:i.id})):r.push({name:n,oldId:o,newId:i.id})}return r},au=(e,a)=>{if("HEAD"!==a.name&&t.isSafeRefName(a.name)){if(a.name.startsWith(di)){const n=`refs/remotes/${e}/${a.name.slice(11)}`;if(!t.isSafeRefName(n))return;return n}return a.name.startsWith("refs/tags/")?a.name:void 0}},nu=async(e,a)=>{t.validateRefName(a);const n=`${e.layout.gitDir}/${a}`;if(!await e.fs.exists(n))return;const r=(await e.fs.readUtf8(n)).trim();return eu(r)?r:void 0},ru=async(e,t,a)=>{const n=new Set(a.refs.filter(e=>e.name.startsWith(di)).map(e=>e.name.slice(11))),r=`${e.layout.gitDir}/refs/remotes/${t}`;if(!await e.fs.exists(r))return[];const i=[];return await iu(e,r,"",n,t,i),i},iu=async(e,a,n,r,i,o)=>{const s=await e.fs.readdir(a);for(const c of s){const s=`${a}/${c.name}`,d=""===n?c.name:`${n}/${c.name}`;if(c.isDirectory){await iu(e,s,d,r,i,o);continue}if(r.has(d))continue;const u=`refs/remotes/${i}/${d}`;if(!t.isSafeRefName(u)){e.logger?.warn?.("fetch.prune: skipping unsafe ref name",{name:u});continue}const l=u;try{await t.updateRef(e,l,t.ZERO_OID,{delete:!0})}catch(t){if(ou(t)){e.logger?.warn?.("fetch.prune: skipping packed-only ref",{name:l});continue}throw t}o.push(l)}},ou=t=>t instanceof e.TsgitError&&"UNSUPPORTED_OPERATION"===t.data.code&&"delete-packed-ref"===t.data.operation,su=async(e,a,n)=>!!await e.fs.exists(t.looseObjectPath(e.layout.gitDir,n))||void 0!==await a.lookup(n),cu=async(a,n)=>{await vn(a);const r=await t.readConfig(a),i=r.extensions?.partialClone;if(void 0===i)return{kind:"no-promisor"};const o=r.remote?.get(i)?.url;if(void 0===o||""===o)throw e.remoteNotConfigured(i);const s=await(async(e,a)=>{const n=t.createPackRegistry(e),r=new Set,i=[];for(const t of a)r.has(t)||(r.add(t),await su(e,n,t)||i.push(t));return i})(a,n);if(0===s.length)return{kind:"fetched",remote:i,requested:n.length,fetched:0};const c=Bs(a,o,"git-upload-pack");try{const n=await cs(c),r=Xs(n.advertisement.capabilities);try{await t.fetchPack(a,(e,t)=>ls(e,c,n.version,t),{wants:s,haves:[],capabilities:r,progressOp:"fetch-missing:write-objects",promisor:!0})}catch(t){if(!(t=>t instanceof e.TsgitError&&"FILE_EXISTS"===t.data.code)(t))throw t}}finally{await c.close()}return{kind:"fetched",remote:i,requested:n.length,fetched:s.length}},du="badFilemode",uu="badTree",lu="badTreeSha1",fu="duplicateEntries",hu="emptyName",mu="fullPathname",wu="hasDot",pu="hasDotdot",gu="hasDotgit",yu="largePathname",vu="nullSha1",bu="treeNotSorted",ku="zeroPaddedFilemode",xu="gitattributesBlob",Iu="gitattributesSymlink",Eu="gitignoreSymlink",Tu="gitmodulesBlob",$u="gitmodulesSymlink",Ou="mailmapSymlink",Ru="badDate",Su="badDateOverflow",Du="badObjectSha1",Au="badParentSha1",Cu="badTimezone",Mu="missingAuthor",Nu="missingCommitter",Pu="missingEmail",Lu="missingNameBeforeEmail",_u="missingSpaceBeforeDate",Hu="missingSpaceBeforeEmail",ju="missingTree",Uu="multipleAuthors",Bu="nulInCommit",Wu="nulInHeader",Fu="zeroPaddedDate",zu="badTagName",qu="missingObject",Gu="missingTag",Vu="missingTagEntry",Ku="missingTaggerEntry",Xu="missingType",Yu="missingTypeEntry",Zu="gitmodulesLarge",Ju="gitmodulesName",Qu="gitmodulesParse",el="gitmodulesUrl",tl="gitattributesLarge",al="gitattributesLineLength",nl=new Map([[du,"info"],[uu,"error"],[lu,"error"],[fu,"error"],[hu,"warning"],[mu,"warning"],[wu,"warning"],[pu,"warning"],[gu,"warning"],[yu,"warning"],[vu,"warning"],[bu,"error"],[ku,"warning"],[xu,"error"],[Iu,"info"],[Eu,"info"],[Tu,"error"],[$u,"error"],[Ou,"info"],[Ru,"error"],[Su,"error"],["badEmail","error"],["badName","error"],[Du,"error"],[Au,"error"],[Cu,"error"],["badType","error"],[Mu,"error"],[Nu,"error"],[Pu,"error"],[Lu,"error"],[_u,"error"],[Hu,"error"],[ju,"error"],[Uu,"error"],[Bu,"warning"],[Wu,"error"],["unknownType","error"],["unterminatedHeader","error"],[Fu,"error"],["badGpgsig","error"],[zu,"info"],[qu,"error"],[Gu,"error"],[Vu,"error"],[Ku,"info"],[Xu,"error"],[Yu,"error"],[Zu,"error"],["gitmodulesMissing","error"],[Ju,"error"],[Qu,"info"],["gitmodulesPath","error"],["gitmodulesUpdate","error"],[el,"error"],[tl,"error"],[al,"error"],["gitattributesMissing","error"]]),rl=new Set([hu,mu,wu,pu,gu,yu,Bu,vu,ku]);function il(e,t){const a=nl.get(e)??"error";return t&&"warning"===a&&rl.has(e)?"error":a}const ol=new TextDecoder,sl=new TextEncoder;function cl(e,t,a,n){if(""===e||e.startsWith("#")||e.startsWith(";"))return n;if(e.startsWith("[")){const a=e.indexOf("]");if(-1===a)return!0;const r=e.slice(1,a),i='submodule "';return r.startsWith(i)&&r.endsWith('"')&&t.push(r.slice(i.length,-1)),n}const r=e.indexOf("=");if(-1!==r){const t=e.slice(0,r).trim(),n=e.slice(r+1).trim();"url"===t&&a.push(n)}return n}const dl=e=>e.startsWith("-");function ul(e,a,n){return".gitmodules"===n?function(e,a){const n=[];if(e.length>104857600)return n.push({msgId:Zu,severity:il(Zu,a)}),n;const r=ol.decode(e),{names:i,urls:o,parseError:s}=function(e){const t=[],a=[];let n=!1;for(const r of e.split("\n"))n=cl(r.trim(),t,a,n);return{names:t,urls:a,parseError:n}}(r);s&&n.push({msgId:Qu,severity:il(Qu,a)});for(const e of o)dl(e)&&n.push({msgId:el,severity:il(el,a)});for(const e of i)t.isUnsafeSubmoduleName(e)&&n.push({msgId:Ju,severity:il(Ju,a)});return n}(e,a):".gitattributes"===n?function(e,t){const a=[];if(e.length>104857600)return a.push({msgId:tl,severity:il(tl,t)}),a;const n=ol.decode(e);for(const e of n.split("\n"))if(sl.encode(e).length>2048)return a.push({msgId:al,severity:il(al,t)}),a;return a}(e,a):[]}const ll=new TextDecoder,fl=/^[0-9a-f]{40}$/,hl=/^[0-9a-f]{64}$/,ml=/^[+-]\d{4}$/;function wl(e){return fl.test(e)||hl.test(e)}function pl(e,t){const a=[],n=e.indexOf("<");if(-1===n)return a.push({msgId:Pu,severity:il(Pu,t)}),a;const r=e.slice(0,n);r.endsWith(" ")||a.push({msgId:Hu,severity:il(Hu,t)}),""===r.trimEnd()&&a.push({msgId:Lu,severity:il(Lu,t)});const i=e.indexOf(">",n);if(-1===i)return a.push({msgId:Pu,severity:il(Pu,t)}),a;const o=e.slice(i+1);if(!o.startsWith(" "))return a.push({msgId:_u,severity:il(_u,t)}),a;const[s,c=""]=o.trim().split(/\s+/),d=function(e,t){return e.startsWith("0")&&e.length>1?{msgId:Fu,severity:il(Fu,t)}:/^\d+$/.test(e)?function(e){return e.length>19||!(e.length<19)&&e>"9223372036854775807"}(e)?{msgId:Su,severity:il(Su,t)}:void 0:{msgId:Ru,severity:il(Ru,t)}}(s,t);return void 0!==d?(a.push(d),a):(""===c||function(e){if(!ml.test(e))return!1;const t=Number.parseInt(e.slice(1,3),10),a=Number.parseInt(e.slice(3,5),10);return t<24&&a<60}(c)||a.push({msgId:Cu,severity:il(Cu,t)}),a)}const gl=new TextDecoder,yl=/^[0-9a-f]{40}$/,vl=/^[0-9a-f]{64}$/,bl=new Set(["blob","tree","commit","tag"]);function kl(e,t,a){const n=[],r=e[t];if(void 0===r||!r.startsWith("tag "))return n.push({msgId:Gu,severity:il(Gu,a)}),n;const i=r.slice(4);if(""===i)return n.push({msgId:Vu,severity:il(Vu,a)}),n;(i.includes("\0")||i.includes("\n"))&&n.push({msgId:zu,severity:il(zu,a)});const o=e[t+1];if(void 0===o||!o.startsWith("tagger "))return n.push({msgId:Ku,severity:il(Ku,a)}),n;for(const e of function(e,t){const a=e.indexOf("<");if(-1===a)return[];if(!e.slice(0,a).endsWith(" "))return[{msgId:Hu,severity:il(Hu,t)}];const n=e.indexOf(">",a);if(-1===n)return[];const r=e.slice(n+1);if(!r.startsWith(" "))return[];const[i=""]=r.trim().split(/\s+/);return/^\d+$/.test(i)&&function(e){return e.length>19||!(e.length<19)&&e>"9223372036854775807"}(i)?[{msgId:Su,severity:il(Su,t)}]:[]}(o.slice(7),a))n.push(e);return n}const xl=new TextDecoder,Il=new TextEncoder,El=new Set(["100644","100755","120000","40000","160000"]);function Tl(e){const t="40000"===e.mode||"040000"===e.mode,a=Il.encode(e.name);if(!t)return a;const n=new Uint8Array(a.length+1);return n.set(a),n[a.length]=47,n}function $l(e,a,n,r){const i=[],{mode:o,name:s,sha:c}=e;o.startsWith("0")&&i.push({msgId:ku,severity:il(ku,r)});const d=o.startsWith("0")?o.slice(1):o;El.has(d)||i.push({msgId:du,severity:il(du,r)}),function(e){for(const t of e)if(0!==t)return!1;return!0}(c)&&i.push({msgId:vu,severity:il(vu,r)});for(const e of function(e,t){const a=[];return""===e?(a.push({msgId:hu,severity:il(hu,t)}),a):("."===e&&a.push({msgId:wu,severity:il(wu,t)}),".."===e&&a.push({msgId:pu,severity:il(pu,t)}),".git"===e&&a.push({msgId:gu,severity:il(gu,t)}),e.includes("/")&&a.push({msgId:mu,severity:il(mu,t)}),Il.encode(e).length>4096&&a.push({msgId:yu,severity:il(yu,t)}),a)}(s,r))i.push(e);n.has(s)&&i.push({msgId:fu,severity:il(fu,r)}),void 0!==a&&t.compareBytes(Tl(a),Tl(e))>0&&i.push({msgId:bu,severity:il(bu,r)});for(const e of function(e,t,a){const n=[],r="120000"===e,i="100644"===e||"100755"===e;return".gitmodules"===t&&(r?n.push({msgId:$u,severity:il($u,a)}):i||n.push({msgId:Tu,severity:il(Tu,a)})),".gitattributes"===t&&(r?n.push({msgId:Iu,severity:il(Iu,a)}):i||n.push({msgId:xu,severity:il(xu,a)})),".gitignore"===t&&r&&n.push({msgId:Eu,severity:il(Eu,a)}),".mailmap"===t&&r&&n.push({msgId:Ou,severity:il(Ou,a)}),n}(o,s,r))i.push(e);return i}function Ol(e){const{rawBody:a,kind:n,strict:r,fileName:i}=e;switch(n){case"tree":return function(e,a){const{entries:n,badTree:r}=function(e){const a=[];let n=0;for(;n<e.length;){const r=t.indexOf(e,32,n);if(-1===r||r===n)return{entries:a,badTree:!0};const i=t.indexOf(e,0,r+1);if(-1===i)return{entries:a,badTree:!0};const o=i+1+20;if(o>e.length)return{entries:a,badTree:!0};const s=e.subarray(n,r),c=e.subarray(r+1,i),d=e.subarray(i+1,o),u=xl.decode(s),l=xl.decode(c);a.push({mode:u,name:l,sha:d,offset:n}),n=o}return{entries:a,badTree:!1}}(e);if(r)return[{msgId:uu,severity:il(uu,a)}];const i=[],o=new Set;let s;for(const e of n){for(const t of $l(e,s,o,a))i.push(t);o.add(e.name),s=e}return i}(a,r);case"commit":return function(e,t){const a=ll.decode(e),{headerText:n,messageBody:r,lines:i}=function(e){const t=e.indexOf("\n\n"),a=-1===t?e:e.slice(0,t);return{headerText:a,messageBody:-1===t?"":e.slice(t+2),lines:a.split("\n")}}(a);if(n.includes("\0"))return[{msgId:Wu,severity:il(Wu,t)}];const{findings:o,nextIdx:s}=function(e,t){const a=[],n=e[0];if(void 0===n||!n.startsWith("tree "))return a.push({msgId:ju,severity:il(ju,t)}),{findings:a,nextIdx:-1};wl(n.slice(5))||a.push({msgId:lu,severity:il(lu,t)});let r=1;for(;r<e.length;){const n=e[r];if(void 0===n||!n.startsWith("parent "))break;wl(n.slice(7))||a.push({msgId:Au,severity:il(Au,t)}),r++}return{findings:a,nextIdx:r}}(i,t);if(-1===s)return o;const c=[...o];for(const e of function(e,t,a){const n=[];let r=t;const i=e[r];if(void 0===i||!i.startsWith("author "))return n.push({msgId:Mu,severity:il(Mu,a)}),n;for(const e of pl(i.slice(7),a))n.push(e);for(r++;r<e.length&&e[r]?.startsWith("author ");)n.push({msgId:Uu,severity:il(Uu,a)}),r++;for(;r<e.length&&!e[r]?.startsWith("committer ");)r++;const o=e[r];if(void 0===o||!o.startsWith("committer "))return n.push({msgId:Nu,severity:il(Nu,a)}),n;for(const e of pl(o.slice(10),a))n.push(e);return n}(i,s,t))c.push(e);return r.includes("\0")&&c.push({msgId:Bu,severity:il(Bu,t)}),c}(a,r);case"tag":return function(e,t){const a=gl.decode(e),n=a.indexOf("\n\n"),r=(-1!==n?a:a.slice(0,n)).split("\n"),{findings:i,nextIdx:o}=function(e,t){const a=[];if(!e[0]?.startsWith("object "))return{findings:[{msgId:qu,severity:il(qu,t)}],nextIdx:-1};var n;if(n=e[0].slice(7),yl.test(n)||vl.test(n)||a.push({msgId:Du,severity:il(Du,t)}),!e[1]?.startsWith("type "))return a.push({msgId:Xu,severity:il(Xu,t)}),{findings:a,nextIdx:-1};const r=e[1].slice(5);return""!==r&&bl.has(r)?{findings:a,nextIdx:2}:(a.push({msgId:Yu,severity:il(Yu,t)}),{findings:a,nextIdx:-1})}(r,t);return-1===o?i:[...i,...kl(r,o,t)]}(a,r);case"blob":return ul(a,r,i)}}const Rl=new Set([".gitmodules",".gitattributes"]);async function Sl(a,n,r,i){const o=[];let s=0;const c=await async function(a,n){const r=await t.looseCompressedBytes(a,n);if(void 0!==r){let n;try{n=await a.compressor.inflate(r)}catch{return{ok:!1,msgId:"unterminatedHeader"}}try{const{type:e,contentOffset:a}=t.parseHeader(n);return{ok:!0,kind:e,rawBody:n.subarray(a),hashBytes:n}}catch(t){return{ok:!1,msgId:(t instanceof e.TsgitError&&"INVALID_OBJECT_HEADER"===t.data.code?t.data.reason:"").startsWith("unknown object type")?"unknownType":"unterminatedHeader"}}}try{const e=await t.readObject(a,n,{verifyHash:!1}),r=t.serializeObject(e,a.hashConfig),{contentOffset:i}=t.parseHeader(r);return{ok:!0,kind:e.type,rawBody:r.subarray(i),hashBytes:r}}catch{return{ok:!1,msgId:"badType"}}}(a,n);if(!c.ok)return o.push({type:"bad-object",id:n,objectType:"unknown",msgId:c.msgId,severity:"error"}),{findings:o,exitBit:1};const{kind:d,rawBody:u,hashBytes:l}=c,f="blob"===d?i.get(n):void 0,h=Ol(void 0!==f?{rawBody:u,kind:d,strict:r,fileName:f}:{rawBody:u,kind:d,strict:r});for(const{msgId:e,severity:t}of h)o.push({type:"bad-object",id:n,objectType:d,msgId:e,severity:t}),"error"===t&&(s|=1);try{const e=await a.hash.hashHex(l);e!==n&&(o.push({type:"hash-mismatch",id:n,actual:e}),s|=1)}catch{}return{findings:o,exitBit:s}}function Dl(e,a){if("commit"===e.type){a.add(e.data.tree);for(const t of e.data.parents)a.add(t)}else if("tree"===e.type)for(const n of e.entries)n.mode!==t.FILE_MODE.GITLINK&&a.add(n.id);else"tag"===e.type&&a.add(e.data.object)}function Al(e,t){e.reached.has(t)||e.worklist.push(t)}function Cl(e,a,n){e.reached.add(a),"commit"===n.type&&function(e,t,a){const{tree:n,parents:r}=a.data;e.universe.has(n)?Al(e,n):(e.missingIds.add(n),e.brokenEdges.push({fromId:t,fromType:"commit",toId:n,toType:"tree"}));for(const a of r)e.universe.has(a)?Al(e,a):(e.missingIds.add(a),e.brokenEdges.push({fromId:t,fromType:"commit",toId:a,toType:"commit"}));0===r.length&&e.rootCommits.push(t)}(e,a,n),"tree"===n.type&&function(e,a,n){for(const r of n.entries){if(r.mode===t.FILE_MODE.GITLINK)continue;const n=r.mode===t.FILE_MODE.DIRECTORY?"tree":"blob";e.universe.has(r.id)?Al(e,r.id):(e.missingIds.add(r.id),e.brokenEdges.push({fromId:a,fromType:"tree",toId:r.id,toType:n}))}}(e,a,n),"tag"===n.type&&function(e,t,a){const{object:n,objectType:r,tagName:i}=a.data;e.universe.has(n)?(Al(e,n),e.tagRefs.push({tagId:t,tagName:i,targetId:n,targetType:r})):(e.missingIds.add(n),e.brokenEdges.push({fromId:t,fromType:"tag",toId:n,toType:r}))}(e,a,n)}function Ml(e,t,a,n){for(const r of e){const e=n.get(r);null!=e&&a.push({type:t,id:r,objectType:e.type})}}function Nl(e,t){const a=t.get(e);return null!=a?a.type:"unknown"}const Pl=/^[0-9a-f]{40}$|^[0-9a-f]{64}$/;function Ll(e,a,n,r){const i=a.replace(/[\r\n]+$/,"");if(i.startsWith("ref: "))return{findings:[],exitBit:0};if(!Pl.test(i)){const a=[];let n=2;return r&&(a.push({type:"bad-ref",ref:e,msgId:"badRefContent",severity:"error"}),n|=8),a.push({type:"bad-ref",ref:e,msgId:"badRefOid",severity:"error",target:t.ZERO_OID}),{findings:a,exitBit:n}}const o=i;return n.has(o)?{findings:[],exitBit:0}:{findings:[{type:"bad-ref",ref:e,msgId:"badRefOid",severity:"error",target:o}],exitBit:2}}function _l(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||95===e}function Hl(t,a){const n=a?.wholeWord??!1,r=a?.invert??!1,i=t.map(t=>{if(t instanceof RegExp){if(t.flags.includes("u"))throw e.invalidOption("pattern","unicode flag unsupported over byte content");const a=t.flags.replace("y","")+(t.flags.includes("g")?"":"g");return{type:"regex",clone:new RegExp(t.source,a)}}return{type:"fixed",needle:(new TextEncoder).encode(t.fixed)}});return{matchLine(e){const t=function(e){return 10===e[e.length-1]?e.subarray(0,e.length-1):e}(e),a=i.map(e=>{const a="regex"===e.type?function(e,t){const a=function(e){let t="";for(const a of e)t+=String.fromCharCode(a);return t}(e),n=[];t.lastIndex=0;let r=t.exec(a);for(;null!==r;)n.push({start:r.index,end:r.index+r[0].length}),0===r[0].length&&t.lastIndex++,r=t.exec(a);return n}(t,e.clone):function(e,t){if(0===t.length)return[];const a=[];let n=0;e:for(;n<=e.length-t.length;){for(let a=0;a<t.length;a++)if(e[n+a]!==t[a]){n++;continue e}a.push({start:n,end:n+t.length}),n+=t.length}return a}(t,e.needle);return n?function(e,t){return e.filter(e=>{const a=t[e.start-1],n=t[e.end],r=0===e.start||void 0===a||!_l(a),i=e.end>=t.length||void 0===n||!_l(n);return r&&i})}(a,t):a}),o=function(e){const t=new Set,a=[];for(const n of e)for(const e of n){const n=`${e.start}:${e.end}`;t.has(n)||(t.add(n),a.push(e))}return a.sort((e,t)=>e.start-t.start||e.end-t.end)}(a);return r?{returned:0===o.length,spans:[]}:{returned:o.length>0,spans:o}}}}const jl=e=>e===t.FILE_MODE.REGULAR||e===t.FILE_MODE.EXECUTABLE;const Ul=async(e,a,n={})=>{const r=await Bl(e,a,n);return"fast-forward"!==r.kind&&"merge"!==r.kind||await t.runInformationalHook(e,"post-merge",{args:["0"]}),r},Bl=async(a,n,r)=>{await vn(a),await bn(a,"merge"),await En(a);const i=await kn(a);if("symbolic"!==i.kind)throw e.unsupportedOperation("merge","cannot merge with detached HEAD");const o=await t.resolveRef(a,i.target),s=await zr(a,n.rev);if(o===s)return{kind:"up-to-date",id:o};const[c]=await t.mergeBase(a,[o,s]);if(c===s)return{kind:"up-to-date",id:o};if(c===o&&"never"!==n.fastForward)return ql(a,await ff(a,s),async()=>(await t.updateRef(a,i.target,s,{expected:o,reflogMessage:`${r.reflogAction??`merge ${n.rev}`}: Fast-forward`}),{kind:"fast-forward",id:s,branch:i.target}));if("only"===n.fastForward)throw e.nonFastForward(i.target,o,s);return zl(a,n,r,i.target,o,s,c)},Wl="merge:write-files",Fl=new Set(["rename-rename","gitlink"]),zl=async(e,t,a,n,r,i,o)=>{e.progress.start(Wl);try{const s=await Vl(e,r,i,o,t.rev);return"conflict"===s.kind?Yl(e,t,s,r,i):Gl(e,t,a,n,r,i,s.tree)}finally{e.progress.end(Wl)}},ql=async(a,n,r)=>{const i=await t.acquireIndexLock(a);try{const o=await(async(a,n)=>{const r=await t.readIndex(a);try{return(await t.materializeTree(a,{targetTree:n,currentIndex:r,force:!1})).newIndexEntries}catch(t){throw(t=>t instanceof e.TsgitError&&"CHECKOUT_OVERWRITE_DIRTY"===t.data.code?e.workingTreeDirty({localChanges:t.data.localChanges,untracked:t.data.untracked}):t)(t)}})(a,n);return await i.commit(o),await r()}finally{await i.release()}},Gl=async(e,a,n,r,i,o,s)=>{const c=await uf(e,a),d=lf(a,c),u=Bo(a.message??`Merge ${a.rev}`,{allowEmpty:!1}),l={tree:s,parents:[i,o],author:c,committer:d,message:u,extraHeaders:[]};return ql(e,s,async()=>{const s=await t.createCommit(e,l);return await t.updateRef(e,r,s,{expected:i,reflogMessage:`${n.reflogAction??`merge ${a.rev}`}: Merge made by the 'tsgit' strategy.`}),{kind:"merge",id:s,branch:r,parents:[i,o]}})},Vl=async(e,a,n,r,i)=>{const o=await ff(e,a),s=await ff(e,n),c=void 0!==r?await ff(e,r):void 0,[d,u,l]=await Promise.all([t.flattenTree(e,o),t.flattenTree(e,s),void 0!==c?t.flattenTree(e,c):Promise.resolve(void 0)]),f=((e,t)=>({ours:te,theirs:e,base:void 0!==t?ae(t):""}))(i,r),h=no(e,f),m=await Ce(l,d,u,h,f);return m.cleanMerge?{kind:"clean",tree:await Kl(e,m.outcomes)}:{kind:"conflict",outcomes:m.outcomes,conflicts:m.conflicts,ours:d.entries}},Kl=async(e,a)=>{const n=await(async(e,a)=>{const n=[];for(const r of a)if("resolved-deleted"!==r.status&&"conflict"!==r.status){if("resolved-merged"===r.status){const a=await t.writeObject(e,{type:"blob",content:r.bytes,id:""});n.push({path:r.path,id:a,mode:r.mode});continue}n.push({path:r.path,id:r.id,mode:r.mode})}return n})(e,a);return Xl(e,n)},Xl=async(e,a,n=0)=>{if(n>4096)throw t.treeDepthExceeded(n);const{files:r,subdirs:i}=(e=>{const t=[],a=new Map;for(const n of e){const e=n.path.indexOf("/");if(-1===e){t.push(n);continue}const r=n.path.slice(0,e),i={path:n.path.slice(e+1),id:n.id,mode:n.mode},o=a.get(r);void 0===o?a.set(r,[i]):o.push(i)}return{files:t,subdirs:a}})(a),o=await Promise.all(Array.from(i,async([a,r])=>({name:a,id:await Xl(e,r,n+1),mode:t.FILE_MODE.DIRECTORY}))),s=r.map(e=>({name:e.path,id:e.id,mode:e.mode}));return t.writeTree(e,[...s,...o])},Yl=async(a,n,r,i,o)=>{Zl(r.conflicts);const s=await t.readIndex(a),c=io(r.outcomes,r.conflicts,r.ours),{localChanges:d,untracked:u}=await so(a,c,s);if(d.length>0||u.length>0)throw e.workingTreeDirty({localChanges:d,untracked:u});const l=await t.loadSparseMatcher(a),f=await t.acquireIndexLock(a);try{await Ql(a,r.outcomes,r.conflicts,c,l),await ln(a,i),await(async(e,t)=>{await e.fs.writeUtf8(sn(e),`${t}\n`)})(a,o);const e=Bo(n.message??`Merge ${n.rev}`,{allowEmpty:!1});await un(a,e);const t=df(r.outcomes,r.conflicts,l);await f.commit(t)}finally{await f.release()}return{kind:"conflict",conflicts:r.conflicts.map(e=>({path:e.path,type:e.type})),mergeHead:o,origHead:i}},Zl=t=>{for(const a of t)if(Fl.has(a.type))throw e.unsupportedOperation("merge",`conflict type '${a.type}' not supported in v1 (path=${a.path})`)},Jl=(e,t)=>void 0!==e&&!e(t),Ql=async(e,t,a,n,r)=>{const i=t.filter(e=>"conflict"!==e.status&&n.has(e.path));await ef(i,32,t=>tf(e,t,r)),await ef(a,32,t=>af(e,t))},ef=async(e,a,n)=>{await t.boundedMap(e,a,n)},tf=async(e,a,n)=>{if("unchanged"===a.status||"resolved-known"===a.status){if(Jl(n,a.path))return;const r=await t.streamBlob(e,a.id);return void await t.writeWorkingTreeFileStream(e,a.path,r)}"resolved-merged"!==a.status?"resolved-deleted"===a.status&&await t.removeWorkingTreeFile(e,a.path):await t.writeWorkingTreeFile(e,a.path,a.bytes)},af=async(e,a)=>{if("distinct-types"===a.type)return void await lo(e,a);const n=a.mergedMode??a.ourMode??a.theirMode;if(void 0===n)return;const r=await sf(e,a);void 0!==r&&await t.writeWorkingTreeEntry(e,a.path,r,n)},nf={maxBytes:Y},rf=(e,a)=>{if(void 0!==a.ourId)return t.readBlob(e,a.ourId,nf).then(e=>e.content)},of=async(e,t)=>void 0!==t.conflictContent?t.conflictContent:rf(e,t),sf=async(e,a)=>{if("content"===a.type)return of(e,a);if("add-add"===a.type)return of(e,a);if("binary"===a.type)return rf(e,a);if("type-change"===a.type)return rf(e,a);if("modify-delete"===a.type){const n=a.ourId??a.theirId;if(void 0===n)return;return(await t.readBlob(e,n,nf)).content}},cf=e=>({ctimeSeconds:0,ctimeNanoseconds:0,mtimeSeconds:0,mtimeNanoseconds:0,dev:0,ino:0,mode:e,uid:0,gid:0,fileSize:0}),df=(e,a,n)=>{const r=[];for(const a of e)"unchanged"!==a.status&&"resolved-known"!==a.status||r.push(Jl(n,a.path)?t.skipWorktreeEntry({path:a.path,id:a.id,mode:a.mode}):{...cf(a.mode),id:a.id,flags:t.STAGE0_FLAGS,path:a.path});const i=g(a,cf),o=[...r,...i];return o.sort((e,t)=>e.path<t.path?-1:e.path>t.path?1:e.flags.stage-t.flags.stage),o},uf=async(e,a)=>{const n=await t.readConfig(e),r=void 0!==n.user?.name&&void 0!==n.user?.email?{name:n.user.name,email:n.user.email,timestamp:Math.floor(Date.now()/1e3),timezoneOffset:"+0000"}:void 0,i={};return void 0!==a.author&&(i.explicit=a.author),void 0!==r&&(i.configUser=r),jo(i)},lf=(e,t)=>{const a={author:t};return void 0!==e.committer&&(a.explicit=e.committer),Uo(a)},ff=async(e,a)=>{const n=await t.readObject(e,a);if("commit"!==n.type)throw t.unexpectedObjectType("commit",n.type,a);return n.data.tree},hf=async(e,a,n,r,i=0)=>{const o=t.nibbleAt(a,i),s=e.slots[o];return"subtree"===s.kind?(async(e,a,n,r,i,o,s)=>{if(!r.startsWith(n.prefix)){const o=t.placeLeaf(t.placeLeaf(t.createEmptyTrie(),n,s+1),{kind:"note",key:r,val:i},s+1);return t.setSlot(e,a,t.internalSlot(o))}const c=t.setSlot(e,a,t.chainGap(await t.unpackSubtree(n,o),n.prefix,s));return hf(c,r,i,o,s)})(e,o,s,a,n,r,i):"internal"===s.kind?t.setSlot(e,o,t.internalSlot(await hf(s.node,a,n,r,i+1))):t.placeLeaf(e,{kind:"note",key:a,val:n},i)},mf=async(e,a,n,r=0)=>{const i=t.nibbleAt(a,r),o=e.slots[i];if("empty"!==o.kind){if("note"===o.kind)return o.key===a?o.val:void 0;if("internal"===o.kind)return mf(o.node,a,n,r+1);if(a.startsWith(o.prefix))return mf(await t.unpackSubtree(o,n),a,n,o.prefix.length)}},wf=async(e,a,n,r=0)=>{const i=t.nibbleAt(a,r),o=e.slots[i];if("empty"===o.kind)return e;if("note"===o.kind)return o.key===a?t.setSlot(e,i,t.EMPTY_SLOT):e;if("internal"===o.kind)return t.setSlot(e,i,(e=>{if(e.preserved.length>0)return t.internalSlot(e);const a=e.slots.filter(e=>"empty"!==e.kind);if(0===a.length)return t.EMPTY_SLOT;const n=a[0];return 1===a.length&&"internal"!==n.kind?n:t.internalSlot(e)})(await wf(o.node,a,n,r+1)));if(!a.startsWith(o.prefix))return e;const s=t.setSlot(e,i,t.chainGap(await t.unpackSubtree(o,n),o.prefix,r));return wf(s,a,n,r)},pf=/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/,gf=/^[0-9a-f]{40}$/,yf=async(e,a)=>gf.test(a)?a:t.resolveRef(e,a),vf=async(a,n)=>{await vn(a);const r=await yf(a,n.object),i=await t.resolveNotesRef(a,n.ref),{trie:o,read:s,notesCommitOid:c}=await t.loadNotesTree(a,i);if(void 0!==await mf(o,r,s)&&!0!==n.force)throw e.notesAlreadyExist(r);const d=await t.writeObject(a,{type:"blob",id:"",content:n.content}),u=await hf(o,r,d,s),l=await Fo(a),f=await t.writeNotesTree(a,{trie:u,read:s,prevCommitOid:c,message:"Notes added by 'git notes add'\n",author:l});return await t.updateRef(a,i,f,{reflogMessage:"notes: Notes added by 'git notes add'"}),{notesCommit:f,note:d}},bf=async(e,a)=>{await vn(e);const n=await yf(e,a.object),r=await t.resolveNotesRef(e,a.ref),{trie:i,read:o}=await t.loadNotesTree(e,r),s=await mf(i,n,o);return void 0===s?null:{object:n,note:s,content:(await t.readBlob(e,s)).content}},kf=async(e,a)=>{await vn(e);const n=await t.resolveNotesRef(e,a?.ref),{notesTreeOid:r}=await t.loadNotesTree(e,n);if(void 0===r)return[];const i=[];for await(const a of t.walkTree(e,r)){if(a.mode!==t.FILE_MODE.REGULAR)continue;const e=a.path.split("/").join("");pf.test(e)&&i.push({object:t.ObjectId.from(e),note:a.id})}return i.sort((e,t)=>e.object<t.object?-1:1)},xf=async(a,n)=>{await vn(a);const r=await yf(a,n.object),i=await t.resolveNotesRef(a,n.ref),{trie:o,read:s,notesCommitOid:c}=await t.loadNotesTree(a,i);if(void 0===c)throw e.notesObjectHasNone(r);if(void 0===await mf(o,r,s))throw e.notesObjectHasNone(r);const d=await wf(o,r,s),u=await Fo(a),l=await t.writeNotesTree(a,{trie:d,read:s,prevCommitOid:c,message:"Notes removed by 'git notes remove'\n",author:u});return await t.updateRef(a,i,l,{reflogMessage:"notes: Notes removed by 'git notes remove'"}),{notesCommit:l}},If=e=>`'${e.replaceAll("'","'\\''")}'`,Ef=(e,a)=>{const n=`${a}=`,r=e.find(e=>e.startsWith(n));if(void 0===r)throw t.invalidIdentity(a,"missing author-script key");const i=r.slice(n.length);if(i.length<2||!i.startsWith("'")||!i.endsWith("'"))throw t.invalidIdentity(r,"author-script value is not single-quoted");return(e=>e.slice(1,-1).replaceAll("'\\''","'"))(i)},Tf=e=>e.replace(/\n+$/,""),$f=(e,t)=>{return 0===t?`# This is the 1st commit message:\n\n${Tf(e.message)}\n`:!0===e.skip?`\n# The commit message #${t+1} will be skipped:\n\n${a=e.message,Tf(a).split("\n").map(e=>""===e?"#":`# ${e}`).join("\n")}\n`:`\n# This is the commit message #${t+1}:\n\n${Tf(e.message)}\n`;var a},Of=e=>{const t=e.length;let a=`# This is a combination of ${t} ${1===t?"commit":"commits"}.\n`;for(let n=0;n<t;n+=1)a+=$f(e[n],n);return a},Rf=/^(pick|reword|edit|squash|fixup|drop) (\S+) # (.*)$/,Sf=e=>e.map(e=>`${e.action} ${e.oid} # ${e.subject}\n`).join(""),Df=t=>{const a=[];for(const n of t.split("\n")){if(""===n||n.startsWith("#"))continue;const t=Rf.exec(n);if(null===t)throw e.invalidSequencerTodo(n);a.push({action:t[1],oid:t[2],subject:t[3]})}return a},Af=new TextEncoder,Cf=new Uint8Array,Mf=async(e,a)=>{const n=await t.readObject(e,a);if("commit"!==n.type)throw t.unexpectedObjectType("commit",n.type,a);return n.data},Nf=async(e,a)=>{const n=await Mf(e,a),r=n.parents[0],i=void 0!==r?(await Mf(e,r)).tree:void 0,o=await t.diffTrees(e,i,n.tree,{recursive:!0}),s=await t.materialisePatchFiles(e,o.changes),c=q(s,{contextLines:3,pathPrefix:{old:"a/",new:"b/"}}),d=s.filter(e=>t.isBinary(e.oldContent??Cf)||t.isBinary(e.newContent??Cf)).map(e=>{return`${"oldId"in(t=e.change)?t.oldId:""}${"newId"in t&&void 0!==t.newId?t.newId:""}`;var t}).join("");return e.hash.hashHex(Af.encode(c.split("\n").filter(e=>!e.startsWith("@@ ")&&!e.startsWith("index ")).map(e=>e.replace(/\s/g,"")).join("")+d))},Pf=e=>`${e.layout.gitDir}/rebase-merge`,Lf=(e,t)=>`${Pf(e)}/${t}`,_f=e=>`${e.layout.gitDir}/REBASE_HEAD`,Hf=e=>e.map(([e,t])=>`${e} ${t}\n`).join(""),jf=async(e,t)=>{const a=[...t.done,...t.remaining],n=(t,a)=>e.fs.writeUtf8(Lf(e,t),a);var r;await n("head-name",`${t.headName}\n`),await n("onto",`${t.onto}\n`),await n("orig-head",`${t.origHead}\n`),await n("git-rebase-todo",Sf(t.remaining)),void 0!==t.backupHeader&&await n("git-rebase-todo.backup",((e,t)=>{const a=e.length,n=`# Rebase ${t.shortUpstream}..${t.shortOrigHead} onto ${t.shortOnto} (${a} ${1===a?"command":"commands"})\n`;return`${Sf(e)}\n${n}#\n# Commands:\n# p, pick <commit> = use commit\n# r, reword <commit> = use commit, but edit the commit message\n# e, edit <commit> = use commit, but stop for amending\n# s, squash <commit> = use commit, but meld into previous commit\n# f, fixup [-C | -c] <commit> = like "squash" but keep only the previous\n# commit's log message, unless -C is used, in which case\n# keep only this commit's message; -c is same as -C but\n# opens the editor\n# x, exec <command> = run command (the rest of the line) using shell\n# b, break = stop here (continue rebase later with 'git rebase --continue')\n# d, drop <commit> = remove commit\n# l, label <label> = label current HEAD with a name\n# t, reset <label> = reset HEAD to a label\n# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n# create a merge commit using the original merge commit's\n# message (or the oneline, if no original merge commit was\n# specified); use -c <commit> to reword the commit message\n# u, update-ref <ref> = track a placeholder for the <ref> to be updated\n# to this position in the new commits. The <ref> is\n# updated at the end of the rebase\n#\n# These lines can be re-ordered; they are executed from top to bottom.\n#\n# If you remove a line here THAT COMMIT WILL BE LOST.\n#\n# However, if you remove everything, the rebase will be aborted.\n#\n`})(a,t.backupHeader)),await n("done",Sf(t.done)),await n("message",t.message),await n("author-script",(r=t.stoppedAuthor,`GIT_AUTHOR_NAME=${If(r.name)}\nGIT_AUTHOR_EMAIL=${If(r.email)}\nGIT_AUTHOR_DATE=${If(`@${r.timestamp} ${r.timezoneOffset}`)}\n`)),await n("end",`${a.length}\n`),await n("msgnum",`${t.done.length}\n`),await n("interactive",""),await n("rewritten-list",Hf(t.rewritten)),await n("patch",t.patch),await n("drop_redundant_commits",""),await n("no-reschedule-failed-exec",""),await n("stopped-sha",`${t.stoppedSha}\n`),void 0!==t.amend&&await n("amend",`${t.amend}\n`),void 0!==t.currentFixups&&await n("current-fixups",t.currentFixups.map(e=>`${e.action} ${e.oid}\n`).join("")),void 0!==t.rewrittenPending&&await n("rewritten-pending",t.rewrittenPending.map(e=>`${e}\n`).join("")),void 0!==t.messageSquash&&await n("message-squash",t.messageSquash),await e.fs.writeUtf8(_f(e),`${t.stoppedSha}\n`)},Uf=e=>yo(e,_f(e)),Bf=async(t,a)=>{const n=[];for(const r of a){const a=await ur(t,r.oid);if(void 0===a)throw e.invalidSequencerTodo(`cannot resolve commit ${r.oid}`);n.push({action:r.action,oid:a,subject:r.subject})}return n},Wf=async e=>{if(!await(e=>e.fs.exists(Pf(e)))(e))return;const a=(await e.fs.readUtf8(Lf(e,"head-name"))).trimEnd(),n=await yo(e,Lf(e,"onto")),r=await yo(e,Lf(e,"orig-head")),i=await Bf(e,Df(await e.fs.readUtf8(Lf(e,"done")))),o=await Bf(e,Df(await e.fs.readUtf8(Lf(e,"git-rebase-todo")))),s=(e=>{const a=e.split("\n"),n=Ef(a,"GIT_AUTHOR_NAME"),r=Ef(a,"GIT_AUTHOR_EMAIL"),i=Ef(a,"GIT_AUTHOR_DATE");if(!i.startsWith("@"))throw t.invalidIdentity(i,"author-script date lacks the `@` prefix");const[o,s]=i.slice(1).split(" "),c=Number(o);if(!Number.isSafeInteger(c))throw t.invalidIdentity(i,"invalid author-script timestamp");if(void 0===s||!/^[+-]\d{4}$/.test(s))throw t.invalidIdentity(i,"invalid author-script timezone offset");return{name:n,email:r,timestamp:c,timezoneOffset:s}})(await e.fs.readUtf8(Lf(e,"author-script"))),c=await e.fs.readUtf8(Lf(e,"message")),d=await yo(e,Lf(e,"amend")),u=await Ff(e),l=await zf(e);return{headName:a,onto:n,origHead:r,done:i,remaining:o,stoppedSha:await Uf(e),author:s,message:c,...void 0!==d?{amend:d}:{},...void 0!==u?{currentFixups:u}:{},...void 0!==l?{rewrittenPending:l}:{}}},Ff=async e=>{const t=Lf(e,"current-fixups");if(!await e.fs.exists(t))return;const a=[];for(const n of(await e.fs.readUtf8(t)).split("\n")){const[e,t]=n.split(" ");"squash"!==e&&"fixup"!==e||void 0===t||a.push({action:e,oid:t})}return a},zf=async e=>{const t=Lf(e,"rewritten-pending");if(!await e.fs.exists(t))return;const a=[];for(const n of(await e.fs.readUtf8(t)).split("\n"))""!==n&&a.push(n);return a},qf=async e=>{const t=Lf(e,"rewritten-list");if(!await e.fs.exists(t))return[];const a=[];for(const n of(await e.fs.readUtf8(t)).split("\n")){const[e,t]=n.split(" ");void 0!==e&&void 0!==t&&a.push([e,t])}return a},Gf=async e=>{await e.fs.exists(Pf(e))&&await e.fs.rmRecursive(Pf(e)),await e.fs.exists(_f(e))&&await e.fs.rm(_f(e))},Vf="HEAD",Kf=e=>e.slice(0,7),Xf=async(e,a,n)=>{const r=new Set;if(void 0!==a)for await(const n of t.walkCommits(e,{from:[a]}))r.add(n.id);const i=[];for await(const a of t.walkCommits(e,{from:[n],until:[...r]}))i.push(a.id);return i.reverse()},Yf=async(a,n,r,i)=>{const o=r.parents[0],c=void 0!==o?await Gr(a,o):void 0,d=await Gr(a,i),u=await t.acquireIndexLock(a);try{const i=await t.readIndex(a),o=await po(a,{baseTree:c,oursTree:d,theirsTree:r.tree,currentIndex:i,labels:ie(n,s(r.message))});if("would-overwrite"===o.kind)throw e.workingTreeDirty({localChanges:o.localChanges,untracked:o.untracked});return"conflict"===o.kind?(await u.commit(o.indexEntries),{kind:"conflict",conflicts:o.conflicts}):(await u.commit(o.result.newIndexEntries),{kind:"clean",mergedTree:o.mergedTree,oursTree:d})}finally{await u.release()}},Zf=async(e,a,n,r)=>{const i=await Yf(e,a,n,r);if("conflict"===i.kind)return{kind:"conflict",conflicts:i.conflicts};if(i.mergedTree===i.oursTree)return{kind:"empty"};const o=await Fo(e),c=await t.createCommit(e,{tree:i.mergedTree,parents:[r],author:n.author,committer:o,message:n.message,extraHeaders:[]});return await t.updateRef(e,Vf,c,{expected:r,reflogMessage:za(s(n.message))}),{kind:"committed",id:c}},Jf=async(e,a)=>{const n=a.parents[0],r=void 0!==n?await Gr(e,n):void 0,i=await t.diffTrees(e,r,a.tree,{recursive:!0});return q(await t.materialisePatchFiles(e,i.changes),{contextLines:3,pathPrefix:{old:"a/",new:"b/"}})},Qf=async(e,t,a,n,r,i)=>{const o={headName:t.branch??"detached HEAD",onto:t.onto,origHead:t.origHead,done:[...t.doneBefore,...t.todo.slice(0,a+1)],remaining:t.todo.slice(a+1),stoppedSha:t.todo[a].oid,stoppedAuthor:n.author,message:Po(n.message,w(r)),rewritten:i,patch:await Jf(e,n),...void 0!==t.backupHeader?{backupHeader:t.backupHeader}:{}};await jf(e,o)},eh=async(e,a,n,r,i)=>{void 0!==a&&(await t.updateRef(e,a,r,{expected:n,reflogMessage:Va(a,i)}),await li(e,Vf,a),await t.recordRefUpdate(e,Vf,r,r,(e=>`rebase (finish): returning to ${e}`)(a)))},th=(e,a)=>t.runHook(e,"pre-rebase",{args:[a]}),ah=async(e,a)=>{0!==a.length&&await t.runInformationalHook(e,"post-rewrite",{args:["rebase"],stdin:Hf(a)})},nh=async(e,t,a,n)=>{let r=a;const i=[...n.applied],o=[...n.rewritten];for(let a=0;a<t.todo.length;a+=1){const n=t.todo[a].oid,s=await qr(e,n),c=await Zf(e,n,s,r);if("committed"!==c.kind){if("empty"!==c.kind)return await Qf(e,t,a,s,c.conflicts,o),{kind:"conflict",commit:n,conflicts:c.conflicts.map(e=>({path:e.path,type:e.type})),remaining:t.todo.length-(a+1)}}else i.push({source:n,created:c.id}),o.push([n,c.id]),r=c.id}return await eh(e,t.branch,t.origHead,r,t.onto),await ah(e,o),await Gf(e),{kind:"rebased",commits:i}},rh=async(a,n)=>{await vn(a),await bn(a,"rebase"),await En(a);const r=await kn(a),i="symbolic"===r.kind?await(async(a,n)=>{try{return await t.resolveRef(a,n)}catch(t){if(t instanceof e.TsgitError&&"REF_NOT_FOUND"===t.data.code)throw e.noInitialCommit();throw t}})(a,r.target):r.id,o=xn(r),c=await zr(a,n.upstream),d=void 0!==n.onto?await zr(a,n.onto):c,u=n.onto??n.upstream;await Ho(a,await Gr(a,i));const[l]=await t.mergeBase(a,[c,i]);if(void 0!==n.interactive)return await th(a,n.upstream),yh(a,{instructions:n.interactive,branch:o,headCommit:i,upstream:c,onto:d,ontoName:u,base:l});if(d===l)return{kind:"up-to-date"};await th(a,n.upstream);const f=await Xf(a,l,i),h=await(async(e,t,a,n)=>{const r=await Xf(e,a,n),i=new Set;for(const t of r)i.add(await Nf(e,t));const o=[];for(const a of t)i.has(await Nf(e,a))||o.push(a);return o})(a,f,l,c),m=await(async(e,t)=>{const a=[];for(const n of t)a.push({action:"pick",oid:n,subject:s((await qr(e,n)).message)});return a})(a,h);await ln(a,i),await(async(e,a,n,r)=>{await t.getRefStore(e).writeLoose(Vf,n),await t.recordRefUpdate(e,Vf,a,n,Fa(r)),await On(e,n)})(a,i,d,u);const w={branch:o,onto:d,origHead:i,doneBefore:[],todo:m,backupHeader:{shortUpstream:Kf(c),shortOrigHead:Kf(i),shortOnto:Kf(d)}};return nh(a,w,d,{applied:[],rewritten:[]})},ih=e=>"detached HEAD"===e?void 0:e,oh=t=>{const a=new Set;for(const e of t)0!==e.flags.stage&&a.add(e.path);if(a.size>0)throw e.mergeHasConflicts(a.size,[...a])},sh=async a=>{await vn(a),await bn(a,"rebase --continue");const n=await Wf(a);if(void 0===n)throw e.noOperationInProgress("rebase");if(vh(n))return bh(a,n);const r=await t.readIndex(a);oh(r.entries);const i=n.done[n.done.length-1],o=await t.resolveRef(a,Vf),c=await t.synthesizeTreeFromIndex(a,r.entries),d=await Fo(a),u=Bo(Wo(n.message),{allowEmpty:!1}),l=await t.createCommit(a,{tree:c,parents:[o],author:n.author,committer:d,message:u,extraHeaders:[]});await t.updateRef(a,Vf,l,{expected:o,reflogMessage:Ga(s(u))});const f=[...await qf(a),[i.oid,l]],h={branch:ih(n.headName),onto:n.onto,origHead:n.origHead,doneBefore:n.done,todo:n.remaining};return nh(a,h,l,{applied:[{source:i.oid,created:l}],rewritten:f})},ch=async a=>{await vn(a),await bn(a,"rebase --skip");const n=await Wf(a);if(void 0===n)throw e.noOperationInProgress("rebase");if(vh(n))return kh(a,n);const r=await t.resolveRef(a,Vf);await On(a,r);const i={branch:ih(n.headName),onto:n.onto,origHead:n.origHead,doneBefore:n.done,todo:n.remaining};return nh(a,i,r,{applied:[],rewritten:await qf(a)})},dh=async a=>{await vn(a),await bn(a,"rebase --abort");const n=await Wf(a);if(void 0===n)throw e.noOperationInProgress("rebase");const r=ih(n.headName),i=await t.resolveRef(a,Vf);return await On(a,n.origHead),void 0!==r?(await li(a,Vf,r),await t.recordRefUpdate(a,Vf,i,n.origHead,Ka(r))):(await t.getRefStore(a).writeLoose(Vf,n.origHead),await t.recordRefUpdate(a,Vf,i,n.origHead,Ka(n.origHead))),await Gf(a),{head:n.origHead,headName:n.headName}},uh=async(e,a)=>{const n=await Fo(e),r=await t.createCommit(e,{tree:a.tree,parents:[a.parent],author:a.author,committer:n,message:a.message,extraHeaders:[]});return await t.updateRef(e,Vf,r,{expected:a.expected,reflogMessage:a.reflog}),r},lh=async(e,a,n,r,i)=>{if(n.parents[0]===r)return await(async(e,a)=>{const n=await t.resolveRef(e,Vf);await t.getRefStore(e).writeLoose(Vf,a),await t.recordRefUpdate(e,Vf,n,a,"rebase: fast-forward"),await On(e,a)})(e,a.oid),{kind:"committed",created:a.oid};const o=await Yf(e,a.oid,n,r);return"conflict"===o.kind?{kind:"conflict",conflicts:o.conflicts}:{kind:"committed",created:await uh(e,{tree:o.mergedTree,parent:r,expected:r,author:n.author,message:n.message,reflog:i})}},fh=(e,t,a,n)=>"reword"===t.action?(async(e,t,a,n)=>{const r=Bo(t.message??a.message,{allowEmpty:!1}),i=await lh(e,t,a,n,qa(s(a.message)));if("conflict"===i.kind)return{kind:"conflict",conflicts:i.conflicts};const o=await qr(e,i.created);return{kind:"advanced",created:await uh(e,{tree:o.tree,parent:o.parents[0],expected:i.created,author:o.author,message:r,reflog:qa(s(r))})}})(e,t,a,n):"edit"===t.action?(async(e,t,a,n)=>{const r=await lh(e,t,a,n,(i=s(a.message),`rebase (edit): ${i}`));var i;return"conflict"===r.kind?{kind:"conflict",conflicts:r.conflicts}:{kind:"edit-stop",created:r.created}})(e,t,a,n):(async(e,t,a,n)=>{const r=await lh(e,t,a,n,za(s(a.message)));return"conflict"===r.kind?{kind:"conflict",conflicts:r.conflicts}:{kind:"advanced",created:r.created}})(e,t,a,n),hh=async(e,t,a,n)=>{await jf(e,{headName:t.branch??"detached HEAD",onto:t.onto,origHead:t.origHead,done:[...t.doneBefore,...t.todo.slice(0,a+1)],remaining:t.todo.slice(a+1),stoppedSha:n.stoppedSha,stoppedAuthor:n.author,message:n.message,rewritten:n.rewritten,patch:n.patch,...void 0!==t.backupHeader?{backupHeader:t.backupHeader}:{},...void 0!==n.amend?{amend:n.amend}:{},...void 0!==n.currentFixups?{currentFixups:n.currentFixups}:{},...void 0!==n.rewrittenPending?{rewrittenPending:n.rewrittenPending}:{},...void 0!==n.messageSquash?{messageSquash:n.messageSquash}:{}})},mh=(e,t)=>{const a=e[t+1];return void 0!==a&&("squash"===a.action||"fixup"===a.action)},wh=(e,t,a)=>({kind:"conflict",commit:e,conflicts:t.map(e=>({path:e.path,type:e.type})),remaining:a}),ph=async(e,t,a,n,r,i)=>{const o=await qr(e,n),c=await Yf(e,t.oid,a,n);if("conflict"===c.kind)return{kind:"conflict",conflicts:c.conflicts};r.members.push({message:a.message,skip:"fixup"===t.action}),r.fixups.push({action:t.action,oid:t.oid}),r.pending.push(t.oid),"squash"===t.action&&void 0!==t.message&&(r.inline=t.message);const d=Of([{message:r.baseMessage},...r.members]),u=i?Bo(r.inline??Wo(d),{allowEmpty:!1}):d;var l,f;return{kind:"committed",created:await uh(e,{tree:c.mergedTree,parent:o.parents[0],expected:n,author:o.author,message:u,reflog:(l=t.action,f=s(u),`rebase (${l}): ${f}`)}),message:u}},gh=async(e,t,a,n)=>{let r=a;const i=[...n.applied],o=[...n.rewritten],s={baseMessage:(await qr(e,a)).message,members:[],fixups:[],pending:[a],inline:void 0};for(let a=0;a<t.todo.length;a+=1){const n=t.todo[a];if("drop"===n.action)continue;const c=await qr(e,n.oid),d=await Jf(e,c);if("squash"===n.action||"fixup"===n.action){const u=await ph(e,n,c,r,s,!mh(t.todo,a));if("conflict"===u.kind){const r=Of([{message:s.baseMessage},...s.members,{message:c.message,skip:"fixup"===n.action}]);return await hh(e,t,a,{stoppedSha:n.oid,author:c.author,message:Po(r,w(u.conflicts)),patch:d,rewritten:o,currentFixups:[...s.fixups,{action:n.action,oid:n.oid}],rewrittenPending:[...s.pending],messageSquash:r}),wh(n.oid,u.conflicts,t.todo.length-(a+1))}i.push({source:n.oid,created:u.created}),o.push([n.oid,u.created]),r=u.created;continue}const u=await fh(e,n,c,r);if("conflict"===u.kind)return await hh(e,t,a,{stoppedSha:n.oid,author:c.author,message:Po(c.message,w(u.conflicts)),patch:d,rewritten:o}),wh(n.oid,u.conflicts,t.todo.length-(a+1));if("edit-stop"===u.kind)return await hh(e,t,a,{stoppedSha:u.created,author:c.author,message:c.message,patch:d,rewritten:o,amend:u.created}),{kind:"stopped",commit:n.oid,remaining:t.todo.length-(a+1)};i.push({source:n.oid,created:u.created}),o.push([n.oid,u.created]),r=u.created,s.baseMessage=(await qr(e,u.created)).message,s.members=[],s.fixups=[],s.pending=[u.created],s.inline=void 0}return await eh(e,t.branch,t.origHead,r,t.onto),await ah(e,o),await Gf(e),{kind:"rebased",commits:i}},yh=async(a,n)=>{const r=await(async(t,a,n,r)=>{if(a.every(e=>"drop"===e.action))throw e.invalidOption("interactive","nothing to do (every instruction drops a commit)");const i=a.find(e=>"drop"!==e.action);if("squash"===i?.action||"fixup"===i?.action)throw e.invalidOption("interactive",`cannot '${i.action}' without a previous commit`);const o=new Set(await Xf(t,n,r)),c=[];for(const n of a){if("reword"===n.action&&void 0===n.message)throw e.invalidOption("interactive","reword requires a message (no editor in a library)");if(("reword"===n.action||"squash"===n.action)&&void 0!==n.message&&""===Bo(n.message,{allowEmpty:!0}))throw e.invalidOption("interactive",`${n.action} message must not be empty`);const a=await zr(t,n.oid);if(!o.has(a))throw e.invalidOption("interactive",`commit ${a} is not in the list of commits to be rebased`);const r=s((await qr(t,a)).message);c.push({action:n.action,oid:a,subject:r,...void 0!==n.message?{message:n.message}:{}})}return c})(a,n.instructions,n.base,n.headCommit),i=await(async(e,t,a)=>{let n=a,r=0;for(;r<t.length&&"pick"===t[r].action&&(await qr(e,t[r].oid)).parents[0]===n;)n=t[r].oid,r+=1;return r})(a,r,n.onto),o=i>0?r[i-1].oid:n.onto;await ln(a,n.headCommit),await(async(e,a,n,r)=>{await t.getRefStore(e).writeLoose(Vf,r),await t.recordRefUpdate(e,Vf,a,r,Fa(n)),await On(e,r)})(a,n.headCommit,n.ontoName,o);const c=r.slice(0,i),d={branch:n.branch,onto:n.onto,origHead:n.headCommit,doneBefore:c,todo:r.slice(i),backupHeader:{shortUpstream:Kf(n.upstream),shortOrigHead:Kf(n.headCommit),shortOnto:Kf(n.onto)}},u={applied:c.map(e=>({source:e.oid,created:e.oid})),rewritten:[]};return gh(a,d,o,u)},vh=e=>[...e.done,...e.remaining].some(e=>"pick"!==e.action),bh=async(e,a)=>{const n={branch:ih(a.headName),onto:a.onto,origHead:a.origHead,doneBefore:a.done,todo:a.remaining},r=[...await qf(e)],i=await t.readIndex(e);oh(i.entries);const o=await t.synthesizeTreeFromIndex(e,i.entries),c=await t.resolveRef(e,Vf),d=a.done[a.done.length-1].oid;let u;if(void 0!==a.currentFixups){const t=await qr(e,c),n=Bo(Wo(a.message),{allowEmpty:!1});u=await uh(e,{tree:o,parent:t.parents[0],expected:c,author:t.author,message:n,reflog:Ga(s(n))}),r.push([d,u])}else if(void 0!==a.amend){const t=await qr(e,a.amend);o===t.tree?u=c:(u=await uh(e,{tree:o,parent:t.parents[0],expected:c,author:a.author,message:t.message,reflog:Ga(s(t.message))}),r.push([d,u]))}else{const t=Bo(Wo(a.message),{allowEmpty:!1});u=await uh(e,{tree:o,parent:c,expected:c,author:a.author,message:t,reflog:Ga(s(t))}),r.push([d,u])}return gh(e,n,u,{applied:[],rewritten:r})},kh=async(e,a)=>{const n=await t.resolveRef(e,Vf),r=void 0!==a.amend?(await qr(e,a.amend)).parents[0]:n;await t.getRefStore(e).writeLoose(Vf,r),await On(e,r);const i={branch:ih(a.headName),onto:a.onto,origHead:a.origHead,doneBefore:a.done,todo:a.remaining};return gh(e,i,r,{applied:[],rewritten:await qf(e)})},xh=e=>"HEAD"===e||e.includes("/")?e:`${di}${e}`,Ih=e=>{if(""===e)throw Ve(e,"refspec must not be empty");let t=e,a="normal";if(t.startsWith("+")&&(a="force",t=t.slice(1)),""===t)throw Ve(e,"refspec must not be empty after force prefix");const n=Eh(t,":");if(n>1)throw Ve(e,"refspec must contain at most one colon");if(0===n){const e=xh(t);return{force:a,src:e,dst:e,isDelete:!1}}const r=t.indexOf(":"),i=t.slice(0,r),o=t.slice(r+1);if(""===o)throw Ve(e,"destination must not be empty");const s=xh(o);if("HEAD"===s)throw Ve(e,"destination must not be HEAD");return""===i?{force:a,src:"",dst:s,isDelete:!0}:{force:a,src:xh(i),dst:s,isDelete:!1}},Eh=(e,t)=>{let a=0;for(let n=0;n<e.length;n+=1)e[n]===t&&(a+=1);return a},Th=/[\n\r\t\0"\\\]/]/,$h=t=>{if(""===t)throw e.remoteNameInvalid(t,"name must not be empty");if(Th.test(t))throw e.remoteNameInvalid(t,"name must not contain a newline, tab, NUL, slash, bracket, quote, or backslash");return t},Oh=(e,t)=>{if(void 0===e.branch)return[];const a=[];for(const[n,r]of e.branch)r.remote===t&&a.push({branch:n,ref:`refs/heads/${n}`,merge:r.merge});return a},Rh=/[\n\r\0]/,Sh=t=>{if(Rh.test(t))throw e.invalidOption("remote.url","url must not contain a newline or NUL")},Dh=(e,t)=>({name:e,url:t?.url??"",pushUrl:t?.pushUrl,fetchRefspecs:t?.fetch??[]}),Ah=async e=>{await gn(e);const a=await t.readConfig(e);if(void 0===a.remote)return{remotes:[]};const n=[];for(const[e,t]of a.remote)n.push(Dh(e,t));return n.sort((e,t)=>e.name<t.name?-1:1),{remotes:n}},Ch=async(a,n)=>{await gn(a),$h(n.name),Sh(n.url);const r=await t.readConfig(a);if(!0===r.remote?.has(n.name))throw e.remoteExists(n.name);const i=n.fetch??`+refs/heads/*:refs/remotes/${n.name}/*`;Ih(i);const o=[{kind:"set",section:"remote",subsection:n.name,key:"url",value:n.url},{kind:"set",section:"remote",subsection:n.name,key:"fetch",value:i}];return await t.updateConfigOperations(a,o),{remote:{name:n.name,url:n.url,pushUrl:void 0,fetchRefspecs:[i]}}},Mh=async(e,a)=>{const n=`refs/remotes/${a}/`;return(await t.enumerateRefs(e)).filter(e=>e.startsWith(n))},Nh=async(a,n)=>{await gn(a),$h(n.name);const r=await t.readConfig(a);if(!0!==r.remote?.has(n.name))throw e.remoteNotConfigured(n.name);const i=await Mh(a,n.name),o=Oh(r,n.name);for(const e of i)await t.updateRef(a,e,t.ZERO_OID,{delete:!0});const s=[{kind:"removeSection",section:"remote",subsection:n.name}];for(const e of o)s.push({kind:"removeEntry",section:"branch",subsection:e.branch,key:"remote"},{kind:"removeEntry",section:"branch",subsection:e.branch,key:"merge"});return await t.updateConfigOperations(a,s),{name:n.name,removedTrackingRefs:i,clearedBranches:o.map(e=>e.ref)}},Ph=async(a,n,r,i)=>{const o=t.getRefStore(a),s=await o.resolveDirect(n);if("direct"===s.kind){if(!await o.isLoose(n))throw e.unsupportedOperation("rename-packed-tracking-ref",`cannot rename packed-only ref ${n} — run \`git pack-refs --unpack\` and retry`);await t.updateRef(a,r,s.id,{expected:"absent",reflogMessage:i}),await t.updateRef(a,n,t.ZERO_OID,{delete:!0})}},Lh=async(a,n)=>{if(await gn(a),$h(n.from),$h(n.to),n.from===n.to)throw e.invalidOption("remote.rename","from and to must differ");const r=await t.readConfig(a),i=r.remote?.get(n.from);if(void 0===i)throw e.remoteNotConfigured(n.from);if(!0===r.remote?.has(n.to))throw e.remoteExists(n.to);const o=await Mh(a,n.from),s=Oh(r,n.from),c=`remote: renamed ${n.from} to ${n.to}`,d=[];for(const e of o){const t=e.slice(`refs/remotes/${n.from}/`.length),r=`refs/remotes/${n.to}/${t}`;await Ph(a,e,r,c),d.push(r)}const u=((e,t,a)=>{const n=`+refs/heads/*:refs/remotes/${t}/*`,r=`+refs/heads/*:refs/remotes/${a}/*`;return e.map(e=>e===n?r:e)})(i.fetch??[],n.from,n.to),l=[{kind:"renameSection",section:"remote",from:n.from,to:n.to}];if(u.length>0){l.push({kind:"removeEntry",section:"remote",subsection:n.to,key:"fetch"});for(const e of u)l.push({kind:"appendEntry",section:"remote",subsection:n.to,key:"fetch",value:e})}for(const e of s)l.push({kind:"set",section:"branch",subsection:e.branch,key:"remote",value:n.to});return await t.updateConfigOperations(a,l),{from:n.from,to:n.to,movedTrackingRefs:d,rewrittenBranches:s.map(e=>e.ref)}},_h=async(a,n)=>{await gn(a),$h(n.name),Sh(n.url);const r=await t.readConfig(a);if(!0!==r.remote?.has(n.name))throw e.remoteNotConfigured(n.name);const i=!0===n.push?"pushurl":"url";await t.updateConfigOperations(a,[{kind:"set",section:"remote",subsection:n.name,key:i,value:n.url}]);const o=(await t.readConfig(a)).remote?.get(n.name);return{remote:Dh(n.name,o)}},Hh=async(a,n)=>{await gn(a),$h(n.name);const r=await t.readConfig(a),i=r.remote?.get(n.name);if(void 0===i)throw e.remoteNotConfigured(n.name);const o=await Mh(a,n.name),s=t.getRefStore(a),c=new Map;for(const e of o){const t=await s.resolveDirect(e);"direct"===t.kind&&c.set(e,t.id)}const d=Oh(r,n.name);return{remote:{...Dh(n.name,i),trackingRefs:c,trackedBy:d.map(e=>({branch:e.ref,merge:e.merge}))}}},jh=e=>e.parents.length>=2,Uh=e=>e.map(e=>({path:e.path,type:e.type})),Bh=e=>t.writeTree(e,[]),Wh=async(a,n,r,i,o)=>{const c=r.parents[0],d=void 0!==c?await Gr(a,c):await Bh(a),u=await Gr(a,o),l=await t.acquireIndexLock(a);try{const c=await t.readIndex(a),f=await po(a,{baseTree:r.tree,oursTree:u,theirsTree:d,currentIndex:c,labels:oe(n,s(r.message))});if("would-overwrite"===f.kind)throw e.workingTreeDirty({localChanges:f.localChanges,untracked:f.untracked});if("conflict"===f.kind)return await l.commit(f.indexEntries),{kind:"conflict",conflicts:f.conflicts};if(f.mergedTree===u)return{kind:"empty"};await l.commit(f.result.newIndexEntries);const{id:h,subject:m}=await(async(e,a,n,r,i)=>{const o=await Fo(e),c=Bo(lc(n,a),{allowEmpty:!1});return{id:await t.createCommit(e,{tree:i,parents:[r],author:o,committer:o,message:c,extraHeaders:[]}),subject:s(c)}})(a,n,r,o,f.mergedTree);return await t.updateRef(a,i,h,{expected:o,reflogMessage:Wa(m)}),{kind:"committed",id:h}}finally{await l.release()}},Fh=async(e,t,a,n)=>{await Io(e,t.sequenceHead),await $o(e,await(async(e,t)=>{const a=[];for(const n of t){const t=await qr(e,n);a.push({command:"revert",oid:n,subject:s(t.message)})}return a})(e,a)),await To(e,n),await Ro(e,{recordOrigin:!1,allowEmpty:!1,noCommit:!1})},zh=async(e,t,a)=>{"conflict"===t.kind&&await(async(e,t,a,n)=>{await(async(e,t)=>{await e.fs.writeUtf8(cc(e),`${t}\n`)})(e,t),await un(e,Po(lc(a,t),w(n)))})(e,a.source,a.cData,t.conflicts),a.seq.multiPick&&await Fh(e,a.seq,a.remaining,a.currentHead);const n=a.remaining.length-1;return"conflict"===t.kind?{kind:"conflict",commit:a.source,conflicts:Uh(t.conflicts),remaining:n}:{kind:"empty",commit:a.source,remaining:n}},qh=async(t,a,n,r,i)=>{let o=r;const s=[];for(let r=0;r<a.length;r+=1){const c=a[r],d=await qr(t,c);if(jh(d))throw i.multiPick&&await Fh(t,i,a.slice(r),o),e.revertMergeNoMainline(c);const u=await Wh(t,c,d,n,o);if("committed"!==u.kind){if("empty"!==u.kind||"drop"!==i.onEmpty||0!==r)return zh(t,u,{seq:i,source:c,cData:d,remaining:a.slice(r),currentHead:o})}else s.push({source:c,created:u.id}),o=u.id}return await Do(t),{kind:"reverted",commits:s}},Gh=/^(.+)\.\.(.+)$/,Vh=async(e,a,n)=>{const r=new Set;for await(const n of t.walkCommits(e,{from:[a]}))r.add(n.id);const i=[];for await(const a of t.walkCommits(e,{from:[n],until:[...r]}))i.push(a.id);return i},Kh=async(a,n)=>{await vn(a),await bn(a,Ja),await En(a);const r=await kn(a);if("symbolic"!==r.kind)throw e.unsupportedOperation(Ja,"cannot revert with detached HEAD");const i=await(async(a,n)=>{try{return await t.resolveRef(a,n)}catch(t){if(t instanceof e.TsgitError&&"REF_NOT_FOUND"===t.data.code)throw e.noInitialCommit();throw t}})(a,r.target),o=await(async(t,a)=>{const n=[];for(const r of a){if(r.includes("...")||r.includes("^"))throw e.invalidOption("commits",`unsupported revision form '${r}' (use a commit-ish or A..B)`);const a=Gh.exec(r);if(null===a){n.push(await zr(t,r));continue}const i=await $r(t,a[1]),o=await $r(t,a[2]);n.push(...await Vh(t,i,o))}return n})(a,n.commits);return await Ho(a,await Gr(a,i)),!0===n.noCommit?(async(a,n)=>{const r=await t.acquireIndexLock(a);try{let i=await t.readIndex(a);for(let o=0;o<n.length;o+=1){const c=n[o],d=await qr(a,c);if(jh(d))throw e.revertMergeNoMainline(c);const u=d.parents[0],l=void 0!==u?await Gr(a,u):await Bh(a),f=await t.synthesizeTreeFromIndex(a,i.entries),h=await po(a,{baseTree:d.tree,oursTree:f,theirsTree:l,currentIndex:i,labels:oe(c,s(d.message))});if("would-overwrite"===h.kind)throw e.workingTreeDirty({localChanges:h.localChanges,untracked:h.untracked});if("conflict"===h.kind)return await r.commit(h.indexEntries),{kind:"conflict",commit:c,conflicts:Uh(h.conflicts),remaining:n.length-(o+1)};i={...i,entries:h.result.newIndexEntries}}return await r.commit(i.entries),{kind:"no-commit",sources:n}}finally{await r.release()}})(a,o):qh(a,o,r.target,i,{multiPick:o.length>1,sequenceHead:i,onEmpty:"stop"})},Xh=async a=>{await vn(a),await bn(a,nn);const n=await dc(a),r=await Oo(a);if(void 0===n&&(void 0===r||0===r.length))throw e.noOperationInProgress(Ja);const i=await kn(a);if("symbolic"!==i.kind)throw e.unsupportedOperation(nn,"cannot continue with detached HEAD");let o=await t.resolveRef(a,i.target);const c=[];if(void 0!==n){const d=void 0!==r?r.length-1:0,u=await(async(a,n,r)=>{const i=await t.readIndex(a);(t=>{const a=new Set;for(const e of t)0!==e.flags.stage&&a.add(e.path);if(a.size>0)throw e.mergeHasConflicts(a.size,[...a])})(i.entries);const o=await t.synthesizeTreeFromIndex(a,i.entries);if(o===await Gr(a,r))return{empty:!0};const c=await(async(e,a,n,r)=>{const i=await Fo(e),o=Bo(Wo(await hn(e)??""),{allowEmpty:!1}),c=await t.createCommit(e,{tree:r,parents:[a],author:i,committer:i,message:o,extraHeaders:[]});return await t.updateRef(e,n,c,{expected:a,reflogMessage:_a(s(o))}),c})(a,r,n,o);return await uc(a),await wn(a),{created:c}})(a,i.target,o);if("empty"in u)return{kind:"empty",commit:n,remaining:d};c.push({source:n,created:u.created}),o=u.created}const d=(r??[]).slice(void 0!==n?1:0).map(e=>e.oid),u=await Eo(a)??o,l=void 0===n?"drop":"stop",f=await qh(a,d,i.target,o,{multiPick:!0,sequenceHead:u,onEmpty:l});return"reverted"===f.kind?{kind:"reverted",commits:[...c,...f.commits]}:f},Yh=async a=>{await vn(a),await bn(a,rn);const n=await dc(a),r=await Oo(a);if(void 0===n&&(void 0===r||0===r.length))throw e.noOperationInProgress(Ja);const i=await Vr(a,rn),o=await t.resolveRef(a,i);await On(a,o),await uc(a),await wn(a);const s=(r??[]).slice(1).map(e=>e.oid),c=await Eo(a)??o;return qh(a,s,i,o,{multiPick:!0,sequenceHead:c,onEmpty:"stop"})},Zh=async a=>{await vn(a),await bn(a,on);const n=await dc(a),r=await Eo(a);if(void 0===n&&void 0===r)throw e.noOperationInProgress(Ja);const i=await Vr(a,on),o=r??await t.resolveRef(a,i);return await Ao(a,{branch:i,target:o,clearHead:uc}),{head:o,branch:i}},Jh=(e,t)=>void 0===e||e(t),Qh=e=>({kind:"delete",path:e.path,mode:e.mode,id:void 0,previousId:e.id,previousMode:e.mode}),em=e=>({kind:"add",path:e.path,mode:e.mode,id:e.id,previousId:void 0,previousMode:void 0}),tm=e=>({kind:"noop",path:e.path,mode:e.mode,id:e.id,previousId:e.id,previousMode:e.mode}),am={ctimeSeconds:0,ctimeNanoseconds:0,mtimeSeconds:0,mtimeNanoseconds:0,dev:0,ino:0,uid:0,gid:0,fileSize:0},nm=e=>({...am,mode:e.mode,id:e.id,flags:{...t.STAGE0_FLAGS,skipWorktree:!0},path:e.path}),rm=e=>e.flags.skipWorktree?{...e,flags:{...e.flags,skipWorktree:!1}}:e,im=async(e,a)=>{const n=e.layout.workDir,r=await t.acquireIndexLock(e);try{const i=(await t.readIndex(e)).entries.filter(e=>0===e.flags.stage),o=await(async(e,a,n,r)=>{const i=[],o=[],s=[];for(const c of n){if(Jh(r.matcher,c.path)){i.push(c);continue}const n=t.joinPath(a,c.path),d=await e.fs.exists(n);d&&await t.isWorkingTreeDirty(e,n,c.id)&&!0!==r.force?s.push(c):o.push({entry:c,present:d})}return{included:i,removable:o,retained:s}})(e,n,i,a),s=await(async(e,a,n)=>{const r=[];for(const{entry:e,present:t}of n.removable)r.push(t?Qh(e):tm(e));for(const i of n.included){const n=await e.fs.exists(t.joinPath(a,i.path));r.push(n?tm(i):em(i))}const i={add:0,update:0,delete:0,noop:0};for(const e of r)i[e.kind]+=1;return{entries:r,stats:i}})(e,n,o),c=await t.applyChangeset(e,{changeset:s,force:!0,workdir:n}),d=((e,t)=>{const a=new Map;for(const e of t)a.set(e.path,e);const n=[];for(const t of e.included)n.push(a.get(t.path)??rm(t));for(const{entry:t}of e.removable)n.push(nm(t));for(const t of e.retained)n.push(rm(t));return n})(o,c.writtenEntries);return await r.commit(d),{materialized:c.written,removed:c.deleted,retained:o.retained.map(e=>e.path)}}finally{await r.release()}},om=async e=>{await vn(e),await bn(e,"sparse-checkout"),await En(e)},sm=async e=>{await om(e);const a=await t.readConfig(e);if(!0!==a.core?.sparseCheckout)return{cone:!1,patterns:[]};const n=!0===a.core.sparseCheckoutCone,r=await t.readSparsePatternText(e)??"";return"cone"===(i=t.parseSparseCheckout(r,n).spec).mode?{cone:!0,patterns:[...i.recursive].sort()}:{cone:!1,patterns:i.rules.map(e=>e.source)};var i},cm=(e,t)=>void 0===t?{matcher:e}:{matcher:e,force:t},dm=async(e,a,n,r)=>{const i=await im(e,cm(t.buildSparseMatcher(a),r));return await t.writeSparsePatternText(e,n),await t.updateCoreConfig(e,{sparseCheckout:"true",sparseCheckoutCone:"cone"===a.mode?"true":"false"}),pm("cone"===a.mode,i)},um=async(a,n)=>{if(await om(a),0===n.patterns.length)throw e.invalidOption("patterns","set requires at least one pattern");const r=await t.readConfig(a),i=n.cone??r.core?.sparseCheckoutCone??!0,{spec:o,text:s}=mm(i,n.patterns);return dm(a,o,s,n.force)},lm=async(a,n)=>{if(await om(a),0===n.patterns.length)throw e.invalidOption("patterns","add requires at least one pattern");const r=await t.readConfig(a);if(!0!==r.core?.sparseCheckout)throw e.invalidOption("action","add requires sparse checkout to be enabled");const i=!0===r.core.sparseCheckoutCone,o=await t.readSparsePatternText(a)??"",{spec:s,text:c}=wm(i,o,n.patterns);return dm(a,s,c,n.force)},fm=async(a,n)=>{await om(a);const r=await t.loadSparseMatcher(a);if(void 0===r)throw e.invalidOption("action","reapply requires sparse checkout to be enabled");const i=await t.readConfig(a),o=await im(a,cm(r,n?.force));return pm(!0===i.core?.sparseCheckoutCone,o)},hm=async(e,a)=>{await om(e);const n=await im(e,cm(void 0,a?.force));return await t.updateCoreConfig(e,{sparseCheckout:"false"}),pm(!1,n)},mm=(e,a)=>{if(e){const e=t.buildConeSpec(a);return{spec:e,text:t.serializeCone(e)}}const n=a.join("\n");return{spec:t.parseSparseCheckout(n,!1).spec,text:n}},wm=(e,a,n)=>{if(e){const e=t.parseSparseCheckout(a,!0).spec,r="cone"===e.mode?[...e.recursive,...n]:n,i=t.buildConeSpec(r);return{spec:i,text:t.serializeCone(i)}}const r=(""===a?n:[a,...n]).join("\n");return{spec:t.parseSparseCheckout(r,!1).spec,text:r}},pm=(e,t)=>({cone:e,materialized:t.materialized,removed:t.removed,retained:t.retained}),gm="refs/stash",ym=new TextEncoder,vm=(e,a)=>t.atomicWriteRef(e,gm,t.looseRefPath(e.layout.gitDir,gm),ym.encode(`${a}\n`)),bm=async e=>{const a=await t.readReflog(e,gm),n=a.length-1;return a.map((e,t)=>{const r=a[n-t];return{index:t,selector:`stash@{${t}}`,stash:r.newId,message:r.message}})},km=async(e,a)=>{const n=await t.readObject(e,a);if("commit"!==n.type)throw t.unexpectedObjectType("commit",n.type,a);return n.data.tree},xm=async(e,a,n)=>{const r=t.joinPath(e.layout.workDir,a),i=n.isSymbolicLink?(new TextEncoder).encode(await e.fs.readlink(r)):await e.fs.read(r);return{id:await t.hashBlob(e,i,{write:!0}),mode:t.deriveWorkingMode(n)}},Im=async(a,n={})=>{await vn(a),await bn(a,"stash"),await En(a);const r=await kn(a),i=await(async(a,n)=>{const r=await(async(a,n)=>{if("direct"===n.kind)return n.id;try{return await t.resolveRef(a,n.target)}catch(t){if(t instanceof e.TsgitError&&"REF_NOT_FOUND"===t.data.code)throw e.noInitialCommit();throw t}})(a,n),i=await t.readObject(a,r);if("commit"!==i.type)throw t.unexpectedObjectType("commit",i.type,r);return{b:r,bTree:i.data.tree,branchRef:"symbolic"===n.kind?n.target:void 0,subject:s(i.data.message)}})(a,r),o=await t.acquireIndexLock(a);try{const e=await t.readIndex(a),r=await t.synthesizeTreeFromIndex(a,e.entries),s=await(async(e,a)=>{const n=[];let r=!1;const i=await t.maybeBuildAttributeProvider(e);for(const o of a.entries){if(0!==o.flags.stage)continue;if(o.flags.skipWorktree){n.push(o);continue}const a=await t.compareWorkingTreeEntry(e,o,i);if("absent"===a){r=!0;continue}if("unchanged"===a){n.push(o);continue}r=!0;const s=await e.fs.lstat(t.joinPath(e.layout.workDir,o.path)),{id:c,mode:d}=await xm(e,o.path,s);n.push(uo(o.path,c,d))}return{entries:n,dirty:r}})(a,e),c=n.includeUntracked?await(async(e,a)=>{const n=new Set(a.entries.map(e=>e.path)),r=await t.buildRepoIgnorePredicate(e),i=[],o=[];for await(const{path:a,stat:s}of t.walkWorkingTree(e,{ignore:r})){if(n.has(a))continue;const{id:t,mode:r}=await xm(e,a,s);o.push(uo(a,t,r)),i.push(a)}return{paths:i,entries:o}})(a,e):{paths:[],entries:[]};if(!(r!==i.bTree||s.dirty||c.paths.length>0))return{kind:"no-local-changes"};const d=await Em(a,{base:i,iTree:r,working:s,untracked:c,opts:n});return await(async(e,a,n)=>{const r=await(async e=>{const a=await t.getRefStore(e).resolveDirect(gm);return"direct"===a.kind?a.id:t.ZERO_OID})(e);await vm(e,a);const i=await t.resolveReflogIdentity(e);await t.appendReflog(e,gm,{oldId:r,newId:a,identity:i,message:t.sanitizeReflogMessage(n)})})(a,d.stash,d.message),await Om(a,o,{base:i,iTree:r,untracked:c,opts:n}),{kind:"saved",stash:d.stash,message:d.message}}finally{await o.release()}},Em=async(e,a)=>{const{base:n,iTree:r,working:i,untracked:o,opts:s}=a,c=await t.resolveReflogIdentity(e),d=(u=n.branchRef,u?.startsWith(di)?u.slice(11):"(no branch)");var u;const l=ae(n.b),f=n.subject,h=void 0!==s.message?((e,t)=>`On ${e}: ${t}`)(d,s.message):((e,t,a)=>`WIP on ${e}: ${t} ${a}`)(d,l,f),m=(a,n,r)=>t.createCommit(e,{tree:a,parents:n,author:c,committer:c,message:r,extraHeaders:[]}),w=await m(r,[n.b],((e,t,a)=>`index on ${e}: ${t} ${a}`)(d,l,f)),p=await t.synthesizeTreeFromIndex(e,i.entries);if(0===o.paths.length)return{stash:await m(p,[n.b,w],h),message:h};const g=await t.synthesizeTreeFromIndex(e,o.entries),y=await m(g,[],((e,t,a)=>`untracked files on ${e}: ${t} ${a}`)(d,l,f));return{stash:await m(p,[n.b,w,y],h),message:h}},Tm=async e=>(await vn(e),{entries:await bm(e)}),$m=async(a,n={})=>(await vn(a),await bn(a,"stash drop"),(async(a,n)=>{const r=await t.readReflog(a,gm),i=r.length-1-n,o=r[i];if(void 0===o)throw e.stashNotFound(n,r.length);const s=r[i+1],c=r.filter((e,t)=>t!==i).map(e=>e===s?{...e,oldId:o.oldId}:e);if(0===c.length)return await t.getRefStore(a).removeLoose(gm),await t.deleteReflog(a,gm),{dropped:o.newId,remaining:0};const d=c[c.length-1];return await vm(a,d.newId),await t.writeReflog(a,gm,c),{dropped:o.newId,remaining:c.length}})(a,n.index??0)),Om=async(e,a,n)=>{const{base:r,iTree:i,untracked:o,opts:s}=n,c=await t.readIndex(e),d=!0===s.keepIndex?i:r.bTree,u=await t.materializeTree(e,{targetTree:d,currentIndex:c,force:!0,forceRewriteAll:!0});if(await a.commit(u.newIndexEntries),!0===s.includeUntracked)for(const a of o.paths)await t.removeWorkingTreeFile(e,a)},Rm=async(a,n={})=>{await vn(a),await bn(a,"stash apply"),await En(a);const r=await(async(a,n)=>{const r=await t.readReflog(a,gm),i=r[r.length-1-n];if(void 0===i)throw e.stashNotFound(n,r.length);return i.newId})(a,n.index??0),i=await(async(e,a)=>{const n=await t.readObject(e,a);if("commit"!==n.type)throw t.unexpectedObjectType("commit",n.type,a);const[r,i,o]=n.data.parents;if(void 0===r||void 0===i)throw t.invalidCommit("ref does not point at a stash commit");return{base:r,indexParent:i,untrackedParent:o,wTree:n.data.tree}})(a,r),o=await km(a,i.base),s=void 0!==i.untrackedParent?await km(a,i.untrackedParent):void 0,c=await t.acquireIndexLock(a);try{const d=await t.readIndex(a),u=await t.synthesizeTreeFromIndex(a,d.entries);if(void 0!==s){const n=await(async(e,a)=>{const n=await t.flattenTree(e,a),r=[];for(const a of n.entries.keys())await e.fs.exists(t.joinPath(e.layout.workDir,a))&&r.push(a);return r})(a,s);if(n.length>0)throw e.stashApplyWouldOverwrite(n)}const l=await po(a,{baseTree:o,oursTree:u,theirsTree:i.wTree,currentIndex:d,labels:se});if("would-overwrite"===l.kind)throw e.stashApplyWouldOverwrite([...l.localChanges,...l.untracked]);return"conflict"===l.kind?(await c.commit(l.indexEntries),{kind:"conflict",conflicts:l.conflicts.map(e=>({path:e.path,type:e.type}))}):(!0===n.restoreIndex&&await(async(e,a,n)=>{const r=await km(e,n.indexParent),i=await(async(e,a)=>{const[n,r,i]=await Promise.all([void 0!==a.baseTree?t.flattenTree(e,a.baseTree):Promise.resolve(void 0),t.flattenTree(e,a.oursTree),t.flattenTree(e,a.theirsTree)]),o=await Ce(n,r,i,no(e,a.labels),a.labels);return o.cleanMerge?{kind:"clean",mergedTree:await ho(e,o.outcomes)}:{kind:"conflict",conflicts:o.conflicts}})(e,{baseTree:n.bTree,oursTree:n.cTree,theirsTree:r,labels:se});if("clean"!==i.kind)return;const o=await t.buildIndexFromTree(e,{targetTree:i.mergedTree,currentIndex:n.currentIndex});await a.commit(o)})(a,c,{bTree:o,cTree:u,indexParent:i.indexParent,currentIndex:d}),void 0!==s&&await(async(e,a)=>{const n=await t.flattenTree(e,a);for(const[a,r]of n.entries){const n=await t.streamBlob(e,r.id);await t.writeWorkingTreeFileStream(e,a,n)}})(a,s),{kind:"applied",stash:r})}finally{await c.release()}},Sm=async(e,t={})=>{const a=await Rm(e,t);if("conflict"===a.kind)return a;const n=await $m(e,{index:t.index??0});return{kind:"applied",stash:a.stash,dropped:n.dropped}},Dm=e=>e.split("/").length,Am=(e,t)=>`${"../".repeat(2+Dm(e))}${t}`,Cm="./",Mm="../",Nm=e=>e.startsWith("/"),Pm=e=>{const t=e.indexOf(":"),a=e.indexOf("/");return t<0||a>=0&&a<t},Lm=(t,a)=>{const n=t.lastIndexOf("/");if(n>=0)return{base:t.slice(0,n),colonSep:!1};const r=t.lastIndexOf(":");if(r>=0)return{base:t.slice(0,r),colonSep:!0};if(a||"."===t)throw new e.TsgitError({code:"RELATIVE_URL_UNRESOLVABLE",url:t});return{base:".",colonSep:!1}},_m=(e,t)=>t.startsWith(Cm)||t.startsWith(Mm)?((e,t)=>{if(!Pm(t)||Nm(t))return t;let a=e.endsWith("/")?e.slice(0,-1):e;const n=Pm(a)&&!Nm(a);n&&(a=(e=>e.startsWith(Cm)||e.startsWith(Mm)?e:`${Cm}${e}`)(a));let r=t,i=!1;for(;r.length>0;)if(r.startsWith(Mm)){r=r.slice(3);const e=Lm(a,n);a=e.base,i=i||e.colonSep}else{if(!r.startsWith(Cm))break;r=r.slice(2)}const o=`${a}${i?":":"/"}${r}`,s=r.endsWith("/")?o.slice(0,-1):o;return s.startsWith(Cm)?s.slice(2):s})(e,t):t,Hm=new Set(["checkout","rebase","merge","none"]),jm=e=>Hm.has(e)?e:void 0,Um=".gitmodules",Bm="HEAD",Wm=e=>void 0!==e.path&&!t.isUnsafeSubmoduleName(e.path),Fm=async a=>{const n=t.joinPath(a.layout.workDir,Um);if(!await a.fs.exists(n))return[];const r=await a.fs.stat(n);if(r.size>t.MAX_GITMODULES_BYTES)throw e.workingTreeFileTooLarge(n,r.size,t.MAX_GITMODULES_BYTES);return t.parseGitmodules(await a.fs.readUtf8(n))},zm=t=>{const a=new Map;for(const n of t){if(void 0===n.update)continue;const t=jm(n.update);if(void 0===t)throw e.invalidOption(`submodule.${n.name}.update`,`invalid value '${n.update}'`);a.set(n.name,t)}return a},qm=(t,a)=>{const n=t.filter(Wm);if(void 0===a)return n;const r=n.filter(e=>a.includes(e.path)),i=new Set(r.map(e=>e.path));for(const t of a)if(!i.has(t))throw e.pathspecNoMatch(t);return r},Gm=async(e,t)=>{const a=await(async e=>xn(await kn(e)))(e),n=a?.startsWith(di)?Ld(a):void 0,r=(void 0!==n?t.branch?.get(n)?.remote:void 0)??_d;return t.remote?.get(r)?.url??e.layout.workDir},Vm=(e,t,a)=>{const n=(t,a)=>({kind:"set",section:"submodule",subsection:e,key:t,value:a}),r=[n("active","true"),n("url",t)];return void 0!==a&&r.push(n("update",a)),r},Km=async(e,a={})=>{await vn(e);const n=await Fm(e),r=zm(n),i=qm(n,a.paths),o=await t.readConfig(e),s=await Gm(e,o),c=[],d=[];for(const e of i){if(void 0===e.url)continue;const t=e.path,a=r.get(e.name),n=o.submodule?.get(e.name)?.url;if(void 0!==n){c.push({name:e.name,path:t,url:n,registered:!1,...void 0!==a?{update:a}:{}});continue}const i=_m(s,e.url);d.push(...Vm(e.name,i,a)),c.push({name:e.name,path:t,url:i,registered:!0,...void 0!==a?{update:a}:{}})}return d.length>0&&await t.updateConfigOperations(e,d),{entries:c}},Xm=async(e,a,n,r)=>{const i=await t.deriveSubmoduleContext(e,a,n);return void 0!==i&&(await t.updateConfigOperations(i,[{kind:"set",section:"remote",subsection:"origin",key:"url",value:r}]),!0)},Ym=async(e,a,n,r)=>{await vn(e);const i=qm(await Fm(e),a.paths),o=await t.readConfig(e),s=await Gm(e,o),c=[],d=[];for(const t of i){if(void 0===t.url)continue;if(void 0===o.submodule?.get(t.name)?.url)continue;const a=t.path,n=_m(s,t.url);d.push({kind:"set",section:"submodule",subsection:t.name,key:"url",value:n});const r=await Xm(e,t.name,a,n);c.push({name:t.name,path:a,url:n,syncedRemote:r})}if(d.length>0&&await t.updateConfigOperations(e,d),!0===a.recursive&&n<t.MAX_SUBMODULE_DEPTH)for(const o of i){const i=`${e.layout.gitDir}/modules/${o.name}`,s=await t.deriveSubmoduleContext(e,o.name,o.path,r);void 0!==s&&await Ym(s,a,n+1,new Set([...r,i]))}return{entries:c}},Zm=(e,t={})=>Ym(e,t,0,new Set),Jm=async(a,n,r)=>{const i=await t.deriveSubmoduleContext(a,n,r);if(void 0!==i&&!(await hd(i)).clean)throw(t=>new e.TsgitError({code:"SUBMODULE_HAS_MODIFICATIONS",path:t}))(r)},Qm=async(e,a)=>{const n=t.joinPath(e.layout.workDir,a);return!!await e.fs.exists(n)&&0!==(await e.fs.readdir(n)).length&&(await e.fs.rmRecursive(n),await e.fs.mkdir(n),!0)},ew=async(a,n={})=>{await vn(a);const r=void 0!==n.paths&&n.paths.length>0;if(!0===n.all&&r)throw e.invalidOption("submodule.deinit","pathspec and --all are incompatible");if(!0!==n.all&&!r)throw e.invalidOption("submodule.deinit","use 'all: true' to deinitialise every submodule");const i=await Fm(a),o=!0===n.all?i.filter(Wm):qm(i,n.paths),s=await t.readConfig(a),c=[];for(const e of o){const r=e.path;!0!==n.force&&await Jm(a,e.name,r);const i=await Qm(a,r);!0===s.submodule?.has(e.name)&&await t.updateConfigOperations(a,[{kind:"removeSection",section:"submodule",subsection:e.name}]),c.push({name:e.name,path:r,url:e.url??"",cleared:i})}return{entries:c}},tw=async(e,a={})=>{await vn(e);const n=(e=>t.looksLikeObjectId(e)?t.ObjectId.from(e):t.validateRefName(e))(a.ref??"HEAD"),r=!0===a.recursive,i=[];for await(const o of t.walkSubmodules(e,{ref:n,recursive:r,...void 0!==a.maxDepth?{maxDepth:a.maxDepth}:{}}))i.push(o);return{entries:i}},aw=(e,t,a)=>({kind:"set",section:"submodule",subsection:e,key:t,value:a}),nw=async(e,a,n,r,i)=>{await Qs(a,{url:n}),await t.updateConfigOperations(a,[{kind:"set",section:"core",key:"worktree",value:Am(r,i)}]),await e.fs.writeUtf8(t.joinPath(e.layout.workDir,`${i}/.git`),`${((e,t)=>`gitdir: ${"../".repeat(Dm(t))}.git/modules/${e}`)(r,i)}\n`)},rw=async(a,n)=>{await vn(a),await bn(a,"submodule add");const r=n.name??n.path;((a,n,r)=>{if(""===r)throw e.invalidOption("submodule.add","url must not be empty");if(""===n)throw e.invalidOption("submodule.add","path must not be empty");if(t.isUnsafeSubmoduleName(a))throw e.invalidOption("submodule.add.name",`unsafe name '${a}'`);if(t.isUnsafeSubmoduleName(n))throw e.invalidOption("submodule.add.path",`unsafe path '${n}'`)})(r,n.path,n.url),void 0!==n.branch&&t.validateRefName(`${di}${n.branch}`),await(async(a,n)=>{if((await t.readIndex(a)).entries.some(e=>e.path===n))throw(t=>new e.TsgitError({code:"SUBMODULE_PATH_EXISTS",path:t}))(n)})(a,n.path);const i=await t.readConfig(a),o=await Gm(a,i),s=_m(o,n.url),c=t.deriveSubmoduleCloneContext(a,r,n.path);await nw(a,c,s,r,n.path),void 0!==n.branch?await(async(e,a)=>{const n=await t.resolveRef(e,`refs/remotes/origin/${a}`),r=`${di}${a}`;await e.fs.writeUtf8(`${e.layout.gitDir}/${r}`,`${n}\n`),await t.recordRefUpdate(e,r,t.ZERO_OID,n,Ha(`origin/${a}`)),await t.updateConfigOperations(e,[{kind:"set",section:"branch",subsection:a,key:"remote",value:"origin"},{kind:"set",section:"branch",subsection:a,key:"merge",value:r}]),await Zi(e,{rev:a})})(c,n.branch):await t.materializeWorktreeFromHead(c);const d="symbolic"===(f=await t.getRefStore(c).resolveDirect(Bm)).kind&&!0===f.target?.startsWith(di)?f.target.slice(11):"",u=await t.resolveRef(c,Bm),l=await(async(e,a,n,r,i)=>{const o=t.joinPath(e.layout.workDir,Um),s=await e.fs.exists(o)?await e.fs.readUtf8(o):"",c=[aw(a,"path",n),aw(a,"url",r)];void 0!==i&&c.push(aw(a,"branch",i));let d=s;for(const e of c)d=t.applyConfigOpInText(d,e);return await e.fs.writeUtf8(o,d),(new TextEncoder).encode(d)})(a,r,n.path,n.url,n.branch);var f;return await(async(e,a,n,r)=>{const i=await t.writeObject(e,{type:"blob",id:"",content:r}),o=await t.acquireIndexLock(e);try{const r=await t.readIndex(e),s=new Map(r.entries.map(e=>[e.path,e])),c=await e.fs.lstat(t.joinPath(e.layout.workDir,a));s.set(a,Sn(c,t.FILE_MODE.GITLINK,n,a));const d=await e.fs.lstat(t.joinPath(e.layout.workDir,Um));s.set(Um,Sn(d,t.FILE_MODE.REGULAR,i,Um)),await o.commit([...s.values()])}finally{await o.release()}})(a,n.path,u,l),await t.updateConfigOperations(a,[aw(r,"url",s),aw(r,"active","true")]),{name:r,path:n.path,url:s,id:u,branch:d}},iw=(e,a)=>e.entries.find(e=>e.path===a&&e.mode===t.FILE_MODE.GITLINK)?.id,ow=(t,a,n,r)=>{if(void 0!==t.mode)return t.mode;const i=a.submodule?.get(r)?.update,o=void 0===i?void 0:jm(i);if(void 0!==i&&void 0===o)throw e.invalidOption(`submodule.${r}.update`,`invalid value '${i}'`);return o??n??"checkout"},sw=async(e,a,n)=>{if("checkout"===n){const n=await t.getRefStore(e).resolveDirect(Bm);return("direct"!==n.kind||n.id!==a)&&(await Zi(e,{rev:a,detach:!0}),!0)}const r=await t.resolveRef(e,Bm);return"rebase"===n?await rh(e,{upstream:a}):await Ul(e,{rev:a}),await t.resolveRef(e,Bm)!==r},cw=async(e,a={})=>{await vn(e),await bn(e,"submodule update");const n=await Fm(e),r=qm(n,a.paths),i=zm(n),o=await t.readIndex(e);let s=await t.readConfig(e);const c=[];for(const n of r){const r=iw(o,n.path);if(void 0===r)continue;if(await t.assertNoValuelessConfig(e,"submodule",n.name,["update"]),void 0===s.submodule?.get(n.name)?.url){if(await t.assertNoValuelessConfig(e,"submodule",n.name,["url"]),!0!==a.init)continue;await Km(e,{paths:[n.path]}),s=await t.readConfig(e)}const d=ow(a,s,i.get(n.name),n.name);if("none"===d){c.push({name:n.name,path:n.path,id:r,mode:d,cloned:!1,changed:!1});continue}const u=s.submodule?.get(n.name)?.url??n.url??"",l=t.deriveSubmoduleCloneContext(e,n.name,n.path),f=!await e.fs.exists(`${l.layout.gitDir}/HEAD`);f&&(await nw(e,l,u,n.name,n.path),await t.materializeWorktreeFromHead(l)),await t.readObject(l,r);const h=await sw(l,r,d);c.push({name:n.name,path:n.path,id:r,mode:d,cloned:f,changed:h})}return{entries:c}},dw="refs/tags/",uw=async e=>{await vn(e);const a=`${e.layout.gitDir}/refs/tags`;if(!await e.fs.exists(a))return{tags:[]};const n=await e.fs.readdir(a),r=[];for(const a of n){if(!a.isFile)continue;const n=`${dw}${a.name}`,i=await t.resolveRef(e,n);r.push({name:n,id:i})}return r.sort((e,t)=>e.name<t.name?-1:1),{tags:r}},lw=async(e,a)=>{await vn(e);const n=t.validateRefName(`${dw}${a.name}`),r=void 0!==a.target?a.target:await vw(e),i=/^[0-9a-f]{40}$/.test(r)?r:await t.resolveRef(e,r),o=fw(a)?await hw(e,a,i):i;return await gw(e,n,o,!0===a.force,`tag: ${a.name}`),{name:n,id:o}},fw=e=>!0===e.annotate||void 0!==e.message||!0===e.sign,hw=async(e,a,n)=>{const r=await pw(e,n),i=await Fo(e),o=d(a.message??""),s=await mw(e,a,n,r,i,o);return t.createTag(e,{object:n,objectType:r,tagName:a.name,tagger:i,message:o,...void 0!==s?{gpgSignature:s}:{}})},mw=async(e,a,n,r,i,o)=>{const s=await t.readConfig(e);if(a.sign??!0===s.tag?.gpgSign)return ww(e,s,{object:n,objectType:r,tagName:a.name,tagger:i,message:o,extraHeaders:[]},i,a.signKey)},ww=async(e,a,n,r,i)=>{const o=fc(a,r,i),s=t.serializeTagContent({data:n});return hc(e,s,o)},pw=async(e,a)=>(await t.readObject(e,a)).type,gw=async(a,n,r,i,o)=>{try{await t.updateRef(a,n,r,i?{reflogMessage:o}:{expected:"absent",reflogMessage:o})}catch(t){if(t instanceof e.TsgitError&&"REF_UPDATE_CONFLICT"===t.data.code)throw e.tagExists(n);throw t}},yw=async(a,n)=>{await vn(a);const r=t.validateRefName(`${dw}${n.name}`);if(!await a.fs.exists(`${a.layout.gitDir}/${r}`))throw e.tagNotFound(r);return await t.updateRef(a,r,t.ZERO_OID,{delete:!0}),{name:r}},vw=async e=>{const a=await kn(e);return"direct"===a.kind?a.id:t.resolveRef(e,a.target)},bw=e=>`${e}/.git`,kw=t=>new e.TsgitError({code:"WORKTREE_PATH_EXISTS",path:t}),xw=e=>{const t=e.split("/").filter(e=>""!==e);return t[t.length-1]??""},Iw=(e,t)=>{const a=t.startsWith("/")?t:`${e}/${t}`,n=[];for(const e of a.split("/"))""!==e&&"."!==e&&(".."!==e?n.push(e):n.pop());return`/${n.join("/")}`},Ew=(e,t)=>e.worktreeFs?.(t)??e.fs,Tw=(e,a,n)=>{const r=t.commonGitDir(e),i=`${r}/worktrees/${a}`,{promisor:o,hooks:s,command:c,...d}=e;return Object.freeze({...d,fs:Ew(e,n),layout:Object.freeze({workDir:n,gitDir:i,commonDir:r,bare:!1,...void 0!==e.layout.homeDir?{homeDir:e.layout.homeDir}:{}}),cwd:n})},$w=async(e,a)=>{const n=t.parseLooseRef(a);if("direct"===n.type)return{head:n.target,detached:!0};const r=await t.getRefStore(e).resolveDirect(n.target);return{branch:n.target,detached:!1,..."direct"===r.kind?{head:r.id}:{}}},Ow=async(e,t,a)=>{const n=(await e.fs.readUtf8(`${a}/gitdir`)).trim(),r=n.endsWith("/.git")?n.slice(0,-5):n,i=await $w(e,await e.fs.readUtf8(`${a}/HEAD`)),o=await(async(e,t)=>{if(await e.fs.exists(`${t}/locked`))return{reason:(await e.fs.readUtf8(`${t}/locked`)).trim()}})(e,a),s=Ew(e,r),c=await s.exists(n)?void 0:{reason:"gitdir file points to non-existent location"};return{id:t,path:r,bare:!1,main:!1,...i,...void 0!==o?{locked:o}:{},...void 0!==c?{prunable:c}:{}}},Rw=(e,t)=>e.path<t.path?-1:e.path>t.path?1:0,Sw=async e=>{const a=await(async e=>{const a=e.layout.workDir;if(e.layout.bare)return{path:a,detached:!1,bare:!0,main:!0};const n=await e.fs.readUtf8(`${t.commonGitDir(e)}/HEAD`);return{path:a,bare:!1,main:!0,...await $w(e,n)}})(e),n=`${t.commonGitDir(e)}/worktrees`;if(!await e.fs.exists(n))return[a];const r=[];for(const t of await e.fs.readdir(n))t.isDirectory&&r.push(await Ow(e,t.name,`${n}/${t.name}`));return r.sort(Rw),[a,...r]},Dw="HEAD",Aw=async e=>(await vn(e),{entries:await Sw(e)}),Cw=async(e,t)=>{const a=Ew(e,t);if(await a.exists(t)&&(await a.readdir(t)).length>0)throw kw(t)},Mw=async(a,n)=>{if(await vn(a),""===n.path)throw kw("");const r=Iw(a.cwd,n.path);if(""===(i=xw(r))||"."===i||".."===i||i.includes("/")||i.includes("\\")||(e=>{for(const t of e)if(t.charCodeAt(0)<=31)return!0;return!1})(i))throw e.invalidOption("worktree add",`invalid worktree path '${n.path}'`);var i;await Cw(a,r);const o=await id(a,n.commitish??"HEAD"),s=await t.readTree(a,o),c=await(async(e,a,n)=>{if(void 0!==a.branch)return{kind:"create",branchRef:`${di}${a.branch}`,name:a.branch};if(!0===a.detach)return{kind:"detached"};if(void 0!==a.commitish){const n=`${di}${a.commitish}`;return"direct"===(await t.getRefStore(e).resolveDirect(n)).kind?{kind:"checkout",branchRef:n}:{kind:"detached"}}const r=xw(n);return{kind:"create",branchRef:`${di}${r}`,name:r}})(a,n,r);"checkout"===c.kind&&await(async(t,a,n)=>{if(n)return;const r=(await Sw(t)).find(e=>e.branch===a);if(void 0!==r)throw new e.TsgitError({code:"BRANCH_CHECKED_OUT",branch:a,path:r.path})})(a,c.branchRef,!0===n.force),"create"===c.kind&&await mi(a,{name:c.name,startPoint:n.commitish??"HEAD",force:!0===n.force});const d="detached"===c.kind?{kind:"detached",oid:o}:{kind:"branch",ref:c.branchRef},u=await(async(e,a)=>{const n=`${t.commonGitDir(e)}/worktrees`,r=await e.fs.exists(n)?(await e.fs.readdir(n)).filter(e=>e.isDirectory).map(e=>e.name):[];return((e,t)=>{let a=e,n=0;for(;t.has(a);)n+=1,a=`${e}${n}`;return a})(xw(a),new Set(r))})(a,r);await(async(e,a,n,r,i)=>{const o=`${t.commonGitDir(e)}/worktrees/${a}`;var s;return await e.fs.writeUtf8(`${o}/commondir`,"../..\n"),await e.fs.writeUtf8(`${o}/gitdir`,`${bw(n)}\n`),await e.fs.writeUtf8(`${o}/HEAD`,`${(e=>"branch"===e.kind?`ref: ${e.ref}`:e.oid)(r)}\n`),await e.fs.writeUtf8(`${o}/${t.ORIG_HEAD}`,`${i}\n`),await Ew(e,n).writeUtf8(`${n}/.git`,(s=o,`gitdir: ${s}\n`)),o})(a,u,r,d,o);const l=Tw(a,u,r);return await(async(e,a)=>{const n=await t.acquireIndexLock(e);try{const r=await t.readIndex(e),i=await t.materializeTree(e,{targetTree:a,currentIndex:r});await n.commit(i.newIndexEntries)}finally{await n.release()}})(l,s.id),await(async(e,a,n)=>{await t.recordRefUpdate(e,Dw,t.ZERO_OID,n,""),"detached"!==a.kind&&await t.recordRefUpdate(e,Dw,n,n,ja("HEAD"))})(l,c,o),{path:r,id:u,head:o,detached:"detached"===c.kind,..."detached"!==c.kind?{branch:c.branchRef}:{}}},Nw=async(t,a,n)=>{const r=(await Sw(t)).find(e=>e.path===a);if(void 0===r)throw new e.TsgitError({code:"NOT_A_WORKTREE",path:a});if(r.main||void 0===r.id)throw e.invalidOption(`worktree ${n}`,"cannot operate on the main working tree");return r},Pw=(t,a)=>{if(void 0!==t.locked&&!a)throw new e.TsgitError({code:"WORKTREE_LOCKED",path:t.path,reason:t.locked.reason})},Lw=async(e,a,n,r={})=>{await vn(e);const i=Iw(e.cwd,a),o=Iw(e.cwd,n),s=await Nw(e,i,"move");Pw(s,!0===r.force),await Cw(e,o),await Ew(e,[i,o]).rename(i,o);const c=`${t.commonGitDir(e)}/worktrees/${s.id}`;return await e.fs.writeUtf8(`${c}/gitdir`,`${bw(o)}\n`),{from:i,to:o,id:s.id}},_w=async(a,n,r={})=>{await vn(a);const i=Iw(a.cwd,n),o=await Nw(a,i,"remove");if(Pw(o,!0===r.force),!0!==r.force){const t=Tw(a,o.id,i);if(!(await hd(t)).clean)throw(t=>new e.TsgitError({code:"WORKTREE_DIRTY",path:t}))(i)}return await Ew(a,i).rmRecursive(i),await a.fs.rmRecursive(`${t.commonGitDir(a)}/worktrees/${o.id}`),{path:i,id:o.id}},Hw=(e,t)=>!(void 0!==t.minParents&&e<t.minParents||void 0!==t.maxParents&&e>t.maxParents),jw=async(t,a,n,r,i)=>{const o=Uw(a,n);if("untracked"===o.kind)return{skip:"source-not-tracked"};if(!await Bw(t,n,o.kind))return{skip:"bad-source"};if(r===n||r.startsWith(`${n}/`))return{skip:"into-self"};const s=e.dirname(r);if(""!==s&&!await Gw(t,s))throw e.mvDestinationDirectoryMissing(n,r);return await Ww(t,a,r,o.kind,!0===i.force)?{kind:o.kind,entries:o.entries}:{skip:"destination-exists"}},Uw=(e,t)=>{const a=e.get(t);if(void 0!==a)return{kind:"file",entries:[a]};const n=`${t}/`,r=Array.from(e.values()).filter(e=>e.path.startsWith(n));return r.length>0?{kind:"directory",entries:r}:{kind:"untracked"}},Bw=async(e,t,a)=>{const n=await qw(e,t);return void 0!==n&&("directory"===a?n.isDirectory&&!n.isSymbolicLink:n.isFile||n.isSymbolicLink)},Ww=async(e,t,a,n,r)=>!(t.has(a)||void 0!==await qw(e,a))||"file"===n&&r,Fw=(e,t,a)=>`${a}${e.path.slice(t.length)}`,zw=(t,a,n)=>{switch(t){case"source-not-tracked":return e.mvSourceNotTracked(a,n);case"bad-source":return e.mvBadSource(a,n);case"destination-exists":return e.mvDestinationExists(a,n);case"into-self":return e.mvIntoSelf(a,n)}},qw=async(e,a)=>e.fs.lstat(((e,a)=>t.joinPath(e.layout.workDir,a))(e,a)).catch(()=>{}),Gw=async(e,t)=>{const a=await qw(e,t);return!0===a?.isDirectory&&!0!==a.isSymbolicLink},Vw=(e,t,a)=>{const n=Ld(a),r=jd(e,void 0,n),i=Ud(e,t.remote,n);return{branchFull:a,fetchRemote:r,pushRemote:i,triangular:i!==r,merge:e.branch?.get(n)?.merge}},Kw="push:enumerate-objects",Xw="push:upload",Yw=t.ObjectId.from("0".repeat(40)),Zw=new Set(["side-band-64k","side-band"]),Jw=async(a,n)=>{const r=await kn(a),i=xn(r),o=void 0!==i?Ld(i):void 0,s=await t.readConfig(a),c=Ud(s,n.remote,o),d=await ap(a,c),u=await(async(a,n,r)=>{if(void 0!==n.refspecs&&n.refspecs.length>0)return{kind:"explicit",refspecs:n.refspecs.map(Ih)};if("current"===a.push?.default)return(t=>{const a=xn(t);if(void 0===a)throw e.pushDetachedNoRefspec();return{kind:"fixed",refspecs:[Ih(`${a}:${a}`)]}})(r);if("nothing"===a.push?.default)throw e.pushDefaultNothing();return"upstream"===a.push?.default?((t,a,n)=>{const r=xn(n);if(void 0===r)throw e.pushDetachedNoRefspec();const{branchFull:i,pushRemote:o,triangular:s,merge:c}=Vw(t,a,r);if(s)throw e.pushRemoteNotUpstream(o,i);if(void 0===c)throw e.noUpstreamConfigured(i);return{kind:"fixed",refspecs:[Ih(`${i}:${c}`)]}})(a,n,r):"matching"===a.push?.default?{kind:"matching"}:((a,n,r)=>{const i=xn(r);if(void 0===i)throw e.pushDetachedNoRefspec();const{branchFull:o,triangular:s,merge:c}=Vw(a,n,i);if(s)return{kind:"fixed",refspecs:[Ih(`${o}:${o}`)]};if(void 0===c)throw e.noUpstreamConfigured(o);const d=t.RefName.from(c);if(Ld(d)!==Ld(o))throw e.pushUpstreamNameMismatch(o,d);return{kind:"fixed",refspecs:[Ih(`${o}:${d}`)]}})(a,n,r)})(s,n,r),l=Bs(a,d,"git-receive-pack");try{return await Qw(a,n,c,d,u,l)}finally{await l.close()}},Qw=async(e,a,n,r,i,o)=>{const s=await(async e=>(async e=>{const t=await e.advertisement();return Ft(t,"git-receive-pack",{servicePrologue:e.servicePrologue})})(e))(o),c=((e,t,a)=>{if("matching"!==e.kind)return e.refspecs;const n=new Set(t.refs.filter(e=>e.name.startsWith(di)).map(e=>e.name));return a.filter(e=>n.has(e)).map(e=>Ih(`${e}:${e}`))})(i,s,"matching"===i.kind?(await t.enumerateRefs(e)).filter(e=>e.startsWith(di)):[]),d=(await np(e,c,s,n,a)).filter(e=>e.localOid!==e.remoteOid);return 0===d.length?{remote:n,url:r,pushedRefs:[]}:(await ep(e,a.noVerify??!1,n,r,d),{remote:n,url:r,pushedRefs:await up(e,o,s,d,n,a,r)})},ep=async(e,a,n,r,i)=>{if(a)return;const o=i.map(tp).join("");await t.runHook(e,"pre-push",{args:[n,r],stdin:o})},tp=e=>`${e.parsed.isDelete?"(delete)":e.parsed.src} ${e.localOid} ${e.parsed.dst} ${e.remoteOid}\n`,ap=async(a,n)=>{Wd(n);const r=await t.readConfig(a);await t.assertNoValuelessConfig(a,"remote",n,["pushurl","url"]);const i=r.remote?.get(n),o=i?.pushUrl??i?.url;if(void 0===o)throw e.remoteNotConfigured(n);return o},np=async(e,t,a,n,r)=>{const i=rp(a.refs),o=[];for(const a of t)o.push(await ip(e,a,i,n,r));return o},rp=e=>{const t=new Map;for(const a of e)t.set(a.name,a.id);return t},ip=async(a,n,r,i,o)=>{const s=r.get(n.dst)??Yw;if(n.isDelete){if(s===Yw)throw e.invalidOption("refspecs",`delete target ${n.dst} is not advertised`);return{parsed:n,localOid:Yw,remoteOid:s}}const c=await t.resolveRef(a,n.src);return await op(a,n,c,s,i,o),{parsed:n,localOid:c,remoteOid:s}},op=async(t,a,n,r,i,o)=>{const s=await sp(t,a,i,o);if(void 0===s){if("force"!==a.force&&!0!==o.force&&r!==Yw&&!await cp(t,r,n))throw e.nonFastForward(a.dst,n,r)}else if(s!==r)throw e.pushRejected(a.dst,"lease-mismatch",dp())},sp=async(a,n,r,i)=>{if(void 0===i.forceWithLease)return;if("auto"!==i.forceWithLease)return i.forceWithLease;if(!n.dst.startsWith(di))throw e.invalidOption("forceWithLease","lease-on-non-branch");const o=n.dst.slice(11);return t.resolveRef(a,`refs/remotes/${r}/${o}`)},cp=async(e,a,n)=>{for await(const r of t.walkCommits(e,{from:[n],ignoreMissing:!0}))if(r.id===a)return!0;return!1},dp=()=>({unpackOk:!0,refUpdates:[]}),up=async(a,n,r,i,o,s,c)=>{const d=await lp(a,s),u=fp(r.capabilities),l=hp(d,u,o),f=i.filter(e=>!e.parsed.isDelete).map(e=>e.localOid),h=r.refs.map(e=>e.id),m=await wp(a,f,h),w=await t.buildPack(a,{oids:m}),p=((e,t=!1)=>{const a=Pe.filter(e=>e!==Me),n=t?[...a,Le]:a;return[...He(e,n),Me]})(r.capabilities,l.signing),g=l.signing?await mp(a,p,i,w.bytes,c,l.nonce):(t=>{if(0===t.updates.length)throw new e.TsgitError({code:"EMPTY_RECEIVE_UPDATES"});const a=t.updates.map((e,a)=>It(e,0===a?t.capabilities:[])),n=mt(a),r=new Uint8Array(n.byteLength+t.packfile.byteLength);return r.set(n,0),r.set(t.packfile,n.byteLength),r})({updates:i.map(pp),capabilities:p,packfile:w.bytes}),y=await gp(a,n,g),v=await yp(a,y,p);if(!v.unpackOk)throw e.pushRejected(i[0]?.parsed.dst,v.unpackError??"unpack failed",v);return await bp(a,i,v.refUpdates,o)},lp=async(e,a)=>{if(void 0!==a.signed)return a.signed;const n=await t.readConfig(e),r=n.push?.gpgSign;return"if-asked"===r?"if-asked":"true"===r?"yes":"no"},fp=e=>e.find(e=>e.startsWith(`${Le}=`))?.slice(10),hp=(t,a,n)=>{if("yes"===t&&void 0===a)throw e.signedPushUnsupported(n);return void 0===a||"no"===t?{signing:!1}:{signing:!0,nonce:a}},mp=async(e,a,n,r,i,o)=>{const s=await t.readConfig(e),c=await Fo(e),d=`${t.resolveSigningSelector({...void 0!==s.user?.signingKey?{signingKey:s.user.signingKey}:{},fallbackIdent:`${c.name} <${c.email}>`})} ${c.timestamp} ${c.timezoneOffset}`,u=gs(i),l=n.map(pp),f=(e=>{const t=e.reduce((e,t)=>e+t.byteLength,0),a=new Uint8Array(t);let n=0;for(const t of e)a.set(t,n),n+=t.byteLength;return a})(Et({pusher:d,pushee:u,nonce:o,updates:l})),h=await hc(e,f,fc(s,c,void 0));return(e=>{const t=xt.encode(`push-cert\0 ${e.capabilities.join(" ")}`),a=(n=e.armor,(n.endsWith("\n")?n.slice(0,-1):n).split("\n").map(e=>`${e}\n`)).map(e=>xt.encode(e));var n;const r=xt.encode("push-cert-end\n"),i=mt([t,...Et(e),...a,r]),o=new Uint8Array(i.byteLength+e.packfile.byteLength);return o.set(i,0),o.set(e.packfile,i.byteLength),o})({updates:l,capabilities:a.filter(e=>e!==Le&&!e.startsWith(`${Le}=`)),armor:h,pusher:d,pushee:u,nonce:o,packfile:r})},wp=async(e,a,n)=>{if(0===a.length)return[];const r=[];for await(const i of t.enumeratePushObjects(e,{wants:a,haves:n}))r.push(i);return r},pp=e=>({name:e.parsed.dst,oldId:e.remoteOid,newId:e.localOid}),gp=async(e,t,a)=>{e.progress.start(Xw);try{return await t.exchange(a)}finally{e.progress.end(Xw)}},yp=async(t,a,n)=>{if(vp(n)){const n=Dt(a,{onProgress:a=>t.progress.update(Xw,0,void 0,e.sanitize(a))});return Ot(gt(n))}return Ot(a)},vp=e=>e.some(e=>Zw.has(e)),bp=async(e,t,a,n)=>{const r=new Map;for(const e of a)r.set(e.name,e);const i=[];for(const a of t){const t=r.get(a.parsed.dst),o=!0===t?.accepted;o&&await kp(e,a,n),i.push({name:a.parsed.dst,oldId:a.remoteOid,newId:a.localOid,status:o?"ok":"rejected",...void 0!==t?.reason?{reason:t.reason}:{}})}return i},kp=async(e,a,n)=>{if(!a.parsed.dst.startsWith(di))return;if(a.parsed.isDelete)return;const r=`refs/remotes/${n}/${a.parsed.dst.slice(11)}`;t.isSafeRefName(r)&&await t.updateRef(e,r,a.localOid,{reflogMessage:"update by push"})},xp=new TextEncoder,Ip=65536,Ep=e=>0|e,Tp=(e,t,a)=>e.cost[t+e.columnCount*a],$p=(e,t,a)=>{const n=0===a?1:0;let r=Ep(Tp(e,n,t)-e.v[n]);for(let n=1;n<e.columnCount;n++){const i=Ep(Tp(e,n,t)-e.v[n]);n!==a&&r>i&&(r=i)}e.v[a]=Ep(e.v[a]-r)},Op=(e,t,a,n,r)=>{const i=((e,t)=>{let a=0,n=Ep(Tp(e,a,t)-e.v[a]),r=-1,i=Ip;for(let o=1;o<e.columnCount;o++){const s=Ep(Tp(e,o,t)-e.v[o]);i>s&&(n<s?(i=s,r=o):(i=n,n=s,r=a,a=o))}return r<0&&(r=a,i=n),{j1:a,u1:n,j2:r,u2:i}})(e,a);let o=i.j1,s=e.columnToRow[o],c=n,d=r;return i.u1<i.u2?e.v[o]=Ep(e.v[o]-(i.u2-i.u1)):s>=0&&(o=i.j2,s=e.columnToRow[o]),s>=0&&(i.u1<i.u2?t[--c]=s:t[d++]=s),e.rowToColumn[a]=o,e.columnToRow[o]=a,{k:c,freeCount:d}},Rp=(e,t,a,n)=>{let r=t[a[n.up++]],i=-1;for(let o=n.up;o<e.columnCount;o++){const e=a[o];i=e;const s=t[e];s<=r&&(s<r&&(n.up=n.low,r=s),a[o]=a[n.up],a[n.up++]=e)}return{min:r,lastJ:i}},Sp=(e,t,a)=>{for(let n=a.low;n<a.up;n++)if(-1===e.columnToRow[t[n]])return!0;return!1},Dp=(e,t,a,n,r,i)=>{do{const o=n[r.low++],s=e.columnToRow[o],c=Ep(Tp(e,o,s)-e.v[o]-i);for(let o=r.up;o<e.columnCount;o++){const d=n[o],u=Ep(Tp(e,d,s)-e.v[d]-c);if(u<t[d]&&(t[d]=u,a[d]=s,u===i)){if(-1===e.columnToRow[d])return d;n[o]=n[r.up],n[r.up++]=d}}}while(r.low!==r.up);return-1},Ap=(e,t)=>{const a=new Array(e.columnCount),n=new Array(e.columnCount),r=new Array(e.columnCount);for(let i=0;i<e.columnCount;i++)a[i]=Ep(Tp(e,i,t)-e.v[i]),n[i]=t,r[i]=i;const i=((e,t,a,n)=>{const r={low:0,up:0};for(;;){const i=r.low,{min:o,lastJ:s}=Rp(e,t,n,r);if(Sp(e,n,r))return{j:s,last:i,min:o};const c=Dp(e,t,a,n,r,o);if(c>=0)return{j:c,last:i,min:o}}})(e,a,n,r);for(let t=0;t<i.last;t++){const n=r[t];e.v[n]=Ep(e.v[n]+(a[n]-i.min))}let o,s=i.j;do{o=n[s],e.columnToRow[s]=o;const t=e.rowToColumn[o];e.rowToColumn[o]=s,s=t}while(t!==o)},Cp=(e,t,a)=>e<0?Math.trunc(t*a/100):Ip,Mp=(e,t,a,n,r)=>{return a===r?0:a<0&&n<0?(i=t.diff,j(xp.encode(e.diff),xp.encode(i),3).reduce((e,t)=>e+1+t.body.length,0)):Ip;var i},Np=(e,t,a)=>{const n=e.length,r=t.length,i=new Array(n).fill(-1),o=new Array(r).fill(-1),{exactOld:s,exactNew:c}=((e,t)=>{const a=new Array(e.length).fill(-1),n=new Array(t.length).fill(-1),r=new Map;return e.forEach((e,t)=>{const a=r.get(e.diff);a?a.push(t):r.set(e.diff,[t])}),t.forEach((e,t)=>{const i=r.get(e.diff),o=i?.pop();void 0!==o&&(a[o]=t,n[t]=o)}),{exactOld:a,exactNew:n}})(e,t),d=n+r,u=((e,t,a,n,r)=>{const i=e.length,o=t.length,s=i+o,c=new Array(s*s).fill(0);for(let d=0;d<i;d++){for(let r=0;r<o;r++)c[d+s*r]=Mp(e[d],t[r],a[d],n[r],r);const i=Cp(a[d],e[d].diffsize,r);for(let e=o;e<s;e++)c[d+s*e]=i}for(let e=0;e<o;e++){const a=Cp(n[e],t[e].diffsize,r);for(let t=i;t<s;t++)c[t+s*e]=a}return c})(e,t,s,c,a),{columnToRow:l}=((e,t)=>{const a=new Array(e),n=new Array(e);if(e<2)return a.fill(0),n.fill(0),{columnToRow:a,rowToColumn:n};a.fill(-1),n.fill(-1);const r={columnCount:e,rowCount:e,cost:t,v:new Array(e).fill(0),columnToRow:a,rowToColumn:n};(e=>{for(let t=e.columnCount-1;t>=0;t--){let a=0;for(let n=1;n<e.rowCount;n++)Tp(e,t,a)>Tp(e,t,n)&&(a=n);e.v[t]=Tp(e,t,a),-1===e.rowToColumn[a]?(e.rowToColumn[a]=t,e.columnToRow[t]=a):(e.rowToColumn[a]>=0&&(e.rowToColumn[a]=-2-e.rowToColumn[a]),e.columnToRow[t]=-1)}})(r);const i=new Array(e);let o=((e,t)=>{let a=0;for(let n=0;n<e.rowCount;n++){const r=e.rowToColumn[n];-1===r?t[a++]=n:r<-1?e.rowToColumn[n]=-2-r:$p(e,n,r)}return a})(r,i);if(0===o)return{columnToRow:a,rowToColumn:n};o=((e,t,a)=>{let n=a;for(let a=0;a<2;a++){let a=0;const r=n;for(n=0;a<r;){const r=t[a++],i=Op(e,t,r,a,n);a=i.k,n=i.freeCount}}return n})(r,i,o);for(let e=0;e<o;e++)Ap(r,i[e]);return{columnToRow:a,rowToColumn:n}})(d,u);for(let e=0;e<n;e++){const t=l[e];t>=0&&t<r&&(i[e]=t,o[t]=e)}return{old:e.map((e,t)=>({patch:e,matching:i[t]})),new:t.map((e,t)=>({patch:e,matching:o[t]}))}},Pp=new TextEncoder,Lp=(e,t)=>({position:t+1,id:e.id}),_p=(e,t)=>({status:"only-old",old:Lp(e.patch,t),subject:e.patch.subject}),Hp=(e,t)=>({status:"only-new",new:Lp(e.patch,t),subject:e.patch.subject}),jp=(e,a,n,r)=>{const i=e.patch.patch!==a.patch.patch;return{status:i?"changed":"unchanged",old:Lp(e.patch,n),new:Lp(a.patch,r),subject:e.patch.subject,...i?{diffOfDiffs:t.diffLines(Pp.encode(e.patch.patch),Pp.encode(a.patch.patch))}:{}}},Up=new TextDecoder("utf-8",{fatal:!1}),Bp=e=>32===e||e>=9&&e<=13,Wp=e=>{if(0===e.length||!((t=e[0])>=65&&t<=90||t>=97&&t<=122||95===t||36===t))return;var t;let a=Math.min(e.length,80);for(;a>0&&Bp(e[a-1]);)a--;return Up.decode(e.subarray(0,a))},Fp=(e,t,a)=>{const n=t>a?-1:1;for(let r=t;r!==a&&r>=0&&r<e.length;r+=n){const t=Wp(e[r]);if(void 0!==t)return{index:r,heading:t}}},zp=new Uint8Array,qp=e=>"add"===e.type?`${e.newPath} (new)`:"delete"===e.type?`${e.oldPath} (deleted)`:"rename"===e.type||"copy"===e.type?`${e.oldPath} => ${e.newPath}`:e.oldMode===e.newMode?e.path:`${e.path} (mode change ${e.oldMode} => ${e.newMode})`,Gp=e=>"delete"===e.type?e.oldPath:"add"===e.type||"rename"===e.type||"copy"===e.type?e.newPath:e.path,Vp=e=>{const t=`${a=e.kind,"context"===a?" ":"delete"===a?"-":"+"}${e.text}`;var a;return e.trailingNoNewline?[t," \"]:[t]},Kp=e=>e.oldLen>0?e.oldStart-1:e.oldStart,Xp=e=>{const a=e.oldContent??zp,n=e.newContent??zp;return t.isBinary(a)||t.isBinary(n)?{lines:[Yp(e,a,n)],count:1}:((e,a,n)=>{const r=t.splitLines(e),i=[];let o=-1,s="";for(const e of a){const t=Kp(e),a=Fp(r,t-1,o);o=t-1,void 0!==a&&(s=a.heading),i.push(""===s?"@@":`@@ ${n}: ${s}`);for(const t of e.body)for(const e of Vp(t))i.push(e)}return{lines:i,count:i.length}})(a,j(a,n,3),Gp(e.change))},Yp=(e,t,a)=>` Binary files ${0===t.length?"/dev/null":Gp(e.change)} and ${0===a.length?"/dev/null":Gp(e.change)} differ`,Zp=e=>{const t=(e=>{var t;return` ## Metadata ##\nAuthor: ${e.authorName} <${e.authorEmail}>\n\n ## Commit message ##\n`+(t=e.message,""===t?[]:(t.endsWith("\n")?t.slice(0,-1):t).split("\n").map(e=>` ${e}`.replace(/[\t\n\v\f\r ]+$/u,""))).map(e=>`${e}\n`).join("")})(e);let a=t,n=0;for(const t of e.files){const e=` ## ${qp(t.change)} ##`,{lines:r,count:i}=Xp(t);a+=`\n${e}\n${r.map(e=>`${e}\n`).join("")}`,n+=1+i}return{id:e.id,subject:e.subject,patch:a,diff:a.slice(e.files.length>0?t.length+1:0),diffsize:n}},Jp=async(e,a)=>{const n=a.data.parents[0],r=void 0!==n?await(async(e,a)=>{const n=await t.readObject(e,a);if("commit"!==n.type)throw t.unexpectedObjectType("commit",n.type,a);return n.data.tree})(e,n):void 0,i=await t.diffTrees(e,r,a.data.tree,{recursive:!0,detectRenames:!0}),o=await t.materialisePatchFiles(e,i.changes);return{id:a.id,authorName:a.data.author.name,authorEmail:a.data.author.email,subject:c(a.data.message),message:a.data.message,files:o}},Qp=async(e,a)=>{const n=await id(e,a.base),r=await id(e,a.tip),i=[];for await(const a of t.walkCommitsByDate(e,{from:[r],until:[n]}))a.data.parents.length<=1&&i.push(a);return i.reverse(),(async(e,t)=>{const a=new Array(t.length);let n=0;const r=Math.min(16,t.length);return await Promise.all(Array.from({length:r},()=>(async()=>{for(;n<t.length;){const r=n++;a[r]=await Jp(e,t[r])}})())),a})(e,i)},eg=e=>t.validateRefName(e),tg=(e,t,a)=>{const n=e[t],r=e[t+1];return e.filter((e,a)=>a!==t).map(e=>a&&e===r?{...e,oldId:n.oldId}:e)},ag=(t,a)=>{const n=Ma(t,a);if(void 0===n)throw e.revparseUnresolved(t);return n},ng=(e,t,a,n)=>{const r=t.has(e.newId)?a:n;return e.identity.timestamp>=r},rg=async e=>{const a=await ig(e),n=new Set;if(0===a.length)return n;for await(const r of t.walkCommits(e,{from:a,ignoreMissing:!0}))n.add(r.id);return n},ig=async e=>{const a=new Set;for(const n of await t.enumerateRefs(e)){const t=await og(e,n);void 0!==t&&a.add(t)}return[...a]},og=async(a,n)=>{try{return await t.resolveRef(a,n)}catch(t){if(t instanceof e.TsgitError)return;throw t}},sg=(e,t)=>{const a=e.get(t.path);return void 0===a||a.id!==t.id||a.mode!==t.mode},cg=async e=>(await t.readHeadTree(e))?.entries??new Map,dg=/^[ \t\n\v\f\r]+/,ug=e=>{const t=c(e).replace(dg,"");return(t.startsWith("[PATCH")?lg(t):t).replace(dg,"")},lg=e=>e.slice(e.indexOf("]")+1),fg=new TextEncoder,hg=async(e,a,n,r=!1)=>{const i=void 0!==a?await Gr(e,a):void 0;return t.diffTrees(e,i,n,{recursive:!0,detectRenames:!0,...r?{withStat:!0}:{}})},mg=async(e,a,n)=>wg(e,await t.readObject(e,await $r(e,a)),n);async function wg(e,a,n){switch(a.type){case"blob":return{kind:"blob",id:a.id,content:a.content};case"tree":return function(e){const t=e.entries.map(e=>({name:e.name,mode:e.mode,id:e.id}));return{kind:"tree",id:e.id,entries:t}}(a);case"commit":return async function(e,t,a){const{parents:n,tree:r}=t.data;if(n.length>=2){const i=[];for(const t of n)i.push(await hg(e,t,r,a));return{kind:"commit",id:t.id,commit:t.data,perParent:i}}const i=await hg(e,n[0],r,a);return{kind:"commit",id:t.id,commit:t.data,patch:i}}(e,a,n);case"tag":return async function(e,a,n){const r=await wg(e,await t.readObject(e,a.data.object),n);return{kind:"tag",id:a.id,tag:a.data,target:r}}(e,a,n)}}exports.add=async(a,n,r={})=>{await vn(a),await bn(a,"add"),await En(a,{except:[Xa,Za,Ja,Ya]});const i=await t.maybeBuildAttributeProvider(a);if(!0===r.all){if(0!==n.length)throw e.invalidOption("all","pathspec must be empty when all=true");return(async(e,a,n)=>{const r=await t.buildRepoIgnorePredicate(e),i=await t.acquireIndexLock(e);try{const a=await Yn(e),o=new Map(a),s=new Set,c=[],d=[];for await(const i of t.walkWorkingTree(e,{ignore:r})){const t=await Xn(e,i,a,s,n);void 0!==t&&(o.set(t.path,t.entry),"added"===t.kind?c.push(t.path):"modified"===t.kind&&d.push(t.path))}const u=await Vn(a,s,r);for(const e of u)o.delete(e);return c.sort(),d.sort(),u.sort(),await i.commit(Array.from(o.values())),{added:c,modified:d,removed:u}}finally{await i.release()}})(a,0,i)}if(0===n.length)throw e.emptyPathspec();return(async(e,t,a)=>{const{matcher:n,literalMustMatch:r,hasGlob:i}=Ln(t);return!i&&await qn(e,r)?zn(e,r,a):Gn(e,n,r,a)})(a,n,i)},exports.archive=async function(e,a){await gn(e);const n=await $r(e,a.treeish),r=await async function(e,a){const n=await t.readObject(e,a);if("commit"===n.type)return{tree:n.data.tree,commit:a,commitTime:n.data.committer.timestamp};if("tag"===n.type){const n=await tr(e,a,"commit"),r=await t.readObject(e,n);if("commit"!==r.type)throw t.unexpectedObjectType("commit",r.type,n);return{tree:r.data.tree,commit:n,commitTime:r.data.committer.timestamp}}if("tree"===n.type)return{tree:a};throw t.unexpectedObjectType("tree",n.type,a)}(e,n),{tree:i}=r;if("commit"in r){const{commit:t,commitTime:a}=r;return{tree:i,commit:t,commitTime:a,entries:Ur(e,i)}}return{tree:i,entries:Ur(e,i)}},exports.bindBranchNamespace=(e,t)=>Object.freeze({list:()=>(t(),fi(e)),create:a=>(t(),mi(e,a)),delete:a=>(t(),wi(e,a)),rename:a=>(t(),pi(e,a))}),exports.bindBundleNamespace=(e,t)=>Object.freeze({create:a=>(t(),_i(e,a)),verify:a=>(t(),Fi(e,a)),listHeads:a=>(t(),Bi(e,a))}),exports.bindCherryPickNamespace=(e,t)=>Object.freeze({run:a=>(t(),Qo(e,a)),continue:a=>(t(),ts(e,a)),skip:a=>(t(),as(e,a)),abort:()=>(t(),ns(e))}),exports.bindConfigNamespace=(e,t)=>Object.freeze({get:a=>(t(),Mc(e,a)),getAll:a=>(t(),Nc(e,a)),getRegexp:a=>(t(),Pc(e,a)),list:a=>(t(),Lc(e,a)),set:a=>(t(),_c(e,a)),unset:a=>(t(),Hc(e,a)),unsetAll:a=>(t(),jc(e,a)),renameSection:a=>(t(),Uc(e,a)),removeSection:a=>(t(),Bc(e,a))}),exports.bindMergeNamespace=(e,t)=>Object.freeze({run:a=>(t(),Ul(e,a)),continue:a=>(t(),Wc(e,a)),abort:()=>(t(),Rn(e))}),exports.bindNotesNamespace=(e,t)=>Object.freeze({add:a=>(t(),vf(e,a)),read:a=>(t(),bf(e,a)),list:a=>(t(),kf(e,a)),remove:a=>(t(),xf(e,a))}),exports.bindRebaseNamespace=(e,t)=>Object.freeze({run:a=>(t(),rh(e,a)),continue:()=>(t(),sh(e)),skip:()=>(t(),ch(e)),abort:()=>(t(),dh(e))}),exports.bindRemoteNamespace=(e,t)=>Object.freeze({list:()=>(t(),Ah(e)),add:a=>(t(),Ch(e,a)),remove:a=>(t(),Nh(e,a)),rename:a=>(t(),Lh(e,a)),setUrl:a=>(t(),_h(e,a)),show:a=>(t(),Hh(e,a))}),exports.bindRevertNamespace=(e,t)=>Object.freeze({run:a=>(t(),Kh(e,a)),continue:()=>(t(),Xh(e)),skip:()=>(t(),Yh(e)),abort:()=>(t(),Zh(e))}),exports.bindSparseCheckoutNamespace=(e,t)=>Object.freeze({list:()=>(t(),sm(e)),set:a=>(t(),um(e,a)),add:a=>(t(),lm(e,a)),reapply:a=>(t(),fm(e,a)),disable:a=>(t(),hm(e,a))}),exports.bindStashNamespace=(e,t)=>Object.freeze({push:a=>(t(),Im(e,a)),list:()=>(t(),Tm(e)),apply:a=>(t(),Rm(e,a)),pop:a=>(t(),Sm(e,a)),drop:a=>(t(),$m(e,a))}),exports.bindSubmoduleNamespace=(e,t)=>Object.freeze({list:a=>(t(),tw(e,a)),add:a=>(t(),rw(e,a)),init:a=>(t(),Km(e,a)),update:a=>(t(),cw(e,a)),sync:a=>(t(),Zm(e,a)),deinit:a=>(t(),ew(e,a))}),exports.bindTagNamespace=(e,t)=>Object.freeze({list:()=>(t(),uw(e)),create:a=>(t(),lw(e,a)),delete:a=>(t(),yw(e,a))}),exports.bindWorktreeNamespace=(e,t)=>Object.freeze({list:()=>(t(),Aw(e)),add:a=>(t(),Mw(e,a)),move:(a,n,r)=>(t(),Lw(e,a,n,r)),remove:(a,n)=>(t(),_w(e,a,n))}),exports.blame=async(a,n,r={})=>{await vn(a);const i=t.FilePath.from(n),o={ctx:a,queue:new t.BinaryHeap(t.precedes),finalized:[]};if(!0===r.worktree){if(void 0!==r.rev)throw e.invalidOption("worktree","cannot combine with a revision");await(async(a,n)=>{t.validateWorkingTreePath(n);const r=await zr(a.ctx,Xr),i=await qr(a.ctx,r),o=await Yr(a.ctx,n),s=t.splitLines(o).length;if(0===s)return;const c=[{finalStart:0,count:s,sourceStart:0}],d=await ci(a.ctx,i.tree,n);if(void 0!==d){const{passed:e,kept:s}=Br(c,t.diffLines(d.content,o));return oi(a,r,n,i.committer.timestamp,d.content,d.id,e),void Zr(a,n,o,s,{commit:r,path:n})}if(!(await t.readIndex(a.ctx)).entries.some(e=>e.path===n))throw e.pathNotInTree(Xr,n);Zr(a,n,o,c,void 0)})(o,i)}else{const n=r.rev??Xr;await(async(a,n,r,i)=>{const o=await qr(a.ctx,n),s=await ci(a.ctx,o.tree,r);if(void 0===s)throw e.pathNotInTree(i,r);const c=t.splitLines(s.content).length;0!==c&&oi(a,n,r,o.committer.timestamp,s.content,s.id,[{finalStart:0,count:c,sourceStart:0}])})(o,await zr(a,n),i,n)}await(async e=>{for(;e.queue.size()>0;){const{value:t}=e.queue.pop();await Qr(e,t)}})(o);const s=[...o.finalized].sort((e,t)=>e.finalLine-t.finalLine);return{path:i,lines:Jr(s,r.range)}},exports.branchCreate=mi,exports.branchDelete=wi,exports.branchList=fi,exports.branchRename=pi,exports.bundleCreate=_i,exports.bundleListHeads=Bi,exports.bundleVerify=Fi,exports.catFile=async(e,a)=>{await vn(e);const n=a.ids.map(Ki),r=void 0===a.maxBytes?void 0:{maxBytes:a.maxBytes},i=[];for await(const a of t.catFileBatch(e,n,r))i.push(a);return{kind:"batch",entries:i}},exports.checkout=Zi,exports.cherryPickAbort=ns,exports.cherryPickContinue=ts,exports.cherryPickRun=Qo,exports.cherryPickSkip=as,exports.clone=Qs,exports.commit=mc,exports.configGet=Mc,exports.configGetAll=Nc,exports.configGetRegexp=Pc,exports.configList=Lc,exports.configRemoveSection=Bc,exports.configRenameSection=Uc,exports.configSet=_c,exports.configUnset=Hc,exports.configUnsetAll=jc,exports.createPromisorRemote=e=>({fetch:async t=>{const a=await cu(e,t);return"no-promisor"===a.kind?{attempted:!1,requested:t.length,fetched:0}:{attempted:!0,requested:a.requested,fetched:a.fetched}}}),exports.describe=async function(a,n,r={}){if(await vn(a),!0===r.contains)return(async(t,a,n)=>{const r=!n.all,i=e=>r?e.map(e=>`${Ed}${e}`):[],o=await sd(t,a,{tags:r,refs:i(n.include),exclude:i(n.exclude)});if(void 0===o.ref&&!n.always)throw e.cannotDescribe(o.oid);return o})(a,n,(t=>{for(const a of Xc)if(void 0!==t[a])throw e.invalidOption(a,`option ${a} cannot be combined with contains`);return{all:!0===t.all,include:Yc(t.match),exclude:Yc(t.exclude),always:!0===t.always}})(r));const i=((t,a)=>{const n=!0===t.dirty,r=!0===t.broken;if((n||r)&&a)throw e.invalidOption("dirty","option dirty and commit-ishes cannot be used together");return{tags:!0===t.tags,all:!0===t.all,maxCandidates:Zc(t),always:!0===t.always,firstParent:!0===t.firstParent,include:Yc(t.match),exclude:Yc(t.exclude),dirty:n,broken:r}})(r,void 0!==n),o=await zr(a,n??"HEAD"),s=await(async(e,t)=>{if(!t.dirty&&!t.broken)return!1;try{const t=await hd(e);return t.changes.length>0||t.unmerged.length>0}catch(e){if(t.broken)return!0;throw e}})(a,i),c=await(async(e,a)=>{const n=[...await t.enumerateRefs(e)].filter(e=>"HEAD"!==e&&(a.all||e.startsWith(Ed))).sort(),r=((e,t)=>{const a=e.map(qc),n=t.map(qc);return{matches:e=>!(0!==a.length&&!a.some(t=>t.test(e))||n.some(t=>t.test(e)))}})(a.include,a.exclude),i=t.getRefStore(e),o=new Map;for(const t of n){const n=await i.resolveDirect(t);if("direct"!==n.kind)continue;const s=await Kc(e,n.id);if(void 0===s)continue;const c=Gc(t,a.all);if(!r.matches(c))continue;const d=Od(t,c,s),u=o.get(s.commit.id);(void 0===u||Vc(u,d))&&o.set(s.commit.id,d)}return o})(a,i),d=(e=>e.all?0:e.tags?1:2)(i),u=c.get(o);if(void 0!==u&&u.priority>=d)return Td(u.name,0,o,s,i.all);if(0===i.maxCandidates){if(i.always)return $d(o,s);throw e.noExactMatch(o)}const{best:l,sawUnannotated:f}=await(async(e,a,n,r,i)=>{const o=n.size,s=new Map,c=[];let d=0;const u={annotatedCount:0,sawUnannotated:!1};let l;for await(const f of t.commitDateWalk(e,{from:[a],firstParent:r.firstParent})){if(void 0===l&&Sd(c,r.maxCandidates,o)&&(l=Ad(c),void 0===l))break;if(void 0===l){if(d+=1,Rd({step:f,depth:d-1,nameMap:n,minPriority:i,candidates:c,reach:s,tally:u,firstParent:r.firstParent}))break}else if(Dd(s,l,f,r.firstParent))break}return{best:l??Ad(c),sawUnannotated:u.sawUnannotated}})(a,o,c,i,d);if(void 0!==l)return Td(l.name,l.depth,o,s,i.all);if(i.always)return $d(o,s);if(0===c.size)throw e.noNames(o);throw f?e.noAnnotatedNames(o):e.noReachableNames(o)},exports.diff=async function(e,a={}){await vn(e);const n=await od(e,a.from??"HEAD"),r=void 0!==a.to?await od(e,a.to):void 0,i=function(e,t){const a=e.detectRenames??t?.detectRenames,n=e.ignoreWhitespace??t?.ignoreWhitespace;return{...!0===a?{detectRenames:!0}:{},...void 0!==e.renameOptions?{renameOptions:e.renameOptions}:{},...!0===e.recursive?{recursive:!0}:{},...!0===e.withStat?{withStat:!0}:{},...void 0!==n?{ignoreWhitespace:n}:{},...!0===(e.ignoreCrAtEol??t?.ignoreCrAtEol)?{ignoreCrAtEol:!0}:{},...!0===(e.ignoreBlankLines??t?.ignoreBlankLines)?{ignoreBlankLines:!0}:{}}}(a,e.config);return t.diffTrees(e,n,r,i)},exports.fetch=zd,exports.fetchMissing=async(t,a)=>{const n=await cu(t,a.oids);if("no-promisor"===n.kind)throw e.noPromisorRemote();return{remote:n.remote,requested:n.requested,fetched:n.fetched}},exports.fsck=async function(e,a={}){await gn(e);const n=await t.enumerateObjects(e,{includePacks:!1!==a.full}),r=new Set(n),i=await async function(e,a){const n=new Map;for(const r of a)try{n.set(r,await t.readObject(e,r,{verifyHash:!1}))}catch{n.set(r,null)}return n}(e,r),o=!0===a.connectivityOnly?new Map:function(e,t){const a=new Map;for(const n of e){const e=t.get(n);if(null!=e&&"tree"===e.type)for(const t of e.entries)Rl.has(t.name)&&a.set(t.id,t.name)}return a}(r,i),s=!0===a.connectivityOnly?{findings:[],exitBit:0}:await async function(e,t,a,n){const r=[];let i=0;for(const o of t){const{findings:t,exitBit:s}=await Sl(e,o,a,n);r.push(...t),i|=s}return{findings:r,exitBit:i}}(e,r,!0===a.strict,o),c=await async function(e,a,n){const r=[];let i=0;const o=t.getRefStore(e),s=await t.enumerateRefs(e);for(const e of s){const t=await o.readLooseRaw(e);if(void 0!==t){const{findings:o,exitBit:s}=Ll(e,t,a,n);r.push(...o),i|=s;continue}const s=await o.getPackedRefs();for(const t of s.entries)if(t.name===e){a.has(t.id)||(r.push({type:"bad-ref",ref:e,msgId:"badRefOid",severity:"error",target:t.id}),i|=2);break}}return{findings:r,exitBit:i}}(e,r,!1!==a.checkReferences),d=await async function(e,a,n){const r=new Set;return await async function(e,a,n){const r=await t.enumerateRefs(e);for(const i of r)try{const r=await t.resolveRef(e,i,{peel:!1});n.has(r)&&a.add(r)}catch{}}(e,r,n),!1!==a.reflogRoots&&await async function(e,a){const n=await t.listReflogs(e);await Promise.all(n.map(async n=>{try{const r=await t.readReflog(e,n);for(const e of r)e.oldId!==t.ZERO_OID&&a.add(e.oldId),e.newId!==t.ZERO_OID&&a.add(e.newId)}catch{}}))}(e,r),!1!==a.indexRoot&&await async function(e,a){try{const n=await t.readIndex(e);for(const e of n.entries)0===e.flags.stage&&a.add(e.id)}catch{}}(e,r),r}(e,a,r),u=function(e,t){const a=new Set;for(const n of e){const e=t.get(n);null!=e&&Dl(e,a)}return a}(r,i),{reached:l,missingIds:f,brokenEdges:h,rootCommits:m,tagRefs:w}=function(e,t,a){const n={universe:e,reached:new Set,missingIds:new Set,brokenEdges:[],rootCommits:[],tagRefs:[],worklist:[...t]};for(;n.worklist.length>0;){const t=n.worklist.pop();if(void 0===t||n.reached.has(t))continue;if(!e.has(t)){n.missingIds.add(t);continue}const r=a.get(t);null==r?n.reached.add(t):Cl(n,t,r)}return{reached:n.reached,missingIds:n.missingIds,brokenEdges:n.brokenEdges,rootCommits:n.rootCommits,tagRefs:n.tagRefs}}(r,d,i),{unreachable:p,dangling:g}=function(e,t,a){const n=[],r=[];for(const i of e)t.has(i)||(n.push(i),a.has(i)||r.push(i));return{unreachable:n,dangling:r}}(r,l,u),y=[...s.findings,...c.findings],v=new Map;for(const e of h)v.has(e.toId)||v.set(e.toId,e.toType);for(const e of f){const t=v.get(e)??Nl(e,i);y.push({type:"missing",id:e,objectType:t})}for(const e of h)y.push({type:"broken-link",...e});Ml(p,"unreachable",y,i),Ml(g,"dangling",y,i);for(const e of m)y.push({type:"root",id:e});for(const{tagId:e,tagName:t,targetId:a,targetType:n}of w)y.push({type:"tagged",id:a,objectType:n,tagName:t,tag:e});return{findings:y,exitCode:s.exitBit|(f.size>0||h.length>0?2:0)|c.exitBit}},exports.grep=async function(a,n){if(0===n.patterns.length)throw e.invalidOption("patterns","at least one pattern required");const r=Hl(n.patterns,{...!0===n.wholeWord?{wholeWord:!0}:{},...!0===n.invert?{invert:!0}:{}}),i=Hl(n.patterns,{...!0===n.wholeWord?{wholeWord:!0}:{}}),o=void 0!==n.paths&&n.paths.length>0?Ln(n.paths):void 0,s=await async function(e,a){const{target:n}=a;if(void 0===n)return(async e=>{const a=await t.readIndex(e),n=[];for(const r of a.entries){if(0!==r.flags.stage)continue;if(!jl(r.mode))continue;const a=t.joinPath(e.layout.workDir,r.path),i=await e.fs.lstat(a).catch(()=>{});void 0===i||i.isDirectory||i.isSymbolicLink||n.push({path:r.path,load:()=>e.fs.read(a)})}return n})(e);if("index"===n)return(async e=>(await t.readIndex(e)).entries.filter(e=>0===e.flags.stage&&jl(e.mode)).map(a=>({path:a.path,load:async()=>(await t.readBlob(e,a.id)).content})))(e);const r=await od(e,n.treeish),i=[];for await(const{path:a,id:n,mode:o}of t.walkTree(e,r,{recursive:!0})){if(!jl(o))continue;const r=n;i.push({path:a,load:async()=>(await t.readBlob(e,r)).content})}return i}(a,n),c=void 0!==o?s.filter(({path:e})=>V(o.matcher,e)):s;return{paths:(await t.boundedMap(c,t.MAX_CONCURRENT_BLOB_LOADS,async e=>function(e,a,n,r){if(t.isBinary(r)){if(!a.matchLine(r.subarray(0,t.MAX_LINE_BYTES)).returned)return;return{path:n,hits:[],binaryMatch:!0}}const i=t.splitLines(r),o=[];if(i.forEach((t,a)=>{const n=e.matchLine(t);n.returned&&o.push({lineNumber:a+1,line:t,spans:n.spans})}),0!==o.length)return{path:n,hits:o,binaryMatch:!1}}(r,i,e.path,await e.load()))).filter(e=>void 0!==e)}},exports.init=async(t,a={})=>{const n=a.initialBranch??"main",r=a.bare??!1;if(await t.fs.exists(`${t.layout.gitDir}/HEAD`))throw new e.TsgitError({code:"ALREADY_INITIALIZED",path:t.layout.gitDir});const i=await rs(t,{initialBranch:n,bare:r});return{path:i.gitDir,initialBranch:i.initialBranch,bare:i.bare}},exports.log=async(e,a={})=>{await vn(e);const n=await id(e,a.rev??"HEAD"),r=await Promise.all((a.excluding??[]).map(t=>id(e,t))),i=a.before,o="first-parent"===a.order?t.walkCommits(e,{from:[n],until:r,order:"first-parent"}):t.walkCommitsByDate(e,{from:[n],until:r}),s=[];let c=0;for await(const e of o)if(!(void 0!==i&&e.data.committer.timestamp>=i.getTime()/1e3)&&Hw(e.data.parents.length,a)&&(s.push({id:e.id,tree:e.data.tree,parents:e.data.parents,author:e.data.author,committer:e.data.committer,message:e.data.message}),c+=1,void 0!==a.limit&&c>=a.limit))break;return s},exports.matchesPathspec=V,exports.mergeAbort=Rn,exports.mergeContinue=Wc,exports.mergeRun=Ul,exports.mv=async(a,n,r,i={})=>{await vn(a),await bn(a,"mv"),await En(a);const o=n.map(e=>Dn(e)),[s]=o;if(void 0===s)throw e.emptyPathspec();(t=>{for(const a of t)for(const n of t)if(n!==a&&n.startsWith(`${a}/`))throw e.mvOverlappingSources(n,a)})(o);const c=Dn((u=r).endsWith("/")?u.slice(0,-1):u),d=await t.acquireIndexLock(a);var u;try{const n=await(async a=>{const n=await t.readIndex(a).catch(t=>{if(t instanceof e.TsgitError&&("FILE_NOT_FOUND"===(a=t.data.code)||"INVALID_INDEX_HEADER"===a||"INVALID_INDEX_ENTRY"===a))return{entries:[]};var a;throw t}),r=new Map;for(const e of n.entries)r.set(e.path,e);return r})(a),u=await(async(t,a,n,r)=>{const i=await qw(t,r);if(!0===i?.isDirectory&&!0!==i.isSymbolicLink)return{kind:"into-dir",destDir:r};if(n.endsWith("/"))throw e.mvDestinationDirectoryMissing(a,n);return{kind:"rename",target:r}})(a,s,r,c);if("rename"===u.kind&&o.length>1)throw e.mvDestinationNotDirectory(s,u.target);const{planned:l,skipped:f}=await(async(a,n,r,i,o)=>{const s=[],c=[];for(const d of r){const r="rename"===i.kind?i.target:t.joinPathSegment(i.destDir,e.basename(d)),u=await jw(a,n,d,r,o);if("skip"in u){if(!0===o.skipErrors){c.push({source:d,reason:u.skip});continue}throw zw(u.skip,d,r)}s.push({source:d,target:r,entries:u.entries})}return{planned:s,skipped:c}})(a,n,o,u,i);(t=>{const a=new Set;for(const n of t){if(a.has(n.target))throw e.mvMultipleSourcesSameTarget(n.source,n.target);a.add(n.target)}})(l);const h=(e=>{const t=[];for(const a of e)for(const e of a.entries)t.push({from:e.path,to:Fw(e,a.source,a.target)});return t.sort((e,t)=>e.from<t.from?-1:e.from>t.from?1:0)})(l);if(!0===i.dryRun)return{moved:h,skipped:f};((e,t)=>{for(const a of t)for(const t of a.entries){const n=Fw(t,a.source,a.target);e.delete(t.path),e.set(n,{...t,path:n})}})(n,l);for(const e of l)await Mn(a,e.source,e.target);return await d.commit(Array.from(n.values())),{moved:h,skipped:f}}finally{await d.release()}},exports.nameRev=sd,exports.notesAdd=vf,exports.notesList=kf,exports.notesRead=bf,exports.notesRemove=xf,exports.pull=async(a,n={})=>{await vn(a),await bn(a,"pull"),await En(a);const r=await kn(a),i=xn(r),o=void 0!==i?Ld(i):void 0,s=i??t.RefName.from("HEAD"),{remote:c,branch:d}=await(async(a,n,r,i)=>{const o=await t.readConfig(a);void 0!==n&&await t.assertNoValuelessConfig(a,"branch",n,["remote","merge"]);const s=void 0!==n?o.branch?.get(n):void 0,c=jd(o,r.remote,n),d=r.ref??(u=s?.merge,void 0===u?void 0:Ld(u));var u;if(void 0===d)throw e.noUpstreamConfigured(i);return{remote:c,branch:d}})(a,o,n,s),u=await zd(a,{remote:c,...void 0!==n.prune?{prune:n.prune}:{},...void 0!==n.depth?{depth:n.depth}:{}}),l=await t.resolveRef(a,`refs/remotes/${c}/${d}`);return{fetch:u,merge:await Ul(a,{rev:l,message:n.message??`Merge branch '${d}' of ${u.url}`,...void 0!==n.fastForward?{fastForward:n.fastForward}:{},...void 0!==n.author?{author:n.author}:{},...void 0!==n.committer?{committer:n.committer}:{}},{reflogAction:"pull"})}},exports.push=async(a,n={})=>{await vn(a),await(async a=>{const n=await t.findInvalidPushDefault(a);if(void 0!==n)throw e.invalidPushDefault(n.value,n.source,n.line)})(a),a.progress.start(Kw);try{return await Jw(a,n)}finally{a.progress.end(Kw)}},exports.rangeDiff=async(t,a)=>{await vn(t);const n=(t=>{if(void 0===t)return 60;if(!Number.isInteger(t)||t<0)throw e.invalidOption("creationFactor",`must be a non-negative integer; got ${t}`);return t})(a.creationFactor);return((e,t,a)=>{const n=e.map(Zp),r=t.map(Zp),{old:i,new:o}=Np(n,r,a);return((e,t)=>{const a=[],n=new Array(e.length).fill(!1);let r=0,i=0;for(;r<e.length||i<t.length;){for(;r<e.length&&n[r];)r++;if(r<e.length&&e[r].matching<0)a.push(_p(e[r],r)),r++;else{for(;i<t.length&&t[i].matching<0;)a.push(Hp(t[i],i)),i++;if(i<t.length){const r=t[i].matching;a.push(jp(e[r],t[i],r,i)),n[r]=!0,i++}}}return a})(i,o)})(await Qp(t,a.old),await Qp(t,a.new),n)},exports.readFileAt=async(e,a,n,r)=>{await vn(e);const i=await $r(e,a),o=await t.readTree(e,i),s=await ar(e,o,n,a),c=await t.readBlob(e,s.id,r);return{id:s.id,mode:s.mode,content:c.content}},exports.rebaseAbort=dh,exports.rebaseContinue=sh,exports.rebaseRun=rh,exports.rebaseSkip=ch,exports.reflog=async(e,a={})=>(await vn(e),"exists"===a.action?(async(e,a)=>({kind:"exists",exists:await t.reflogExists(e,eg(a))}))(e,a.ref):"delete"===a.action?(async(e,a)=>{const n=eg(a.ref);if(!await t.reflogExists(e,n))throw t.reflogNotFound(n);const r=await t.readReflog(e,n);if(!Number.isInteger(a.index)||a.index<0)throw t.reflogEntryOutOfRange(n,a.index,r.length);const i=r.length-1-a.index;if(i<0)throw t.reflogEntryOutOfRange(n,a.index,r.length);const o=r[i],s=tg(r,i,!0===a.rewrite);return await t.writeReflog(e,n,s),{kind:"delete",removed:o}})(e,a):"expire"===a.action?(async(e,a)=>{const n=Math.floor(Date.now()/1e3),r=ag(a.expire??"90.days.ago",n),i=ag(a.expireUnreachable??"30.days.ago",n),o=await rg(e),s=!0===a.all?await t.listReflogs(e):[eg(a.ref??"HEAD")];let c=0,d=0;for(const a of s){const n=await t.readReflog(e,a),s=n.filter(e=>ng(e,o,r,i));c+=n.length-s.length,d+=s.length,s.length!==n.length&&await t.writeReflog(e,a,s)}return{kind:"expire",removed:c,kept:d}})(e,a):(async(e,a)=>{const n=eg(a),r=await t.readReflog(e,n),i=r.length-1,o=r.map((e,t)=>({index:t,selector:`${n}@{${t}}`,entry:r[i-t]}));return{kind:"show",ref:n,entries:o}})(e,a.ref??"HEAD")),exports.remoteAdd=Ch,exports.remoteList=Ah,exports.remoteRemove=Nh,exports.remoteRename=Lh,exports.remoteSetUrl=_h,exports.remoteShow=Hh,exports.reset=async(a,n)=>{await vn(a),"hard"===n.mode&&await bn(a,"reset --hard"),await En(a);const r=await(async(a,n)=>{if(/^[0-9a-f]{40}$/.test(n))return n;const r="HEAD"===n?["HEAD"]:[n,`refs/heads/${n}`,`refs/tags/${n}`];for(const e of r)try{return await t.resolveRef(a,e)}catch{}throw e.revparseUnresolved(n)})(a,n.rev);"mixed"===n.mode?await(async(e,a)=>{const n=await t.readObject(e,a);if("commit"!==n.type)throw t.unexpectedObjectType("commit",n.type,a);const r=await t.loadSparseMatcher(e),i=await t.acquireIndexLock(e);try{const a=await t.readIndex(e),o=await t.buildIndexFromTree(e,{targetTree:n.data.tree,currentIndex:a,...void 0!==r?{sparse:r}:{}});await i.commit(o)}finally{await i.release()}})(a,r):"hard"===n.mode&&await(async(e,a)=>{const n=await t.readObject(e,a);if("commit"!==n.type)throw t.unexpectedObjectType("commit",n.type,a);const r=await t.loadSparseMatcher(e),i=await t.acquireIndexLock(e);try{const a=await t.readIndex(e),o=await t.materializeTree(e,{targetTree:n.data.tree,currentIndex:a,force:!0,forceRewriteAll:!0,...void 0!==r?{sparse:r}:{}});(o.written>0||o.deleted>0||void 0!==r)&&await i.commit(o.newIndexEntries)}finally{await i.release()}})(a,r);const i=await kn(a),o="symbolic"===i.kind?i.target:void 0;return await t.updateRef(a,o??"HEAD",r,{reflogMessage:ja(n.rev)}),{mode:n.mode,id:r,branch:o}},exports.revParse=$r,exports.revertAbort=Zh,exports.revertContinue=Xh,exports.revertRun=Kh,exports.revertSkip=Yh,exports.rm=async(a,n,r={})=>{if(await vn(a),await bn(a,"rm"),await En(a),0===n.length)throw e.emptyPathspec();const{matcher:i,literalMustMatch:o}=Ln(n),s=await t.acquireIndexLock(a);try{const n=await t.readIndex(a).catch(t=>{if(t instanceof e.TsgitError&&("FILE_NOT_FOUND"===(a=t.data.code)||"INVALID_INDEX_HEADER"===a||"INVALID_INDEX_ENTRY"===a))return{entries:[]};var a;throw t}),c=new Map;for(const e of n.entries)c.set(e.path,e);const d=[],u=[];for(const[e,t]of c)V(i,e)&&(d.push(e),u.push(t));jn(o,d),!0!==r.force&&await(async(a,n,r)=>{const i=await cg(a),{both:o,stagedOnly:s,localOnly:c}=await(async(e,a,n,r)=>{const i=await t.maybeBuildAttributeProvider(e),o=[],s=[],c=[];for(const d of a){const a=await t.compareWorkingTreeEntry(e,d,i);if("absent"===a)continue;const u=t.isWorkingTreeModified(a),l=sg(n,d);l&&u?o.push(d.path):l&&!r?s.push(d.path):u&&!r&&c.push(d.path)}return{both:o,stagedOnly:s,localOnly:c}})(a,n,i,r);if(o.length>0)throw e.rmStagedAndLocalChanges(o);if(s.length>0)throw e.rmStagedChanges(s);if(c.length>0)throw e.rmLocalModifications(c)})(a,u,!0===r.cached);for(const e of d)c.delete(e);if(!r.cached)for(const t of d)await Cn(a,t).catch(t=>{if(!(t instanceof e.TsgitError&&"FILE_NOT_FOUND"===t.data.code))throw t});return await s.commit(Array.from(c.values())),{removed:d}}finally{await s.release()}},exports.shortlog=async(e,a={})=>{await vn(e);const n=await id(e,a.rev??"HEAD"),r=await Promise.all((a.excluding??[]).map(t=>id(e,t))),i="committer"===a.by,o=[];for await(const a of t.walkCommitsByDate(e,{from:[n],until:r})){const e=i?a.data.committer:a.data.author;o.push({name:e.name,email:e.email,id:a.id,subject:ug(a.data.message)})}return(e=>{const a=new Map;for(const{name:t,email:n,id:r,subject:i}of e){const e={id:r,email:n,subject:i},o=a.get(t);void 0===o?a.set(t,[e]):o.push(e)}return[...a.entries()].map(([e,t])=>({name:e,commits:[...t].reverse()})).sort((e,a)=>t.compareBytes(fg.encode(e.name),fg.encode(a.name)))})(o)},exports.show=async function(e,t="HEAD",a={}){await vn(e);const n=!0===a.withStat;if("string"==typeof t)return mg(e,t,n);const r=[];for(const a of t)r.push(await mg(e,a,n));return r},exports.sparseCheckoutAdd=lm,exports.sparseCheckoutDisable=hm,exports.sparseCheckoutList=sm,exports.sparseCheckoutReapply=fm,exports.sparseCheckoutSet=um,exports.stashApply=Rm,exports.stashDrop=$m,exports.stashList=Tm,exports.stashPop=Sm,exports.stashPush=Im,exports.status=hd,exports.submoduleAdd=rw,exports.submoduleDeinit=ew,exports.submoduleInit=Km,exports.submoduleList=tw,exports.submoduleSync=Zm,exports.submoduleUpdate=cw,exports.tagCreate=lw,exports.tagDelete=yw,exports.tagList=uw,exports.whatchanged=async(e,a={})=>{await vn(e);const n=await id(e,a.rev??"HEAD"),r=await Promise.all((a.excluding??[]).map(t=>id(e,t))),i=a.before,o="first-parent"===a.order?t.walkCommits(e,{from:[n],until:r,order:"first-parent"}):t.walkCommitsByDate(e,{from:[n],until:r}),s=[];let c=0;for await(const t of o){if(t.data.parents.length>=2)continue;if(void 0!==i&&t.data.committer.timestamp>=i.getTime()/1e3)continue;const n=await hg(e,t.data.parents[0],t.data.tree);if(s.push({id:t.id,tree:t.data.tree,parents:t.data.parents,author:t.data.author,committer:t.data.committer,message:t.data.message,changes:n}),c+=1,void 0!==a.limit&&c>=a.limit)break}return s},exports.worktreeAdd=Mw,exports.worktreeList=Aw,exports.worktreeMove=Lw,exports.worktreeRemove=_w;