@theia/scm 1.71.0-next.8 → 1.71.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.
- package/lib/browser/dirty-diff/dirty-diff-widget.js +1 -1
- package/lib/browser/dirty-diff/dirty-diff-widget.js.map +1 -1
- package/lib/browser/merge-editor/merge-editor-module.d.ts +6 -0
- package/lib/browser/merge-editor/merge-editor-module.d.ts.map +1 -1
- package/lib/browser/merge-editor/merge-editor-module.js +21 -2
- package/lib/browser/merge-editor/merge-editor-module.js.map +1 -1
- package/lib/browser/scm-context-key-service.d.ts +8 -0
- package/lib/browser/scm-context-key-service.d.ts.map +1 -1
- package/lib/browser/scm-context-key-service.js +16 -0
- package/lib/browser/scm-context-key-service.js.map +1 -1
- package/lib/browser/scm-contribution.d.ts.map +1 -1
- package/lib/browser/scm-contribution.js +143 -1
- package/lib/browser/scm-contribution.js.map +1 -1
- package/lib/browser/scm-frontend-module.d.ts.map +1 -1
- package/lib/browser/scm-frontend-module.js +14 -0
- package/lib/browser/scm-frontend-module.js.map +1 -1
- package/lib/browser/scm-history-graph-helpers.d.ts +39 -0
- package/lib/browser/scm-history-graph-helpers.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-helpers.js +167 -0
- package/lib/browser/scm-history-graph-helpers.js.map +1 -0
- package/lib/browser/scm-history-graph-lanes.d.ts +59 -0
- package/lib/browser/scm-history-graph-lanes.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-lanes.js +183 -0
- package/lib/browser/scm-history-graph-lanes.js.map +1 -0
- package/lib/browser/scm-history-graph-lanes.spec.d.ts +2 -0
- package/lib/browser/scm-history-graph-lanes.spec.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-lanes.spec.js +554 -0
- package/lib/browser/scm-history-graph-lanes.spec.js.map +1 -0
- package/lib/browser/scm-history-graph-model.d.ts +46 -0
- package/lib/browser/scm-history-graph-model.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-model.js +184 -0
- package/lib/browser/scm-history-graph-model.js.map +1 -0
- package/lib/browser/scm-history-graph-model.spec.d.ts +2 -0
- package/lib/browser/scm-history-graph-model.spec.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-model.spec.js +131 -0
- package/lib/browser/scm-history-graph-model.spec.js.map +1 -0
- package/lib/browser/scm-history-graph-tooltip.d.ts +14 -0
- package/lib/browser/scm-history-graph-tooltip.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-tooltip.js +190 -0
- package/lib/browser/scm-history-graph-tooltip.js.map +1 -0
- package/lib/browser/scm-history-graph-widget.d.ts +77 -0
- package/lib/browser/scm-history-graph-widget.d.ts.map +1 -0
- package/lib/browser/scm-history-graph-widget.js +490 -0
- package/lib/browser/scm-history-graph-widget.js.map +1 -0
- package/lib/browser/scm-provider.d.ts +61 -0
- package/lib/browser/scm-provider.d.ts.map +1 -1
- package/lib/browser/scm-provider.js.map +1 -1
- package/lib/browser/scm-repositories-widget.d.ts +6 -1
- package/lib/browser/scm-repositories-widget.d.ts.map +1 -1
- package/lib/browser/scm-repositories-widget.js +11 -4
- package/lib/browser/scm-repositories-widget.js.map +1 -1
- package/lib/browser/scm-repositories-widget.spec.js +1 -1
- package/lib/browser/scm-repositories-widget.spec.js.map +1 -1
- package/lib/browser/scm-service.d.ts.map +1 -1
- package/lib/browser/scm-service.js +4 -1
- package/lib/browser/scm-service.js.map +1 -1
- package/lib/browser/scm-service.spec.d.ts +2 -0
- package/lib/browser/scm-service.spec.d.ts.map +1 -0
- package/lib/browser/scm-service.spec.js +77 -0
- package/lib/browser/scm-service.spec.js.map +1 -0
- package/package.json +11 -11
- package/src/browser/dirty-diff/dirty-diff-widget.ts +1 -1
- package/src/browser/merge-editor/merge-editor-module.ts +24 -6
- package/src/browser/scm-context-key-service.ts +24 -0
- package/src/browser/scm-contribution.ts +157 -0
- package/src/browser/scm-frontend-module.ts +15 -0
- package/src/browser/scm-history-graph-helpers.ts +175 -0
- package/src/browser/scm-history-graph-lanes.spec.ts +635 -0
- package/src/browser/scm-history-graph-lanes.ts +258 -0
- package/src/browser/scm-history-graph-model.spec.ts +171 -0
- package/src/browser/scm-history-graph-model.ts +207 -0
- package/src/browser/scm-history-graph-tooltip.ts +213 -0
- package/src/browser/scm-history-graph-widget.tsx +712 -0
- package/src/browser/scm-provider.ts +68 -0
- package/src/browser/scm-repositories-widget.spec.ts +1 -1
- package/src/browser/scm-repositories-widget.tsx +10 -3
- package/src/browser/scm-service.spec.ts +91 -0
- package/src/browser/scm-service.ts +4 -1
- package/src/browser/style/index.css +12 -13
- package/src/browser/style/scm-history-graph.css +313 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2026 EclipseSource GmbH and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.laneColor = laneColor;
|
|
19
|
+
exports.getChangeStatus = getChangeStatus;
|
|
20
|
+
exports.getFileName = getFileName;
|
|
21
|
+
exports.getFilePath = getFilePath;
|
|
22
|
+
exports.getRepoRelativePath = getRepoRelativePath;
|
|
23
|
+
exports.getRefBadgeClass = getRefBadgeClass;
|
|
24
|
+
exports.isTagRef = isTagRef;
|
|
25
|
+
exports.isRemoteRef = isRemoteRef;
|
|
26
|
+
exports.getLocalNameFromRemote = getLocalNameFromRemote;
|
|
27
|
+
exports.deduplicateRefs = deduplicateRefs;
|
|
28
|
+
/**
|
|
29
|
+
* Returns the CSS color variable for the given lane index.
|
|
30
|
+
* Uses Theia's `--theia-scmGraph-*` variables, mirroring the VS Code
|
|
31
|
+
* scm graph color scheme:
|
|
32
|
+
* lane 0 (current ref) → historyItemRefColor
|
|
33
|
+
* lane 1 (remote ref) → historyItemRemoteRefColor
|
|
34
|
+
* lane 2 (base ref) → historyItemBaseRefColor
|
|
35
|
+
* lane 3–7 → foreground1–5
|
|
36
|
+
*/
|
|
37
|
+
function laneColor(index) {
|
|
38
|
+
switch (index % 8) {
|
|
39
|
+
case 0: return 'var(--theia-scmGraph-historyItemRefColor)';
|
|
40
|
+
case 1: return 'var(--theia-scmGraph-historyItemRemoteRefColor)';
|
|
41
|
+
case 2: return 'var(--theia-scmGraph-historyItemBaseRefColor)';
|
|
42
|
+
case 3: return 'var(--theia-scmGraph-foreground1)';
|
|
43
|
+
case 4: return 'var(--theia-scmGraph-foreground2)';
|
|
44
|
+
case 5: return 'var(--theia-scmGraph-foreground3)';
|
|
45
|
+
case 6: return 'var(--theia-scmGraph-foreground4)';
|
|
46
|
+
default: return 'var(--theia-scmGraph-foreground5)';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function getChangeStatus(change) {
|
|
50
|
+
if (!change.originalUri) {
|
|
51
|
+
return 'A';
|
|
52
|
+
}
|
|
53
|
+
if (!change.modifiedUri) {
|
|
54
|
+
return 'D';
|
|
55
|
+
}
|
|
56
|
+
if (change.renameUri) {
|
|
57
|
+
return 'R';
|
|
58
|
+
}
|
|
59
|
+
return 'M';
|
|
60
|
+
}
|
|
61
|
+
function getFileName(uri) {
|
|
62
|
+
const parts = uri.split('/');
|
|
63
|
+
return parts[parts.length - 1] || uri;
|
|
64
|
+
}
|
|
65
|
+
function getFilePath(uri) {
|
|
66
|
+
try {
|
|
67
|
+
const u = new URL(uri);
|
|
68
|
+
return u.pathname;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return uri;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Returns the repo-relative path of the given URI, stripping the rootUri prefix.
|
|
76
|
+
* Falls back to the full path if rootUri is unavailable or doesn't match.
|
|
77
|
+
*/
|
|
78
|
+
function getRepoRelativePath(uri, rootUri) {
|
|
79
|
+
const fullPath = getFilePath(uri);
|
|
80
|
+
if (!rootUri) {
|
|
81
|
+
return fullPath;
|
|
82
|
+
}
|
|
83
|
+
const rootPath = getFilePath(rootUri);
|
|
84
|
+
// Normalize: ensure rootPath ends with '/'
|
|
85
|
+
const rootPrefix = rootPath.endsWith('/') ? rootPath : rootPath + '/';
|
|
86
|
+
if (fullPath.startsWith(rootPrefix)) {
|
|
87
|
+
return fullPath.slice(rootPrefix.length);
|
|
88
|
+
}
|
|
89
|
+
return fullPath;
|
|
90
|
+
}
|
|
91
|
+
function getRefBadgeClass(ref) {
|
|
92
|
+
const cat = (ref.category ?? '').toLowerCase();
|
|
93
|
+
if (cat === 'heads' || cat === 'head' || ref.id.startsWith('refs/heads/')) {
|
|
94
|
+
return 'head';
|
|
95
|
+
}
|
|
96
|
+
if (cat === 'remotes' || cat === 'remote' || ref.id.startsWith('refs/remotes/')) {
|
|
97
|
+
return 'remote';
|
|
98
|
+
}
|
|
99
|
+
if (cat === 'tags' || cat === 'tag' || ref.id.startsWith('refs/tags/')) {
|
|
100
|
+
return 'tag';
|
|
101
|
+
}
|
|
102
|
+
if (cat === 'base') {
|
|
103
|
+
return 'base';
|
|
104
|
+
}
|
|
105
|
+
return 'head';
|
|
106
|
+
}
|
|
107
|
+
function isTagRef(ref) {
|
|
108
|
+
const cat = (ref.category ?? '').toLowerCase();
|
|
109
|
+
if (cat === 'tags' || cat === 'tag') {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
// Fall back to checking the ref id prefix (e.g. 'refs/tags/v1.0')
|
|
113
|
+
return ref.id.startsWith('refs/tags/');
|
|
114
|
+
}
|
|
115
|
+
function isRemoteRef(ref) {
|
|
116
|
+
const cat = (ref.category ?? '').toLowerCase();
|
|
117
|
+
if (cat === 'remotes' || cat === 'remote') {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
// Fall back to checking the ref id prefix (e.g. 'refs/remotes/origin/main')
|
|
121
|
+
return ref.id.startsWith('refs/remotes/');
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Extracts the local branch name from a remote ref name like "origin/master" → "master".
|
|
125
|
+
* Falls back to the full name if no slash is found.
|
|
126
|
+
*/
|
|
127
|
+
function getLocalNameFromRemote(remoteName) {
|
|
128
|
+
const slashIdx = remoteName.indexOf('/');
|
|
129
|
+
return slashIdx >= 0 ? remoteName.slice(slashIdx + 1) : remoteName;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Deduplicates refs: when a local branch (e.g. "master") and a remote branch
|
|
133
|
+
* (e.g. "origin/master") both appear, collapse them into one entry with `hasBoth=true`.
|
|
134
|
+
* Tags and other ref types are passed through unchanged.
|
|
135
|
+
*/
|
|
136
|
+
function deduplicateRefs(refs) {
|
|
137
|
+
const localNames = new Set();
|
|
138
|
+
for (const ref of refs) {
|
|
139
|
+
if (!isRemoteRef(ref) && !isTagRef(ref)) {
|
|
140
|
+
localNames.add(ref.name.toLowerCase());
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const result = [];
|
|
144
|
+
const suppressedRemotes = new Set();
|
|
145
|
+
// First pass: identify remote refs that have a matching local branch
|
|
146
|
+
for (const ref of refs) {
|
|
147
|
+
if (isRemoteRef(ref)) {
|
|
148
|
+
const localName = getLocalNameFromRemote(ref.name).toLowerCase();
|
|
149
|
+
if (localNames.has(localName)) {
|
|
150
|
+
suppressedRemotes.add(ref.id);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Second pass: emit all refs except suppressed remote ones;
|
|
155
|
+
// mark local branches that have a matching remote with hasBoth=true
|
|
156
|
+
for (const ref of refs) {
|
|
157
|
+
if (suppressedRemotes.has(ref.id)) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const hasBoth = !isRemoteRef(ref) && !isTagRef(ref)
|
|
161
|
+
? refs.some(r => isRemoteRef(r) && getLocalNameFromRemote(r.name).toLowerCase() === ref.name.toLowerCase())
|
|
162
|
+
: false;
|
|
163
|
+
result.push({ ref, hasBoth });
|
|
164
|
+
}
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=scm-history-graph-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scm-history-graph-helpers.js","sourceRoot":"","sources":["../../src/browser/scm-history-graph-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DAG graph lane computation for SCM commit history visualization.
|
|
3
|
+
*
|
|
4
|
+
* Each row in the graph has:
|
|
5
|
+
* - `lane`: the column index where the commit circle is drawn
|
|
6
|
+
* - `color`: a lane index (0-7) used to pick a CSS color variable
|
|
7
|
+
* - `edges`: segments to draw on this row — each segment connects two lane
|
|
8
|
+
* positions and carries a color and type
|
|
9
|
+
*
|
|
10
|
+
* Edge types determine how each segment is rendered in the SVG:
|
|
11
|
+
* - `'pass-through'`: straight vertical line through the full row height
|
|
12
|
+
* - `'branch-out'`: bezier curve starting at the commit's Y (mid-row),
|
|
13
|
+
* sweeping down to the new lane at the bottom of the row
|
|
14
|
+
* - `'merge-in'`: bezier curve starting at the source lane at the top of
|
|
15
|
+
* the row, sweeping into the commit's Y (mid-row)
|
|
16
|
+
*/
|
|
17
|
+
export type GraphEdgeType = 'pass-through' | 'branch-out' | 'merge-in';
|
|
18
|
+
export interface GraphEdge {
|
|
19
|
+
/** Source lane position (top of the row for pass-through/merge-in; commit lane for branch-out). */
|
|
20
|
+
readonly fromLane: number;
|
|
21
|
+
/** Target lane position (bottom of the row for pass-through/branch-out; commit lane for merge-in). */
|
|
22
|
+
readonly toLane: number;
|
|
23
|
+
/** Color index (0–7) for this edge. */
|
|
24
|
+
readonly color: number;
|
|
25
|
+
/** How this edge should be rendered in the SVG. */
|
|
26
|
+
readonly type: GraphEdgeType;
|
|
27
|
+
}
|
|
28
|
+
export interface GraphRow {
|
|
29
|
+
/** Lane index where the commit node is rendered. */
|
|
30
|
+
readonly lane: number;
|
|
31
|
+
/** Color index for the commit node dot. */
|
|
32
|
+
readonly color: number;
|
|
33
|
+
/** Edges crossing or originating on this row. */
|
|
34
|
+
readonly edges: readonly GraphEdge[];
|
|
35
|
+
/**
|
|
36
|
+
* Whether the commit's lane continues downward (i.e. first parent stays in
|
|
37
|
+
* the same lane). When false, no bottom line segment is drawn below the
|
|
38
|
+
* commit circle (root commit or merge convergence where the lane is freed).
|
|
39
|
+
*/
|
|
40
|
+
readonly hasContinuation: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Whether there is an incoming line from above on the commit's lane (i.e.
|
|
43
|
+
* the commit was referenced as a parent by an earlier row). When false,
|
|
44
|
+
* no top line segment is drawn above the commit circle.
|
|
45
|
+
*/
|
|
46
|
+
readonly hasTopLine: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Compute graph rows for an ordered list of commits (topological order,
|
|
50
|
+
* newest first). Each commit must supply its own `id` and `parentIds`.
|
|
51
|
+
*
|
|
52
|
+
* @param commits Topologically sorted commits (newest → oldest).
|
|
53
|
+
* @returns One `GraphRow` per commit in the same order.
|
|
54
|
+
*/
|
|
55
|
+
export declare function computeGraphRows(commits: ReadonlyArray<{
|
|
56
|
+
id: string;
|
|
57
|
+
parentIds?: readonly string[];
|
|
58
|
+
}>): GraphRow[];
|
|
59
|
+
//# sourceMappingURL=scm-history-graph-lanes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scm-history-graph-lanes.d.ts","sourceRoot":"","sources":["../../src/browser/scm-history-graph-lanes.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,UAAU,CAAC;AAEvE,MAAM,WAAW,SAAS;IACtB,mGAAmG;IACnG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sGAAsG;IACtG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,QAAQ;IACrB,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAChC;AAaD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC5B,OAAO,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC,GACtE,QAAQ,EAAE,CAoKZ"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2026 EclipseSource GmbH and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.computeGraphRows = computeGraphRows;
|
|
19
|
+
/**
|
|
20
|
+
* Compute graph rows for an ordered list of commits (topological order,
|
|
21
|
+
* newest first). Each commit must supply its own `id` and `parentIds`.
|
|
22
|
+
*
|
|
23
|
+
* @param commits Topologically sorted commits (newest → oldest).
|
|
24
|
+
* @returns One `GraphRow` per commit in the same order.
|
|
25
|
+
*/
|
|
26
|
+
function computeGraphRows(commits) {
|
|
27
|
+
// lanes[i] = id of commit that "owns" lane i (i.e. we are waiting for this
|
|
28
|
+
// commit to appear in the list so we can close the lane).
|
|
29
|
+
const lanes = [];
|
|
30
|
+
// laneColors[i] = the color index permanently assigned to lane i
|
|
31
|
+
const laneColors = [];
|
|
32
|
+
const rows = [];
|
|
33
|
+
for (const commit of commits) {
|
|
34
|
+
const parentIds = commit.parentIds ?? [];
|
|
35
|
+
// --- 1. Find or assign a lane for this commit -----------------------
|
|
36
|
+
let myLane = lanes.indexOf(commit.id);
|
|
37
|
+
// hasTopLine: true when this commit was already reserved as a parent by
|
|
38
|
+
// an earlier row — meaning there IS a connection coming from above.
|
|
39
|
+
const hasTopLine = myLane !== -1;
|
|
40
|
+
if (myLane === -1) {
|
|
41
|
+
// Not yet tracked → open a new lane
|
|
42
|
+
myLane = firstFreeLane(lanes);
|
|
43
|
+
lanes[myLane] = commit.id;
|
|
44
|
+
laneColors[myLane] = myLane % 8;
|
|
45
|
+
}
|
|
46
|
+
const myColor = laneColors[myLane] ?? myLane % 8;
|
|
47
|
+
// Collect any duplicate lane occupants: other lanes that were kept
|
|
48
|
+
// alive pointing at this same commit (sibling branch tips whose lane
|
|
49
|
+
// was preserved until the parent row). These emit merge-in edges and
|
|
50
|
+
// are freed before the pass-through snapshot so they don't appear as
|
|
51
|
+
// spurious pass-through lines on this row.
|
|
52
|
+
const duplicateLanes = [];
|
|
53
|
+
if (hasTopLine) {
|
|
54
|
+
for (let li = 0; li < lanes.length; li++) {
|
|
55
|
+
if (lanes[li] === commit.id && li !== myLane) {
|
|
56
|
+
duplicateLanes.push({ lane: li, color: laneColors[li] ?? li % 8 });
|
|
57
|
+
lanes[li] = undefined;
|
|
58
|
+
laneColors[li] = undefined;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// --- 2. Snapshot current lane state before mutations ----------------
|
|
63
|
+
const lanesCopy = lanes.slice();
|
|
64
|
+
// --- 3. Determine parent lane assignments ---------------------------
|
|
65
|
+
const parentLanes = [];
|
|
66
|
+
// Track which parents were ALREADY in existing lanes (merge-in) vs new
|
|
67
|
+
const parentIsExisting = [];
|
|
68
|
+
for (let pi = 0; pi < parentIds.length; pi++) {
|
|
69
|
+
const pid = parentIds[pi];
|
|
70
|
+
const parentLane = lanesCopy.indexOf(pid);
|
|
71
|
+
if (parentLane !== -1 && parentLane !== myLane) {
|
|
72
|
+
if (hasTopLine) {
|
|
73
|
+
// Pre-reserved commit: parent already has a lane → merge-in edge on this row.
|
|
74
|
+
parentLanes.push(parentLane);
|
|
75
|
+
parentIsExisting.push(true);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
// Non-pre-reserved sibling branch tip: keep this lane alive so it
|
|
79
|
+
// passes through as a pass-through line until the parent row, where
|
|
80
|
+
// a merge-in is emitted via the duplicateLanes mechanism.
|
|
81
|
+
// No edge is emitted here; record myLane so hasContinuation is true.
|
|
82
|
+
lanes[myLane] = pid;
|
|
83
|
+
parentLanes.push(myLane);
|
|
84
|
+
parentIsExisting.push(false);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else if (parentLane === myLane) {
|
|
88
|
+
// First parent inherits this lane (fast-forward) — straight down
|
|
89
|
+
parentLanes.push(myLane);
|
|
90
|
+
parentIsExisting.push(false); // treated as inline continuation
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// New parent → assign a lane
|
|
94
|
+
if (pi === 0) {
|
|
95
|
+
// First parent continues in the same lane
|
|
96
|
+
lanes[myLane] = pid;
|
|
97
|
+
// Keep the same color as myLane for the first parent
|
|
98
|
+
parentLanes.push(myLane);
|
|
99
|
+
parentIsExisting.push(false);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// Additional parents get new lanes — branch-out
|
|
103
|
+
const newLane = firstFreeLane(lanes);
|
|
104
|
+
lanes[newLane] = pid;
|
|
105
|
+
laneColors[newLane] = newLane % 8;
|
|
106
|
+
parentLanes.push(newLane);
|
|
107
|
+
parentIsExisting.push(false);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// If the commit has no parents (root commit), free the lane
|
|
112
|
+
if (parentIds.length === 0) {
|
|
113
|
+
lanes[myLane] = undefined;
|
|
114
|
+
laneColors[myLane] = undefined;
|
|
115
|
+
}
|
|
116
|
+
else if (!parentLanes.includes(myLane)) {
|
|
117
|
+
// No parent inherited myLane — decide whether to free or keep the lane.
|
|
118
|
+
if (hasTopLine) {
|
|
119
|
+
// Pre-reserved commit (merge convergence): free the lane immediately.
|
|
120
|
+
lanes[myLane] = undefined;
|
|
121
|
+
laneColors[myLane] = undefined;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Non-pre-reserved sibling branch tip: keep the lane alive pointing
|
|
125
|
+
// at the first parent so it persists as a pass-through until the
|
|
126
|
+
// parent row. At the parent row, the duplicate lane occupant is
|
|
127
|
+
// detected and a merge-in edge is emitted there instead.
|
|
128
|
+
lanes[myLane] = parentIds[0];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// --- 4. Emit edges --------------------------------------------------
|
|
132
|
+
const edges = [];
|
|
133
|
+
// Pass-through lines: lanes that were occupied before this row and
|
|
134
|
+
// are NOT the commit's own lane continue straight through.
|
|
135
|
+
for (let li = 0; li < lanesCopy.length; li++) {
|
|
136
|
+
const occupant = lanesCopy[li];
|
|
137
|
+
if (!occupant || occupant === commit.id) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const color = laneColors[li] ?? li % 8;
|
|
141
|
+
edges.push({ fromLane: li, toLane: li, color, type: 'pass-through' });
|
|
142
|
+
}
|
|
143
|
+
for (let pi = 0; pi < parentIds.length; pi++) {
|
|
144
|
+
const toLane = parentLanes[pi];
|
|
145
|
+
const isExisting = parentIsExisting[pi];
|
|
146
|
+
if (toLane === myLane) {
|
|
147
|
+
// First parent continues in the same lane — no edge is emitted.
|
|
148
|
+
// The vertical connection is represented by hasContinuation:true on
|
|
149
|
+
// this row and hasTopLine:true on the parent's row; the SVG renderer
|
|
150
|
+
// draws the top/bottom line segments around the commit circle instead.
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (isExisting) {
|
|
154
|
+
// Merge-in: an existing lane at the top of the row curves into
|
|
155
|
+
// the commit position at mid-row.
|
|
156
|
+
const color = laneColors[toLane] ?? toLane % 8;
|
|
157
|
+
edges.push({ fromLane: toLane, toLane: myLane, color, type: 'merge-in' });
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// Branch-out: the commit spawns a new lane below mid-row.
|
|
161
|
+
const color = laneColors[toLane] ?? toLane % 8;
|
|
162
|
+
edges.push({ fromLane: myLane, toLane, color, type: 'branch-out' });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Merge-in edges for duplicate lane occupants (sibling branch tips
|
|
166
|
+
// converging into this commit's lane).
|
|
167
|
+
for (const dl of duplicateLanes) {
|
|
168
|
+
edges.push({ fromLane: dl.lane, toLane: myLane, color: dl.color, type: 'merge-in' });
|
|
169
|
+
}
|
|
170
|
+
// hasContinuation: true if the first parent continues in the same lane,
|
|
171
|
+
// OR if this is a sibling branch tip whose lane was kept alive (pointing
|
|
172
|
+
// at the parent) so it persists as a pass-through to the parent row.
|
|
173
|
+
const hasContinuation = parentIds.length > 0 && (parentLanes[0] === myLane || lanes[myLane] === parentIds[0]);
|
|
174
|
+
rows.push({ lane: myLane, color: myColor, edges, hasContinuation, hasTopLine });
|
|
175
|
+
}
|
|
176
|
+
return rows;
|
|
177
|
+
}
|
|
178
|
+
/** Returns the index of the first undefined slot, or lanes.length if full. */
|
|
179
|
+
function firstFreeLane(lanes) {
|
|
180
|
+
const idx = lanes.indexOf(undefined);
|
|
181
|
+
return idx === -1 ? lanes.length : idx;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=scm-history-graph-lanes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scm-history-graph-lanes.js","sourceRoot":"","sources":["../../src/browser/scm-history-graph-lanes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scm-history-graph-lanes.spec.d.ts","sourceRoot":"","sources":["../../src/browser/scm-history-graph-lanes.spec.ts"],"names":[],"mappings":""}
|