feat(git-graph): VS Code-style git graph with commit actions in History modal (#1431)
* feat(types): add parents to GitLogEntry and new commit action types
* feat(git): add parent hashes and --all flag to getLog
* fix(git): move record separator to start of log format string
* feat(git): add checkoutCommit server function and route
* feat(git): add cherryPick server function and route
* feat(git): add revertCommit server function and route
* feat(git): add resetToCommit server function and route
* fix(tests): make git service tests branch-name portable, add error path tests
* feat(client): add checkoutCommit, cherryPick, revertCommit, resetToCommit API wrappers
* feat(git-graph): add lane assignment algorithm with tests
* feat(git-graph): add GitGraphSegment per-row SVG renderer
* feat(i18n): add locale strings for git graph action buttons
* fix(git-graph): handle lane convergence, fix SVG path coords, add connector tests
* feat(git-graph): add ref badges and action buttons to HistoryCommitRow
* fix(git-graph): add loading guards to reset actions, use theme tokens for ref badges
* fix(git-graph): conditional hooks, stale graph log, conflict handling, i18n
* fix(types): replace toBeDefined with toBeTruthy, fix toast API usage
* fix(lint): remove unused variables
* fix(git-graph): fix SVG height causing 150px row spacing
* fix(git-graph): smooth bezier curves, fill row height, round line caps
* fix(git-graph): non-scaling-stroke fixes bezier white spaces, sort curves on top
* fix(git-graph): remove viewBox scaling, match SVG height to actual row height
* fix(git-graph): ResizeObserver tracks actual row height, eliminates SVG height mismatch
* feat(git-graph): replace SVG with Canvas for graph rendering
* fix(git-graph): isolate canvas from flex layout to prevent replaced-element height leak
* feat(git-graph): align action buttons, add confirmation popups for all actions
* fix(git-graph): address code review findings CR-001 through CR-005
- CR-001: VS Code getGitLog now forwards 'all' option and parses %P parents
- CR-002: VS Code bridge/gitService implement checkoutCommit, cherryPick,
revertCommit, resetToCommit with conflict detection and hard-reset guard
- CR-003: server-side commit hash validated with /^[0-9a-fA-F]{7,40}$/
in both routes.js and service.js; 12 new rejection tests added
- CR-004: cherry-pick/revert conflict path now refreshes fetchStatus/
fetchBranches/fetchLog; conflict toast uses i18n keys in all 7 locales
- CR-005: corrected O(n) comment to O(n x lanes)
* fix(i18n): add zh-TW locale and common.language.traditionalChinese key to all locales
upstream/main added zh-TW.ts after branch diverged; CI type-check fails
when PR is merged because zh-TW.ts was missing all gitView.history.actions.*
keys and loadMore/loadingMore. Also adds common.language.traditionalChinese
to en.ts and all 6 non-English files to match upstream en.ts.
* fix: harden git history actions
* feat: split git history graph view
* chore: remove git graph planning docs
---------
Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
This commit is contained in:
committed by
GitHub
co-authored by
Bohdan Triapitsyn
parent
cc3d1bd63c
commit
52ffe9daef
@@ -504,12 +504,41 @@ export const dict: Record<I18nKey, string> = {
|
||||
'gitView.header.identityTooltip': 'Git 身分',
|
||||
'gitView.header.noIdentity': '無身分',
|
||||
'gitView.header.noProfiles': '沒有可套用的設定。',
|
||||
'gitView.header.repositoryViews': '儲存庫檢視',
|
||||
'gitView.header.removeRemoteAria': '移除遠端 {name}',
|
||||
'gitView.header.removeRemoteTitle': '移除 {name}',
|
||||
'gitView.header.upstreamSynced': '已同步',
|
||||
'gitView.header.upstreamTooltip': '與 {target} 比較。',
|
||||
'gitView.header.upstreamTooltipTracking': '與 {target} 比較。主要同步徽章仍反映 {tracking}。',
|
||||
'gitView.history.binary': '二進位',
|
||||
'gitView.history.actions.cancelButton': '取消',
|
||||
'gitView.history.actions.checkout': '簽出',
|
||||
'gitView.history.actions.checkoutConfirm': '要將此提交簽出為 detached HEAD 嗎?',
|
||||
'gitView.history.actions.cherryPick': 'Cherry-pick',
|
||||
'gitView.history.actions.cherryPickConfirm': '要將此提交 cherry-pick 到目前分支嗎?',
|
||||
'gitView.history.actions.conflictToastDescription': '衝突檔案:{files}。請手動解決並提交,或使用 git cherry-pick/revert --abort 中止。',
|
||||
'gitView.history.actions.conflictToastTitle': '衝突',
|
||||
'gitView.history.actions.confirmButton': '確認',
|
||||
'gitView.history.actions.createBranch': '在此建立分支',
|
||||
'gitView.history.actions.createBranchConfirm': '建立',
|
||||
'gitView.history.actions.createBranchPlaceholder': '分支名稱',
|
||||
'gitView.history.actions.detachedHead': '已簽出(detached HEAD)',
|
||||
'gitView.history.actions.merge': '合併到目前分支',
|
||||
'gitView.history.actions.mergeConfirm': '要將此提交合併到目前分支嗎?',
|
||||
'gitView.history.actions.rebase': 'Rebase 到此處',
|
||||
'gitView.history.actions.rebaseConfirm': '要將目前分支 rebase 到此提交嗎?',
|
||||
'gitView.history.actions.reset': 'Reset...',
|
||||
'gitView.history.actions.resetHard': 'Hard — 捨棄所有變更',
|
||||
'gitView.history.actions.resetHardConfirm': 'Hard reset — HEAD 會移動,所有未提交變更將永久捨棄。',
|
||||
'gitView.history.actions.resetHardConfirmButton': '捨棄變更',
|
||||
'gitView.history.actions.resetMixed': 'Mixed — 取消暫存變更',
|
||||
'gitView.history.actions.resetMixedConfirm': 'Mixed reset — HEAD 會移動,變更將取消暫存。',
|
||||
'gitView.history.actions.resetSoft': 'Soft — 保留暫存',
|
||||
'gitView.history.actions.resetSoftConfirm': 'Soft reset — HEAD 會移動,已暫存變更會保留。',
|
||||
'gitView.history.actions.revert': 'Revert',
|
||||
'gitView.history.actions.revertConfirm': '要暫存對此提交的 revert 嗎?',
|
||||
'gitView.history.loadMore': '載入更多',
|
||||
'gitView.history.loadingMore': '載入中...',
|
||||
'gitView.history.binaryNoDiff': '二進位檔案 — 無可用 diff',
|
||||
'gitView.history.commitsPlaceholder': '提交數',
|
||||
'gitView.history.copySha': '複製 SHA',
|
||||
@@ -526,6 +555,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'gitView.history.renamedNoDiff': '已重新命名檔案 — 不支援 diff',
|
||||
'gitView.history.renderDiffAnyway': '仍然渲染',
|
||||
'gitView.history.title': '歷史紀錄',
|
||||
'gitView.graph.title': '圖譜',
|
||||
'gitView.integrate.checking': '檢查中…',
|
||||
'gitView.integrate.cherryPickAbortedToast': '已中止 cherry-pick',
|
||||
'gitView.integrate.cherryPickConflictDescription': '請先解決衝突,然後繼續。',
|
||||
|
||||
Reference in New Issue
Block a user