mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-09 15:05:44 +01:00
Create new hunks instead of expanding the existing ones
This is necessary to distinguish between "real" diff lines and those created due to expansion.
This commit is contained in:
@@ -275,8 +275,11 @@ describe("with hunks the diff expander", () => {
|
|||||||
it("should return a really bix number for the expand bottom range of the last hunk", () => {
|
it("should return a really bix number for the expand bottom range of the last hunk", () => {
|
||||||
expect(diffExpander.getHunk(3).maxExpandBottomRange).toBe(-1);
|
expect(diffExpander.getHunk(3).maxExpandBottomRange).toBe(-1);
|
||||||
});
|
});
|
||||||
it("should expand hunk with new line from api client at the bottom", async () => {
|
it("should create new hunk with new line from api client at the bottom", async () => {
|
||||||
expect(diffExpander.getHunk(1).hunk.changes.length).toBe(7);
|
expect(diffExpander.getHunk(1).hunk.changes.length).toBe(7);
|
||||||
|
const oldHunkCount = diffExpander.hunkCount();
|
||||||
|
const expandedHunk = diffExpander.getHunk(1).hunk;
|
||||||
|
const subsequentHunk = diffExpander.getHunk(2).hunk;
|
||||||
fetchMock.get("http://localhost:8081/scm/api/v2/content/abc/CommitMessage.js?start=20&end=21", "new line 1");
|
fetchMock.get("http://localhost:8081/scm/api/v2/content/abc/CommitMessage.js?start=20&end=21", "new line 1");
|
||||||
let newFile: File;
|
let newFile: File;
|
||||||
diffExpander.getHunk(1).expandBottom(1, file => {
|
diffExpander.getHunk(1).expandBottom(1, file => {
|
||||||
@@ -284,11 +287,18 @@ describe("with hunks the diff expander", () => {
|
|||||||
});
|
});
|
||||||
await fetchMock.flush(true);
|
await fetchMock.flush(true);
|
||||||
expect(fetchMock.done()).toBe(true);
|
expect(fetchMock.done()).toBe(true);
|
||||||
expect(newFile!.hunks![1].changes.length).toBe(8);
|
expect(newFile!.hunks!.length).toBe(oldHunkCount + 1);
|
||||||
expect(newFile!.hunks![1].changes[7].content).toBe("new line 1");
|
expect(newFile!.hunks![1]).toBe(expandedHunk);
|
||||||
|
const newHunk = newFile!.hunks![2].changes;
|
||||||
|
expect(newHunk.length).toBe(1);
|
||||||
|
expect(newHunk[0].content).toBe("new line 1");
|
||||||
|
expect(newFile!.hunks![3]).toBe(subsequentHunk);
|
||||||
});
|
});
|
||||||
it("should expand hunk with new line from api client at the top", async () => {
|
it("should create new hunk with new line from api client at the top", async () => {
|
||||||
expect(diffExpander.getHunk(1).hunk.changes.length).toBe(7);
|
expect(diffExpander.getHunk(1).hunk.changes.length).toBe(7);
|
||||||
|
const oldHunkCount = diffExpander.hunkCount();
|
||||||
|
const expandedHunk = diffExpander.getHunk(1).hunk;
|
||||||
|
const preceedingHunk = diffExpander.getHunk(0).hunk;
|
||||||
fetchMock.get(
|
fetchMock.get(
|
||||||
"http://localhost:8081/scm/api/v2/content/abc/CommitMessage.js?start=8&end=13",
|
"http://localhost:8081/scm/api/v2/content/abc/CommitMessage.js?start=8&end=13",
|
||||||
"new line 9\nnew line 10\nnew line 11\nnew line 12\nnew line 13"
|
"new line 9\nnew line 10\nnew line 11\nnew line 12\nnew line 13"
|
||||||
@@ -299,7 +309,11 @@ describe("with hunks the diff expander", () => {
|
|||||||
});
|
});
|
||||||
await fetchMock.flush(true);
|
await fetchMock.flush(true);
|
||||||
expect(fetchMock.done()).toBe(true);
|
expect(fetchMock.done()).toBe(true);
|
||||||
expect(newFile!.hunks![1].changes.length).toBe(12);
|
expect(newFile!.hunks!.length).toBe(oldHunkCount + 1);
|
||||||
|
expect(newFile!.hunks![0]).toBe(preceedingHunk);
|
||||||
|
expect(newFile!.hunks![2]).toBe(expandedHunk);
|
||||||
|
|
||||||
|
expect(newFile!.hunks![1].changes.length).toBe(5);
|
||||||
expect(newFile!.hunks![1].changes[0].content).toBe("new line 9");
|
expect(newFile!.hunks![1].changes[0].content).toBe("new line 9");
|
||||||
expect(newFile!.hunks![1].changes[0].oldLineNumber).toBe(9);
|
expect(newFile!.hunks![1].changes[0].oldLineNumber).toBe(9);
|
||||||
expect(newFile!.hunks![1].changes[0].newLineNumber).toBe(9);
|
expect(newFile!.hunks![1].changes[0].newLineNumber).toBe(9);
|
||||||
@@ -309,11 +323,9 @@ describe("with hunks the diff expander", () => {
|
|||||||
expect(newFile!.hunks![1].changes[4].content).toBe("new line 13");
|
expect(newFile!.hunks![1].changes[4].content).toBe("new line 13");
|
||||||
expect(newFile!.hunks![1].changes[4].oldLineNumber).toBe(13);
|
expect(newFile!.hunks![1].changes[4].oldLineNumber).toBe(13);
|
||||||
expect(newFile!.hunks![1].changes[4].newLineNumber).toBe(13);
|
expect(newFile!.hunks![1].changes[4].newLineNumber).toBe(13);
|
||||||
expect(newFile!.hunks![1].changes[5].content).toBe("line");
|
|
||||||
expect(newFile!.hunks![1].changes[5].oldLineNumber).toBe(14);
|
|
||||||
expect(newFile!.hunks![1].changes[5].newLineNumber).toBe(14);
|
|
||||||
});
|
});
|
||||||
it("should set fully expanded to true if expanded completely", async () => {
|
it("should set fully expanded to true if expanded completely", async () => {
|
||||||
|
const oldHunkCount = diffExpander.hunkCount();
|
||||||
fetchMock.get(
|
fetchMock.get(
|
||||||
"http://localhost:8081/scm/api/v2/content/abc/CommitMessage.js?start=40&end=50",
|
"http://localhost:8081/scm/api/v2/content/abc/CommitMessage.js?start=40&end=50",
|
||||||
"new line 40\nnew line 41\nnew line 42"
|
"new line 40\nnew line 41\nnew line 42"
|
||||||
@@ -323,7 +335,8 @@ describe("with hunks the diff expander", () => {
|
|||||||
newFile = file;
|
newFile = file;
|
||||||
});
|
});
|
||||||
await fetchMock.flush(true);
|
await fetchMock.flush(true);
|
||||||
expect(newFile!.hunks![3].fullyExpanded).toBe(true);
|
expect(newFile!.hunks!.length).toBe(oldHunkCount + 1);
|
||||||
|
expect(newFile!.hunks![4].fullyExpanded).toBe(true);
|
||||||
});
|
});
|
||||||
it("should set end to -1 if requested to expand to the end", async () => {
|
it("should set end to -1 if requested to expand to the end", async () => {
|
||||||
fetchMock.get(
|
fetchMock.get(
|
||||||
@@ -335,7 +348,7 @@ describe("with hunks the diff expander", () => {
|
|||||||
newFile = file;
|
newFile = file;
|
||||||
});
|
});
|
||||||
await fetchMock.flush(true);
|
await fetchMock.flush(true);
|
||||||
expect(newFile!.hunks![3].fullyExpanded).toBe(true);
|
expect(newFile!.hunks![4].fullyExpanded).toBe(true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -110,8 +110,10 @@ class DiffExpander {
|
|||||||
lines.pop();
|
lines.pop();
|
||||||
}
|
}
|
||||||
const newChanges: Change[] = [];
|
const newChanges: Change[] = [];
|
||||||
let oldLineNumber = hunk!.changes![0]!.oldLineNumber! - lines.length;
|
const minOldLineNumberOfNewHunk = hunk.oldStart! - lines.length;
|
||||||
let newLineNumber = hunk!.changes![0]!.newLineNumber! - lines.length;
|
const minNewLineNumberOfNewHunk = hunk.newStart! - lines.length;
|
||||||
|
let oldLineNumber = minOldLineNumberOfNewHunk;
|
||||||
|
let newLineNumber = minNewLineNumberOfNewHunk;
|
||||||
|
|
||||||
lines.forEach(line => {
|
lines.forEach(line => {
|
||||||
newChanges.push({
|
newChanges.push({
|
||||||
@@ -124,23 +126,21 @@ class DiffExpander {
|
|||||||
oldLineNumber += 1;
|
oldLineNumber += 1;
|
||||||
newLineNumber += 1;
|
newLineNumber += 1;
|
||||||
});
|
});
|
||||||
hunk.changes.forEach(change => newChanges.push(change));
|
|
||||||
|
|
||||||
const newHunk = {
|
const newHunk: Hunk = {
|
||||||
...hunk,
|
content: "",
|
||||||
oldStart: hunk.oldStart! - lines.length,
|
oldStart: minOldLineNumberOfNewHunk,
|
||||||
newStart: hunk.newStart! - lines.length,
|
newStart: minNewLineNumberOfNewHunk,
|
||||||
oldLines: hunk.oldLines! + lines.length,
|
oldLines: lines.length,
|
||||||
newLines: hunk.newLines! + lines.length,
|
newLines: lines.length,
|
||||||
changes: newChanges
|
changes: newChanges
|
||||||
};
|
};
|
||||||
const newHunks: Hunk[] = [];
|
const newHunks: Hunk[] = [];
|
||||||
this.file.hunks!.forEach((oldHunk: Hunk, i: number) => {
|
this.file.hunks!.forEach((oldHunk: Hunk, i: number) => {
|
||||||
if (i === n) {
|
if (i === n) {
|
||||||
newHunks.push(newHunk);
|
newHunks.push(newHunk);
|
||||||
} else {
|
|
||||||
newHunks.push(oldHunk);
|
|
||||||
}
|
}
|
||||||
|
newHunks.push(oldHunk);
|
||||||
});
|
});
|
||||||
const newFile = { ...this.file, hunks: newHunks };
|
const newFile = { ...this.file, hunks: newHunks };
|
||||||
callback(newFile);
|
callback(newFile);
|
||||||
@@ -151,9 +151,13 @@ class DiffExpander {
|
|||||||
if (lines[lines.length - 1] === "") {
|
if (lines[lines.length - 1] === "") {
|
||||||
lines.pop();
|
lines.pop();
|
||||||
}
|
}
|
||||||
const newChanges = [...hunk.changes];
|
const newChanges: Change[] = [];
|
||||||
let oldLineNumber: number = this.getMaxOldLineNumber(newChanges);
|
|
||||||
let newLineNumber: number = this.getMaxNewLineNumber(newChanges);
|
const maxOldLineNumberFromPrecedingHunk = this.getMaxOldLineNumber(hunk.changes);
|
||||||
|
const maxNewLineNumberFromPrecedingHunk = this.getMaxNewLineNumber(hunk.changes);
|
||||||
|
|
||||||
|
let oldLineNumber: number = maxOldLineNumberFromPrecedingHunk;
|
||||||
|
let newLineNumber: number = maxNewLineNumberFromPrecedingHunk;
|
||||||
|
|
||||||
lines.forEach(line => {
|
lines.forEach(line => {
|
||||||
oldLineNumber += 1;
|
oldLineNumber += 1;
|
||||||
@@ -167,19 +171,21 @@ class DiffExpander {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const newHunk = {
|
const newHunk: Hunk = {
|
||||||
...hunk,
|
|
||||||
oldLines: hunk.oldLines! + lines.length,
|
|
||||||
newLines: hunk.newLines! + lines.length,
|
|
||||||
changes: newChanges,
|
changes: newChanges,
|
||||||
|
content: "",
|
||||||
|
oldStart: maxOldLineNumberFromPrecedingHunk + 1,
|
||||||
|
newStart: maxNewLineNumberFromPrecedingHunk + 1,
|
||||||
|
oldLines: lines.length,
|
||||||
|
newLines: lines.length,
|
||||||
fullyExpanded: requestedLines < 0 || lines.length < requestedLines
|
fullyExpanded: requestedLines < 0 || lines.length < requestedLines
|
||||||
};
|
};
|
||||||
|
|
||||||
const newHunks: Hunk[] = [];
|
const newHunks: Hunk[] = [];
|
||||||
this.file.hunks!.forEach((oldHunk: Hunk, i: number) => {
|
this.file.hunks!.forEach((oldHunk: Hunk, i: number) => {
|
||||||
|
newHunks.push(oldHunk);
|
||||||
if (i === n) {
|
if (i === n) {
|
||||||
newHunks.push(newHunk);
|
newHunks.push(newHunk);
|
||||||
} else {
|
|
||||||
newHunks.push(oldHunk);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const newFile = { ...this.file, hunks: newHunks };
|
const newFile = { ...this.file, hunks: newHunks };
|
||||||
|
|||||||
Reference in New Issue
Block a user