Add support for dueToMove chunks in gr-diff
These chunks would then be marked differently - with a different css class - so that it would be possible to distinguish chunks that were added/removed because of a move operation instead of an actual intented add/remove. Change-Id: I9511f838d1634662397deae45042c4e21fd12750
This commit is contained in:
@@ -41,6 +41,9 @@ export class GrDiffBuilderSideBySide extends GrDiffBuilder {
|
|||||||
if (group.dueToRebase) {
|
if (group.dueToRebase) {
|
||||||
sectionEl.classList.add('dueToRebase');
|
sectionEl.classList.add('dueToRebase');
|
||||||
}
|
}
|
||||||
|
if (group.dueToMove) {
|
||||||
|
sectionEl.classList.add('dueToMove');
|
||||||
|
}
|
||||||
if (group.ignoredWhitespaceOnly) {
|
if (group.ignoredWhitespaceOnly) {
|
||||||
sectionEl.classList.add('ignoredWhitespaceOnly');
|
sectionEl.classList.add('ignoredWhitespaceOnly');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ export class GrDiffBuilderUnified extends GrDiffBuilder {
|
|||||||
if (group.dueToRebase) {
|
if (group.dueToRebase) {
|
||||||
sectionEl.classList.add('dueToRebase');
|
sectionEl.classList.add('dueToRebase');
|
||||||
}
|
}
|
||||||
|
if (group.dueToMove) {
|
||||||
|
sectionEl.classList.add('dueToMove');
|
||||||
|
}
|
||||||
if (group.ignoredWhitespaceOnly) {
|
if (group.ignoredWhitespaceOnly) {
|
||||||
sectionEl.classList.add('ignoredWhitespaceOnly');
|
sectionEl.classList.add('ignoredWhitespaceOnly');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,6 +133,12 @@ suite('GrDiffBuilderUnified tests', () => {
|
|||||||
assert.isTrue(sectionEl.classList.contains('dueToRebase'));
|
assert.isTrue(sectionEl.classList.contains('dueToRebase'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('creates the section with class if dueToMove', () => {
|
||||||
|
group.dueToMove = true;
|
||||||
|
const sectionEl = diffBuilder.buildSectionElement(group);
|
||||||
|
assert.isTrue(sectionEl.classList.contains('dueToMove'));
|
||||||
|
});
|
||||||
|
|
||||||
test('creates first the removed and then the added rows', () => {
|
test('creates first the removed and then the added rows', () => {
|
||||||
const sectionEl = diffBuilder.buildSectionElement(group);
|
const sectionEl = diffBuilder.buildSectionElement(group);
|
||||||
const rowEls = sectionEl.querySelectorAll('.diff-row');
|
const rowEls = sectionEl.querySelectorAll('.diff-row');
|
||||||
|
|||||||
@@ -359,6 +359,7 @@ export class GrDiffProcessor extends GestureEventListeners(
|
|||||||
const group = new GrDiffGroup(type, lines);
|
const group = new GrDiffGroup(type, lines);
|
||||||
group.keyLocation = !!chunk.keyLocation;
|
group.keyLocation = !!chunk.keyLocation;
|
||||||
group.dueToRebase = !!chunk.due_to_rebase;
|
group.dueToRebase = !!chunk.due_to_rebase;
|
||||||
|
group.dueToMove = !!chunk.due_to_move;
|
||||||
group.ignoredWhitespaceOnly = !!chunk.common;
|
group.ignoredWhitespaceOnly = !!chunk.common;
|
||||||
return group;
|
return group;
|
||||||
}
|
}
|
||||||
@@ -676,6 +677,9 @@ export class GrDiffProcessor extends GestureEventListeners(
|
|||||||
if (chunk.due_to_rebase) {
|
if (chunk.due_to_rebase) {
|
||||||
subChunk.due_to_rebase = true;
|
subChunk.due_to_rebase = true;
|
||||||
}
|
}
|
||||||
|
if (chunk.due_to_move) {
|
||||||
|
subChunk.due_to_move = true;
|
||||||
|
}
|
||||||
return subChunk;
|
return subChunk;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -875,6 +875,16 @@ suite('gr-diff-processor tests', () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('_breakdownChunk keeps due_to_move for broken down additions',
|
||||||
|
() => {
|
||||||
|
sinon.spy(element, '_breakdown');
|
||||||
|
const chunk = {b: ['blah', 'blah', 'blah'], due_to_move: true};
|
||||||
|
const result = element._breakdownChunk(chunk);
|
||||||
|
for (const subResult of result) {
|
||||||
|
assert.isTrue(subResult.due_to_move);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
test('_breakdown common case', () => {
|
test('_breakdown common case', () => {
|
||||||
const array = 'Lorem ipsum dolor sit amet, suspendisse inceptos'
|
const array = 'Lorem ipsum dolor sit amet, suspendisse inceptos'
|
||||||
.split(' ');
|
.split(' ');
|
||||||
|
|||||||
@@ -189,6 +189,8 @@ export class GrDiffGroup {
|
|||||||
|
|
||||||
dueToRebase = false;
|
dueToRebase = false;
|
||||||
|
|
||||||
|
dueToMove = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* True means all changes in this line are whitespace changes that should
|
* True means all changes in this line are whitespace changes that should
|
||||||
* not be highlighted as changed as per the user settings.
|
* not be highlighted as changed as per the user settings.
|
||||||
|
|||||||
@@ -177,6 +177,14 @@ export const htmlTemplate = html`
|
|||||||
background-color: var(--light-remove-add-highlight-color);
|
background-color: var(--light-remove-add-highlight-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* dueToMove */
|
||||||
|
.dueToMove .content.add .contentText {
|
||||||
|
background-color: var(--light-moved-add-highlight-color);
|
||||||
|
}
|
||||||
|
.dueToMove .content.remove .contentText {
|
||||||
|
background-color: var(--light-remove-add-highlight-color);
|
||||||
|
}
|
||||||
|
|
||||||
/* ignoredWhitespaceOnly */
|
/* ignoredWhitespaceOnly */
|
||||||
.ignoredWhitespaceOnly .content.add .contentText .intraline,
|
.ignoredWhitespaceOnly .content.add .contentText .intraline,
|
||||||
.delta.total.ignoredWhitespaceOnly .content.add .contentText,
|
.delta.total.ignoredWhitespaceOnly .content.add .contentText,
|
||||||
|
|||||||
@@ -167,6 +167,7 @@ $_documentContainer.innerHTML = `
|
|||||||
--diff-trailing-whitespace-indicator: #ff9ad2;
|
--diff-trailing-whitespace-indicator: #ff9ad2;
|
||||||
--light-add-highlight-color: #d8fed8;
|
--light-add-highlight-color: #d8fed8;
|
||||||
--light-rebased-add-highlight-color: #eef;
|
--light-rebased-add-highlight-color: #eef;
|
||||||
|
--light-moved-add-highlight-color: #eef;
|
||||||
--light-remove-add-highlight-color: #fff8dc;
|
--light-remove-add-highlight-color: #fff8dc;
|
||||||
--light-remove-highlight-color: #ffebee;
|
--light-remove-highlight-color: #ffebee;
|
||||||
--coverage-covered: #e0f2f1;
|
--coverage-covered: #e0f2f1;
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ function getStyleEl() {
|
|||||||
--diff-trailing-whitespace-indicator: #ff9ad2;
|
--diff-trailing-whitespace-indicator: #ff9ad2;
|
||||||
--light-add-highlight-color: #0f401f;
|
--light-add-highlight-color: #0f401f;
|
||||||
--light-rebased-add-highlight-color: #487165;
|
--light-rebased-add-highlight-color: #487165;
|
||||||
|
--light-moved-add-highlight-color: #487165;
|
||||||
--light-remove-add-highlight-color: #2f3f2f;
|
--light-remove-add-highlight-color: #2f3f2f;
|
||||||
--light-remove-highlight-color: #320404;
|
--light-remove-highlight-color: #320404;
|
||||||
--coverage-covered: #112826;
|
--coverage-covered: #112826;
|
||||||
|
|||||||
@@ -1123,6 +1123,7 @@ export interface DiffContent {
|
|||||||
edit_a?: number[][];
|
edit_a?: number[][];
|
||||||
edit_b?: number[][];
|
edit_b?: number[][];
|
||||||
due_to_rebase?: boolean;
|
due_to_rebase?: boolean;
|
||||||
|
due_to_move?: boolean;
|
||||||
skip?: string;
|
skip?: string;
|
||||||
common?: string;
|
common?: string;
|
||||||
keyLocation?: boolean;
|
keyLocation?: boolean;
|
||||||
|
|||||||
Reference in New Issue
Block a user