Skip to content

Commit 1518b11

Browse files
authored
SCM - use correct color when rendering merge commit (microsoft#223613)
1 parent 6c4ef48 commit 1518b11

File tree

2 files changed

+100
-2
lines changed

2 files changed

+100
-2
lines changed

src/vs/workbench/contrib/scm/browser/scmHistory.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,16 @@ export function toISCMHistoryItemViewModelArray(historyItems: ISCMHistoryItem[],
261261
// Add unprocessed parent(s) to the output
262262
for (let i = firstParentAdded ? 1 : 0; i < historyItem.parentIds.length; i++) {
263263
// Color index (label -> next color)
264-
let colorIdentifier = getLabelColorIdentifier(historyItem, colorMap);
264+
let colorIdentifier: string | undefined;
265+
266+
if (!firstParentAdded) {
267+
colorIdentifier = getLabelColorIdentifier(historyItem, colorMap);
268+
} else {
269+
const historyItemParent = historyItems
270+
.find(h => h.id === historyItem.parentIds[i]);
271+
colorIdentifier = historyItemParent ? getLabelColorIdentifier(historyItemParent, colorMap) : undefined;
272+
}
273+
265274
if (!colorIdentifier) {
266275
colorIndex = rot(colorIndex + 1, colorRegistry.length);
267276
colorIdentifier = colorRegistry[colorIndex];

src/vs/workbench/contrib/scm/test/browser/scmHistory.test.ts

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
import * as assert from 'assert';
77
import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils';
8-
import { colorRegistry, toISCMHistoryItemViewModelArray } from 'vs/workbench/contrib/scm/browser/scmHistory';
8+
import { ColorIdentifier } from 'vs/platform/theme/common/colorUtils';
9+
import { colorRegistry, historyItemGroupBase, historyItemGroupLocal, historyItemGroupRemote, toISCMHistoryItemViewModelArray } from 'vs/workbench/contrib/scm/browser/scmHistory';
910
import { ISCMHistoryItem } from 'vs/workbench/contrib/scm/common/history';
1011

1112
suite('toISCMHistoryItemViewModelArray', () => {
@@ -500,4 +501,92 @@ suite('toISCMHistoryItemViewModelArray', () => {
500501
assert.strictEqual(viewModels[6].outputSwimlanes[0].id, 'h');
501502
assert.strictEqual(viewModels[6].outputSwimlanes[0].color, colorRegistry[0]);
502503
});
504+
505+
/**
506+
* * a(b) [topic]
507+
* * b(c)
508+
* * c(d) [origin/topic]
509+
* * d(e)
510+
* * e(f,g)
511+
* |\
512+
* | * g(h) [origin/main]
513+
*/
514+
test('graph with color map', () => {
515+
const models = [
516+
{ id: 'a', parentIds: ['b'], labels: [{ title: 'topic' }] },
517+
{ id: 'b', parentIds: ['c'] },
518+
{ id: 'c', parentIds: ['d'], labels: [{ title: 'origin/topic' }] },
519+
{ id: 'd', parentIds: ['e'] },
520+
{ id: 'e', parentIds: ['f', 'g'] },
521+
{ id: 'g', parentIds: ['h'], labels: [{ title: 'origin/main' }] }
522+
] as ISCMHistoryItem[];
523+
524+
const colorMap = new Map<string, ColorIdentifier>([
525+
['topic', historyItemGroupLocal],
526+
['origin/topic', historyItemGroupRemote],
527+
['origin/main', historyItemGroupBase],
528+
]);
529+
530+
const viewModels = toISCMHistoryItemViewModelArray(models, colorMap);
531+
532+
assert.strictEqual(viewModels.length, 6);
533+
534+
// node a
535+
assert.strictEqual(viewModels[0].inputSwimlanes.length, 0);
536+
537+
assert.strictEqual(viewModels[0].outputSwimlanes.length, 1);
538+
assert.strictEqual(viewModels[0].outputSwimlanes[0].id, 'b');
539+
assert.strictEqual(viewModels[0].outputSwimlanes[0].color, historyItemGroupLocal);
540+
541+
// node b
542+
assert.strictEqual(viewModels[1].inputSwimlanes.length, 1);
543+
assert.strictEqual(viewModels[1].inputSwimlanes[0].id, 'b');
544+
assert.strictEqual(viewModels[1].inputSwimlanes[0].color, historyItemGroupLocal);
545+
546+
assert.strictEqual(viewModels[1].outputSwimlanes.length, 1);
547+
assert.strictEqual(viewModels[1].outputSwimlanes[0].id, 'c');
548+
assert.strictEqual(viewModels[1].outputSwimlanes[0].color, historyItemGroupLocal);
549+
550+
// node c
551+
assert.strictEqual(viewModels[2].inputSwimlanes.length, 1);
552+
assert.strictEqual(viewModels[2].inputSwimlanes[0].id, 'c');
553+
assert.strictEqual(viewModels[2].inputSwimlanes[0].color, historyItemGroupLocal);
554+
555+
assert.strictEqual(viewModels[2].outputSwimlanes.length, 1);
556+
assert.strictEqual(viewModels[2].outputSwimlanes[0].id, 'd');
557+
assert.strictEqual(viewModels[2].outputSwimlanes[0].color, historyItemGroupRemote);
558+
559+
// node d
560+
assert.strictEqual(viewModels[3].inputSwimlanes.length, 1);
561+
assert.strictEqual(viewModels[3].inputSwimlanes[0].id, 'd');
562+
assert.strictEqual(viewModels[3].inputSwimlanes[0].color, historyItemGroupRemote);
563+
564+
assert.strictEqual(viewModels[3].outputSwimlanes.length, 1);
565+
assert.strictEqual(viewModels[3].outputSwimlanes[0].id, 'e');
566+
assert.strictEqual(viewModels[3].outputSwimlanes[0].color, historyItemGroupRemote);
567+
568+
// node e
569+
assert.strictEqual(viewModels[4].inputSwimlanes.length, 1);
570+
assert.strictEqual(viewModels[4].inputSwimlanes[0].id, 'e');
571+
assert.strictEqual(viewModels[4].inputSwimlanes[0].color, historyItemGroupRemote);
572+
573+
assert.strictEqual(viewModels[4].outputSwimlanes.length, 2);
574+
assert.strictEqual(viewModels[4].outputSwimlanes[0].id, 'f');
575+
assert.strictEqual(viewModels[4].outputSwimlanes[0].color, historyItemGroupRemote);
576+
assert.strictEqual(viewModels[4].outputSwimlanes[1].id, 'g');
577+
assert.strictEqual(viewModels[4].outputSwimlanes[1].color, historyItemGroupBase);
578+
579+
// node g
580+
assert.strictEqual(viewModels[5].inputSwimlanes.length, 2);
581+
assert.strictEqual(viewModels[5].inputSwimlanes[0].id, 'f');
582+
assert.strictEqual(viewModels[5].inputSwimlanes[0].color, historyItemGroupRemote);
583+
assert.strictEqual(viewModels[5].inputSwimlanes[1].id, 'g');
584+
assert.strictEqual(viewModels[5].inputSwimlanes[1].color, historyItemGroupBase);
585+
586+
assert.strictEqual(viewModels[5].outputSwimlanes.length, 2);
587+
assert.strictEqual(viewModels[5].outputSwimlanes[0].id, 'f');
588+
assert.strictEqual(viewModels[5].outputSwimlanes[0].color, historyItemGroupRemote);
589+
assert.strictEqual(viewModels[5].outputSwimlanes[1].id, 'h');
590+
assert.strictEqual(viewModels[5].outputSwimlanes[1].color, historyItemGroupBase);
591+
});
503592
});

0 commit comments

Comments
 (0)