difit 4.0.2 → 4.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +1 -0
- package/README.ko.md +1 -0
- package/README.md +1 -0
- package/README.zh.md +1 -0
- package/dist/cli/index.js +38 -28
- package/dist/cli/index.test.js +162 -77
- package/dist/cli/utils.js +4 -0
- package/dist/cli/utils.test.js +6 -1
- package/dist/client/assets/_baseFor-DKyA49xd.js +1 -0
- package/dist/client/assets/arc-COOp7iVe.js +1 -0
- package/dist/client/assets/architecture-YZFGNWBL-Cs2Q6RQP.js +1 -0
- package/dist/client/assets/architectureDiagram-Q4EWVU46-BO4dVPUA.js +36 -0
- package/dist/client/assets/blockDiagram-DXYQGD6D-CtNJnEWN.js +132 -0
- package/dist/client/assets/c4Diagram-AHTNJAMY-BqG-1m6C.js +10 -0
- package/dist/client/assets/channel-_xDT1u3-.js +1 -0
- package/dist/client/assets/chunk-2KRD3SAO-DqP2NJNd.js +1 -0
- package/dist/client/assets/chunk-336JU56O-D1qa7Qzb.js +2 -0
- package/dist/client/assets/chunk-426QAEUC-6J_A_wvD.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-CW45MZFx.js → chunk-4BX2VUAB-BT78EnQ6.js} +1 -1
- package/dist/client/assets/chunk-4TB4RGXK-C4w_Bwzw.js +206 -0
- package/dist/client/assets/{chunk-55IACEB6-Busc3sfI.js → chunk-55IACEB6-z3MQSTaj.js} +1 -1
- package/dist/client/assets/chunk-5FUZZQ4R-Chei69aj.js +62 -0
- package/dist/client/assets/chunk-5PVQY5BW-HgRiIs0X.js +2 -0
- package/dist/client/assets/chunk-67CJDMHE-B2q10-fp.js +1 -0
- package/dist/client/assets/chunk-7N4EOEYR-DPgxysWq.js +1 -0
- package/dist/client/assets/chunk-AA7GKIK3-BqmVmKLq.js +1 -0
- package/dist/client/assets/chunk-BSJP7CBP-CaIgleFn.js +1 -0
- package/dist/client/assets/chunk-CFjPhJqf.js +1 -0
- package/dist/client/assets/chunk-CIAEETIT-ByD-tlNF.js +1 -0
- package/dist/client/assets/{chunk-KX2RTZJC-DrhxxMOx.js → chunk-EDXVE4YY-d3RUKKAj.js} +1 -1
- package/dist/client/assets/chunk-ENJZ2VHE-CNq5Qmg9.js +10 -0
- package/dist/client/assets/{chunk-FMBD7UC4-BSsJVlRg.js → chunk-FMBD7UC4-DYfHJ6MV.js} +1 -1
- package/dist/client/assets/chunk-FOC6F5B3-BRpSWlZj.js +1 -0
- package/dist/client/assets/chunk-ICPOFSXX-B_MThwG6.js +122 -0
- package/dist/client/assets/chunk-K5T4RW27-DmamW1Ds.js +94 -0
- package/dist/client/assets/chunk-KGLVRYIC-CRbg4c4z.js +1 -0
- package/dist/client/assets/chunk-LIHQZDEY-CHQPSdB3.js +1 -0
- package/dist/client/assets/chunk-ORNJ4GCN-CIsQ4Zi4.js +1 -0
- package/dist/client/assets/{chunk-NQ4KR5QH-BZ86r2qK.js → chunk-OYMX7WX6-Cxi0kdGg.js} +25 -14
- package/dist/client/assets/chunk-QZHKN3VN-C0QzfgZ8.js +1 -0
- package/dist/client/assets/{chunk-PU5JKC2W-PQmA4K_y.js → chunk-U2HBQHQK-V_hneCfR.js} +6 -6
- package/dist/client/assets/{chunk-PQ6SQG4A-C9acTu_E.js → chunk-X2U36JSP-De4pvO-I.js} +1 -1
- package/dist/client/assets/{chunk-XPW4576I-CcqR6BsE.js → chunk-XPW4576I-B_osXKp6.js} +2 -2
- package/dist/client/assets/{chunk-JSJVCQXG-UCJub_Eo.js → chunk-YZCP3GAM-C_kqXssD.js} +1 -1
- package/dist/client/assets/chunk-ZZ45TVLE-B_xtlma5.js +1 -0
- package/dist/client/assets/classDiagram-6PBFFD2Q-5XrS-DAQ.js +1 -0
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-Covl2vKy.js +1 -0
- package/dist/client/assets/clone-rhRH8pyW.js +1 -0
- package/dist/client/assets/cose-bilkent-S5V4N54A-BvXFc7Rr.js +1 -0
- package/dist/client/assets/cytoscape.esm-DRReFUEO.js +321 -0
- package/dist/client/assets/dagre-DU-XBdcU.js +1 -0
- package/dist/client/assets/dagre-KV5264BT-BWYGReXF.js +4 -0
- package/dist/client/assets/diagram-5BDNPKRD-DpUUhvWz.js +10 -0
- package/dist/client/assets/diagram-G4DWMVQ6-BJoTrUAx.js +24 -0
- package/dist/client/assets/diagram-MMDJMWI5-CAk1GW5g.js +43 -0
- package/dist/client/assets/diagram-TYMM5635-Cct6g7FA.js +24 -0
- package/dist/client/assets/dist-61sCfOmN.js +1 -0
- package/dist/client/assets/{erDiagram-INFDFZHY-ByL02DP-.js → erDiagram-SMLLAGMA-DHs2bXUj.js} +33 -18
- package/dist/client/assets/flatten-mnWyE-RB.js +1 -0
- package/dist/client/assets/flowDiagram-DWJPFMVM-DLu-6dfC.js +162 -0
- package/dist/client/assets/ganttDiagram-T4ZO3ILL-CMIzlKAR.js +292 -0
- package/dist/client/assets/gitGraph-7Q5UKJZL-A_wWsXju.js +1 -0
- package/dist/client/assets/gitGraphDiagram-UUTBAWPF-Bc_rL3_k.js +106 -0
- package/dist/client/assets/graphlib-BVMK0xYE.js +1 -0
- package/dist/client/assets/{index-Cn4K2uvR.css → index-Cq_APK7Y.css} +1 -1
- package/dist/client/assets/index-RcU838Ah.js +79 -0
- package/dist/client/assets/info-OMHHGYJF-Bv3kK2Bb.js +1 -0
- package/dist/client/assets/{infoDiagram-LFFYTUFH-CnmYkyCb.js → infoDiagram-42DDH7IO-Cf8u4jgP.js} +1 -1
- package/dist/client/assets/isEmpty-CiiIHfXR.js +1 -0
- package/dist/client/assets/ishikawaDiagram-UXIWVN3A-7n7DvfEb.js +70 -0
- package/dist/client/assets/{journeyDiagram-4ABVD52K-aRoH36nV.js → journeyDiagram-VCZTEJTY-BMkeQqJb.js} +2 -2
- package/dist/client/assets/{kanban-definition-K7BYSVSG-BGtGv5yb.js → kanban-definition-6JOO6SKY-B8KkeZLS.js} +2 -2
- package/dist/client/assets/katex-FOM3xZj7.js +257 -0
- package/dist/client/assets/line-CVpcI6kj.js +1 -0
- package/dist/client/assets/{linear-HJOLPv7E.js → linear-DmhiOOKU.js} +1 -1
- package/dist/client/assets/mermaid-parser.core-CnJ9Tv8l.js +4 -0
- package/dist/client/assets/mermaid.core-R7nXpPx-.js +11 -0
- package/dist/client/assets/{mindmap-definition-YRQLILUH-B8jMe7ir.js → mindmap-definition-QFDTVHPH-CwcHocMZ.js} +39 -11
- package/dist/client/assets/{ordinal-DIg8h6NI.js → ordinal-k--hYEme.js} +1 -1
- package/dist/client/assets/packet-4T2RLAQJ-D2q3-9ae.js +1 -0
- package/dist/client/assets/pie-ZZUOXDRM-GivlQcUF.js +1 -0
- package/dist/client/assets/pieDiagram-DEJITSTG-BVAn8Lmr.js +30 -0
- package/dist/client/assets/preload-helper-DSXbuxSR.js +1 -0
- package/dist/client/assets/prism-haskell-BP3SRvzt.js +1 -0
- package/dist/client/assets/prism-nix-CO4UPu3E.js +1 -0
- package/dist/client/assets/{quadrantDiagram-337W2JSQ-CQ1QKsru.js → quadrantDiagram-34T5L4WZ-C2XZ_zxa.js} +1 -1
- package/dist/client/assets/radar-PYXPWWZC-C9pD6VNR.js +1 -0
- package/dist/client/assets/reduce-BTlHjXna.js +1 -0
- package/dist/client/assets/requirementDiagram-MS252O5E-CfO16pkI.js +84 -0
- package/dist/client/assets/{sankeyDiagram-WA2Y5GQK-BQVbT6bS.js → sankeyDiagram-XADWPNL6-D_4_234M.js} +1 -1
- package/dist/client/assets/sequenceDiagram-FGHM5R23-B-yHKMuK.js +157 -0
- package/dist/client/assets/src-CjDs0_Ij.js +1 -0
- package/dist/client/assets/stateDiagram-FHFEXIEX-BeG2di4I.js +1 -0
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-DvcSq7KE.js +1 -0
- package/dist/client/assets/timeline-definition-GMOUNBTQ-DhtnMGcE.js +120 -0
- package/dist/client/assets/treeView-SZITEDCU-BSNk8_yV.js +1 -0
- package/dist/client/assets/treemap-W4RFUUIX-ym4zQztE.js +1 -0
- package/dist/client/assets/vennDiagram-DHZGUBPP-CBn69TcQ.js +34 -0
- package/dist/client/assets/wardley-RL74JXVD-B02H6ReJ.js +1 -0
- package/dist/client/assets/wardleyDiagram-NUSXRM2D-CEoSJmN1.js +20 -0
- package/dist/client/assets/{xychartDiagram-JWTSCODW-DeYZhM2j.js → xychartDiagram-5P7HB3ND-BZ_X9tkn.js} +6 -6
- package/dist/client/index.html +4 -2
- package/dist/server/git-diff-tui.d.ts +2 -2
- package/dist/server/git-diff-tui.js +14 -11
- package/dist/server/git-diff-tui.test.js +20 -4
- package/dist/server/git-diff.d.ts +3 -2
- package/dist/server/git-diff.js +30 -7
- package/dist/server/git-diff.test.js +60 -5
- package/dist/server/server.d.ts +2 -3
- package/dist/server/server.js +80 -55
- package/dist/server/server.test.js +110 -60
- package/dist/tui/App.d.ts +2 -2
- package/dist/tui/App.js +4 -3
- package/dist/types/diff.d.ts +8 -0
- package/dist/utils/diffSelection.d.ts +6 -0
- package/dist/utils/diffSelection.js +30 -0
- package/package.json +9 -9
- package/dist/client/assets/_basePickBy-hOr-yGsE.js +0 -1
- package/dist/client/assets/_baseUniq-b7bzdUSn.js +0 -1
- package/dist/client/assets/arc-D65wG9gm.js +0 -1
- package/dist/client/assets/architecture-PBZL5I3N-DFdrPtRG.js +0 -1
- package/dist/client/assets/architectureDiagram-2XIMDMQ5-CXJTJFYJ.js +0 -36
- package/dist/client/assets/blockDiagram-WCTKOSBZ-B60owdAn.js +0 -132
- package/dist/client/assets/c4Diagram-IC4MRINW-4tg2D_Vt.js +0 -10
- package/dist/client/assets/channel-DogeU0Wo.js +0 -1
- package/dist/client/assets/chunk-7E7YKBS2-BVR-8Pma.js +0 -1
- package/dist/client/assets/chunk-7R4GIKGN-DneC7PwP.js +0 -80
- package/dist/client/assets/chunk-C72U2L5F-CJr98gus.js +0 -1
- package/dist/client/assets/chunk-EGIJ26TM-iD_CSqpR.js +0 -1
- package/dist/client/assets/chunk-GEFDOKGD-eDUrsRgt.js +0 -2
- package/dist/client/assets/chunk-GLR3WWYH-NUOKNaxd.js +0 -2
- package/dist/client/assets/chunk-HHEYEP7N-DhuxpkmW.js +0 -1
- package/dist/client/assets/chunk-KYZI473N-Brv52ZeO.js +0 -53
- package/dist/client/assets/chunk-L3YUKLVL-BkBigLhQ.js +0 -1
- package/dist/client/assets/chunk-MX3YWQON-DHRoNbgW.js +0 -1
- package/dist/client/assets/chunk-O4XLMI2P-Sr33dk8c.js +0 -7
- package/dist/client/assets/chunk-OZEHJAEY-3F2ff7sj.js +0 -1
- package/dist/client/assets/chunk-QZHKN3VN-DMRW-mur.js +0 -1
- package/dist/client/assets/chunk-R5LLSJPH-ChexuO_S.js +0 -1
- package/dist/client/assets/chunk-WL4C6EOR-oxNV_hhM.js +0 -189
- package/dist/client/assets/chunk-XIRO2GV7-C9gOnffv.js +0 -1
- package/dist/client/assets/chunk-XZSTWKYB-C5JJ0TZR.js +0 -94
- package/dist/client/assets/chunk-YBOYWFTD-B6kAkNgH.js +0 -1
- package/dist/client/assets/classDiagram-VBA2DB6C-DlDUg6JI.js +0 -1
- package/dist/client/assets/classDiagram-v2-RAHNMMFH-BxzJfV1S.js +0 -1
- package/dist/client/assets/clone-DuY6BQEm.js +0 -1
- package/dist/client/assets/cose-bilkent-S5V4N54A-hlDud6Ym.js +0 -1
- package/dist/client/assets/cytoscape.esm-B3gzQ1NF.js +0 -321
- package/dist/client/assets/dagre-BwDYerGQ.js +0 -1
- package/dist/client/assets/dagre-KLK3FWXG-KnkMUlUE.js +0 -4
- package/dist/client/assets/diagram-E7M64L7V-DcTCIFUG.js +0 -24
- package/dist/client/assets/diagram-IFDJBPK2-COcDQunj.js +0 -43
- package/dist/client/assets/diagram-P4PSJMXO-DmgET9pD.js +0 -24
- package/dist/client/assets/dist-v55TM3-O.js +0 -1
- package/dist/client/assets/flowDiagram-PKNHOUZH-CW-lseYE.js +0 -162
- package/dist/client/assets/ganttDiagram-A5KZAMGK-BxLjKRld.js +0 -292
- package/dist/client/assets/gitGraph-HDMCJU4V-CjAGJiCH.js +0 -1
- package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-DLEDjokx.js +0 -65
- package/dist/client/assets/graphlib-WkJoBgka.js +0 -1
- package/dist/client/assets/index-CizZxdOT.js +0 -79
- package/dist/client/assets/info-3K5VOQVL-CB6KpH1K.js +0 -1
- package/dist/client/assets/isArrayLikeObject-icl0H0jo.js +0 -1
- package/dist/client/assets/isEmpty-Du8sNmkE.js +0 -1
- package/dist/client/assets/ishikawaDiagram-PHBUUO56-zycn1mVK.js +0 -70
- package/dist/client/assets/katex-BJrMXEjr.js +0 -261
- package/dist/client/assets/line-Cm3ZuldI.js +0 -1
- package/dist/client/assets/math-CNhlSIO3.js +0 -1
- package/dist/client/assets/mermaid-parser.core-BvMqHn4b.js +0 -4
- package/dist/client/assets/mermaid.core-C4SvQTx9.js +0 -11
- package/dist/client/assets/packet-RMMSAZCW-CzbC-tXD.js +0 -1
- package/dist/client/assets/pie-UPGHQEXC-CmhYIo8p.js +0 -1
- package/dist/client/assets/pieDiagram-SKSYHLDU-CGWbtgxq.js +0 -30
- package/dist/client/assets/radar-KQ55EAFF-BCa9lsCc.js +0 -1
- package/dist/client/assets/requirementDiagram-Z7DCOOCP-Co1LyL5T.js +0 -73
- package/dist/client/assets/sequenceDiagram-2WXFIKYE-DGIEkdPm.js +0 -145
- package/dist/client/assets/src-DsmFf7gO.js +0 -1
- package/dist/client/assets/stateDiagram-RAJIS63D-DgjKbXnG.js +0 -1
- package/dist/client/assets/stateDiagram-v2-FVOUBMTO-gPrpjL74.js +0 -1
- package/dist/client/assets/timeline-definition-YZTLITO2-Dz2dVWjY.js +0 -61
- package/dist/client/assets/treemap-KZPCXAKY-DXiPfAB6.js +0 -1
- package/dist/client/assets/vennDiagram-LZ73GAT5-IIH5S1B6.js +0 -34
- /package/dist/client/assets/{array-DOVTz2Mq.js → array-BNor45A1.js} +0 -0
- /package/dist/client/assets/{defaultLocale-Ck2Xxk-C.js → defaultLocale-DPzUsThw.js} +0 -0
- /package/dist/client/assets/{init-Bft5Ffpj.js → init-C0L3woqb.js} +0 -0
- /package/dist/client/assets/{path-DfRbCp9y.js → path-sMK4d_s9.js} +0 -0
- /package/dist/client/assets/{prism-bash-6uMTC0Q2.js → prism-bash-iQBez6et.js} +0 -0
- /package/dist/client/assets/{prism-csharp-Dkc2OSmh.js → prism-csharp-C1RDHXRk.js} +0 -0
- /package/dist/client/assets/{prism-dart-iZy_wlz-.js → prism-dart-nIH9vDUM.js} +0 -0
- /package/dist/client/assets/{prism-elixir-BIzI9WJK.js → prism-elixir-DUMUOd7H.js} +0 -0
- /package/dist/client/assets/{prism-hcl-Bx2FGBKG.js → prism-hcl-C-ZHJGEE.js} +0 -0
- /package/dist/client/assets/{prism-java-DBXf7fH0.js → prism-java-scuShSv5.js} +0 -0
- /package/dist/client/assets/{prism-markup-templating-DS0ksKLt.js → prism-markup-templating-BFXREXfb.js} +0 -0
- /package/dist/client/assets/{prism-perl-BlhPiMfT.js → prism-perl-BBDKnHRR.js} +0 -0
- /package/dist/client/assets/{prism-php-DVtOAJsW.js → prism-php-DjIafOi_.js} +0 -0
- /package/dist/client/assets/{prism-protobuf-BUsrNVvv.js → prism-protobuf-BE1MoFmZ.js} +0 -0
- /package/dist/client/assets/{prism-ruby-Saes64I6.js → prism-ruby-CZ-lrXfL.js} +0 -0
- /package/dist/client/assets/{prism-scala-ANOINMog.js → prism-scala-DgnxHuDn.js} +0 -0
- /package/dist/client/assets/{prism-solidity-C5Mx5y66.js → prism-solidity-5fSUcW9Y.js} +0 -0
- /package/dist/client/assets/{prism-sql-D5pwK0Dp.js → prism-sql-CKkohPI_.js} +0 -0
- /package/dist/client/assets/{prism-vim-BSZSu-gX.js → prism-vim-CkRmxTmK.js} +0 -0
- /package/dist/client/assets/{rough.esm-KjoEK0it.js → rough.esm-DeLgKbOI.js} +0 -0
package/README.ja.md
CHANGED
|
@@ -140,6 +140,7 @@ git diff --cached | difit -
|
|
|
140
140
|
| --------------------- | --------------- | ------------------------------------------------------------------------------------------ |
|
|
141
141
|
| `<target>` | HEAD | コミットハッシュ、タグ、HEAD~n、ブランチ、または特別な引数 |
|
|
142
142
|
| `[compare-with]` | - | 比較対象の2番目のコミット(2つの間のdiffを表示) |
|
|
143
|
+
| `--merge-base` | false | diff 計算前に `git merge-base` で基準側を解決する(Git revision モード専用) |
|
|
143
144
|
| `--pr <url>` | - | レビューするGitHub PRのURL(例:https://github.com/owner/repo/pull/123) |
|
|
144
145
|
| `--comment <json>` | - | 起動時に初期コメントを注入(複数指定可。JSON object または array を受け付ける) |
|
|
145
146
|
| `--port` | 4966 | 優先ポート。使用中の場合は+1にフォールバック |
|
package/README.ko.md
CHANGED
|
@@ -140,6 +140,7 @@ git diff --cached | difit -
|
|
|
140
140
|
| --------------------- | -------------- | --------------------------------------------------------------------------------------------- |
|
|
141
141
|
| `<target>` | HEAD | 커밋 해시, 태그, HEAD~n, 브랜치 또는 특수 인수 |
|
|
142
142
|
| `[compare-with]` | - | 비교할 선택적 두 번째 커밋 (둘 사이의 diff 표시) |
|
|
143
|
+
| `--merge-base` | false | diff 전에 `git merge-base` 로 기준 쪽을 해석 (Git revision 모드 전용) |
|
|
143
144
|
| `--pr <url>` | - | 검토할 GitHub PR URL (예: https://github.com/owner/repo/pull/123) |
|
|
144
145
|
| `--comment <json>` | - | 초기 코멘트 주입 (반복 가능; JSON object 또는 array 허용) |
|
|
145
146
|
| `--port` | 4966 | 선호 포트; 사용 중인 경우 +1로 대체 |
|
package/README.md
CHANGED
|
@@ -140,6 +140,7 @@ Stdin mode is selected with intent-first rules:
|
|
|
140
140
|
| --------------------- | --------------- | ------------------------------------------------------------------------------------------------------- |
|
|
141
141
|
| `<target>` | HEAD | Commit hash, tag, HEAD~n, branch, or special arguments |
|
|
142
142
|
| `[compare-with]` | - | Optional second commit to compare with (shows diff between the two) |
|
|
143
|
+
| `--merge-base` | false | Resolve the base revision with `git merge-base` before diffing (Git revision mode only) |
|
|
143
144
|
| `--pr <url>` | - | GitHub PR URL to review (e.g., https://github.com/owner/repo/pull/123) |
|
|
144
145
|
| `--comment <json>` | - | Inject initial comments (repeatable; accepts a JSON object or array) |
|
|
145
146
|
| `--port` | 4966 | Preferred port; falls back to +1 if occupied |
|
package/README.zh.md
CHANGED
|
@@ -140,6 +140,7 @@ git diff --cached | difit -
|
|
|
140
140
|
| --------------------- | -------------- | --------------------------------------------------------------------------------- |
|
|
141
141
|
| `<target>` | HEAD | 提交哈希、标签、HEAD~n、分支或特殊参数 |
|
|
142
142
|
| `[compare-with]` | - | 要比较的可选第二个提交(显示两者之间的差异) |
|
|
143
|
+
| `--merge-base` | false | 在 diff 前先用 `git merge-base` 解析基准 revision(仅限 Git revision 模式) |
|
|
143
144
|
| `--pr <url>` | - | 要审查的 GitHub PR URL(例如:https://github.com/owner/repo/pull/123) |
|
|
144
145
|
| `--comment <json>` | - | 注入初始评论(可重复指定;接受 JSON object 或 array) |
|
|
145
146
|
| `--port` | 4966 | 首选端口;如果被占用则回退到 +1 |
|
package/dist/cli/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import React from 'react';
|
|
|
4
4
|
import { simpleGit } from 'simple-git';
|
|
5
5
|
import pkg from '../../package.json' with { type: 'json' };
|
|
6
6
|
import { startServer } from '../server/server.js';
|
|
7
|
+
import { createDiffSelection } from '../utils/diffSelection.js';
|
|
7
8
|
import { DiffMode } from '../types/watch.js';
|
|
8
9
|
import { DEFAULT_DIFF_VIEW_MODE, normalizeDiffViewMode } from '../utils/diffMode.js';
|
|
9
10
|
import { shouldReadStdin, findUntrackedFiles, markFilesIntentToAdd, promptUser, parseCommentOptions, validateDiffArguments, getGitRoot, } from './utils.js';
|
|
@@ -12,7 +13,24 @@ import { warnAboutTuiDeprecation } from './tuiDeprecation.js';
|
|
|
12
13
|
function isSpecialArg(arg) {
|
|
13
14
|
return arg === 'working' || arg === 'staged' || arg === '.';
|
|
14
15
|
}
|
|
15
|
-
function
|
|
16
|
+
function resolveDiffSelection(commitish, compareWith, mergeBase) {
|
|
17
|
+
let baseCommitish;
|
|
18
|
+
if (compareWith) {
|
|
19
|
+
baseCommitish = compareWith;
|
|
20
|
+
}
|
|
21
|
+
else if (commitish === 'working') {
|
|
22
|
+
baseCommitish = 'staged';
|
|
23
|
+
}
|
|
24
|
+
else if (isSpecialArg(commitish)) {
|
|
25
|
+
baseCommitish = 'HEAD';
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
baseCommitish = commitish + '^';
|
|
29
|
+
}
|
|
30
|
+
return createDiffSelection(baseCommitish, commitish, mergeBase ? 'merge-base' : undefined);
|
|
31
|
+
}
|
|
32
|
+
function determineDiffMode(selection, compareWith) {
|
|
33
|
+
const { targetCommitish } = selection;
|
|
16
34
|
// If comparing specific commits/branches (not involving HEAD), no watching needed
|
|
17
35
|
// Exception: allow watching when targetCommitish is '.' even with compareWith
|
|
18
36
|
if (compareWith && targetCommitish !== 'HEAD' && targetCommitish !== '.') {
|
|
@@ -48,6 +66,7 @@ program
|
|
|
48
66
|
.option('--include-untracked', 'automatically include untracked files in diff')
|
|
49
67
|
.option('--keep-alive', 'keep server running even after browser disconnects')
|
|
50
68
|
.option('--context <lines>', 'number of context lines shown around each change', parseInt)
|
|
69
|
+
.option('--merge-base', 'resolve the base revision with git merge-base before diffing (Git revision mode only)')
|
|
51
70
|
.action(async (commitish, compareWith, options) => {
|
|
52
71
|
try {
|
|
53
72
|
let stdinDiff;
|
|
@@ -72,6 +91,10 @@ program
|
|
|
72
91
|
console.error('Error: --pr option cannot be used with positional arguments');
|
|
73
92
|
process.exit(1);
|
|
74
93
|
}
|
|
94
|
+
if (options.mergeBase) {
|
|
95
|
+
console.error('Error: --merge-base option cannot be used with --pr');
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
75
98
|
if (options.tui) {
|
|
76
99
|
console.error('Error: --pr option cannot be used with --tui');
|
|
77
100
|
process.exit(1);
|
|
@@ -109,6 +132,10 @@ program
|
|
|
109
132
|
console.error('Error: --context option cannot be used with stdin diff');
|
|
110
133
|
process.exit(1);
|
|
111
134
|
}
|
|
135
|
+
if (options.mergeBase) {
|
|
136
|
+
console.error('Error: --merge-base option cannot be used with stdin diff');
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
112
139
|
// Read unified diff from stdin
|
|
113
140
|
stdinDiff = await readStdin();
|
|
114
141
|
if (!stdinDiff.trim()) {
|
|
@@ -146,27 +173,12 @@ program
|
|
|
146
173
|
// If not in a git repository, fall back to process.cwd()
|
|
147
174
|
repoPath = undefined;
|
|
148
175
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
// If compareWith is provided, use it as base
|
|
154
|
-
baseCommitish = compareWith;
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
// Handle special arguments
|
|
158
|
-
if (commitish === 'working') {
|
|
159
|
-
// working compares working directory with staging area
|
|
160
|
-
baseCommitish = 'staged';
|
|
161
|
-
}
|
|
162
|
-
else if (isSpecialArg(commitish)) {
|
|
163
|
-
baseCommitish = 'HEAD';
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
baseCommitish = commitish + '^';
|
|
167
|
-
}
|
|
176
|
+
const selection = resolveDiffSelection(commitish, compareWith, options.mergeBase);
|
|
177
|
+
if (options.mergeBase && isSpecialArg(selection.baseCommitish)) {
|
|
178
|
+
console.error(`Error: --merge-base requires a commit-ish base, but resolved base was "${selection.baseCommitish}"`);
|
|
179
|
+
process.exit(1);
|
|
168
180
|
}
|
|
169
|
-
if (
|
|
181
|
+
if (selection.targetCommitish === 'working' || selection.targetCommitish === '.') {
|
|
170
182
|
const git = simpleGit(repoPath);
|
|
171
183
|
await handleUntrackedFiles(git, options.includeUntracked);
|
|
172
184
|
}
|
|
@@ -186,22 +198,20 @@ program
|
|
|
186
198
|
const { render } = await import('ink');
|
|
187
199
|
const { default: TuiApp } = await import('../tui/App.js');
|
|
188
200
|
render(React.createElement(TuiApp, {
|
|
189
|
-
|
|
190
|
-
baseCommitish,
|
|
201
|
+
selection,
|
|
191
202
|
mode: options.mode,
|
|
192
203
|
repoPath,
|
|
193
204
|
contextLines: options.context,
|
|
194
205
|
}));
|
|
195
206
|
return;
|
|
196
207
|
}
|
|
197
|
-
const validation = validateDiffArguments(targetCommitish, compareWith);
|
|
208
|
+
const validation = validateDiffArguments(selection.targetCommitish, compareWith);
|
|
198
209
|
if (!validation.valid) {
|
|
199
210
|
console.error(`Error: ${validation.error}`);
|
|
200
211
|
process.exit(1);
|
|
201
212
|
}
|
|
202
213
|
const { url, port, isEmpty } = await startServer({
|
|
203
|
-
|
|
204
|
-
baseCommitish,
|
|
214
|
+
selection,
|
|
205
215
|
preferredPort: options.port,
|
|
206
216
|
host: options.host,
|
|
207
217
|
openBrowser: options.open,
|
|
@@ -209,12 +219,12 @@ program
|
|
|
209
219
|
clearComments: options.clean,
|
|
210
220
|
keepAlive: options.keepAlive,
|
|
211
221
|
contextLines: options.context,
|
|
212
|
-
diffMode: determineDiffMode(
|
|
222
|
+
diffMode: determineDiffMode(selection, compareWith),
|
|
213
223
|
repoPath,
|
|
214
224
|
...(commentImports.length > 0 ? { commentImports } : {}),
|
|
215
225
|
});
|
|
216
226
|
console.log(`\n🚀 difit server started on ${url}`);
|
|
217
|
-
console.log(`📋 Reviewing: ${targetCommitish}`);
|
|
227
|
+
console.log(`📋 Reviewing: ${selection.targetCommitish}`);
|
|
218
228
|
if (options.keepAlive) {
|
|
219
229
|
console.log('🔒 Keep-alive mode: server will stay running after browser disconnects');
|
|
220
230
|
}
|