From f971d777f2d0385f35b0cdb8ca423b76584a5501 Mon Sep 17 00:00:00 2001 From: Sebastian Martinez Date: Thu, 22 Jun 2023 16:01:20 +0200 Subject: [PATCH] Add missing moved and copied file operations to Changeset Signed-off-by: Sebastian Martinez --- httpd-client/lib/project/commit.ts | 2 +- .../projects/SourceBrowser/Changeset.svelte | 27 ++++++-- .../projects/SourceBrowser/FileDiff.svelte | 6 +- .../SourceBrowser/FileLocationChange.svelte | 63 ++++++++++++++++++ tests/e2e/project/commit.spec.ts | 11 +++ tests/fixtures/repos/source-browsing.tar.bz2 | Bin 16804 -> 12239 bytes tests/support/fixtures.ts | 3 + 7 files changed, 104 insertions(+), 8 deletions(-) create mode 100644 src/views/projects/SourceBrowser/FileLocationChange.svelte diff --git a/httpd-client/lib/project/commit.ts b/httpd-client/lib/project/commit.ts index 13f5c7bfa..14bd1b774 100644 --- a/httpd-client/lib/project/commit.ts +++ b/httpd-client/lib/project/commit.ts @@ -106,7 +106,7 @@ const diffAddedDeletedModifiedChangesetSchema = object({ }), }) satisfies ZodSchema; -interface DiffCopiedMovedChangeset { +export interface DiffCopiedMovedChangeset { newPath: string; oldPath: string; } diff --git a/src/views/projects/SourceBrowser/Changeset.svelte b/src/views/projects/SourceBrowser/Changeset.svelte index a4ef8cd14..01e043c5a 100644 --- a/src/views/projects/SourceBrowser/Changeset.svelte +++ b/src/views/projects/SourceBrowser/Changeset.svelte @@ -4,11 +4,18 @@ import { pluralize } from "@app/lib/pluralize"; import FileDiff from "@app/views/projects/SourceBrowser/FileDiff.svelte"; + import FileLocationChange from "@app/views/projects/SourceBrowser/FileLocationChange.svelte"; export let diff: Diff; export let revision: string; - const diffDescription = ({ modified, added, deleted }: Diff): string => { + const diffDescription = ({ + modified, + added, + deleted, + moved, + copied, + }: Diff): string => { const s = []; if (modified.length) { @@ -22,6 +29,12 @@ if (deleted.length) { s.push(`${deleted.length} ${pluralize("file", deleted.length)} deleted`); } + if (copied.length) { + s.push(`${copied.length} ${pluralize("file", copied.length)} copied`); + } + if (moved.length) { + s.push(`${moved.length} ${pluralize("file", moved.length)} moved`); + } return s.join(", "); }; @@ -54,12 +67,18 @@
{#each diff.added as file} - + {/each} {#each diff.deleted as file} - + {/each} {#each diff.modified as file} - + + {/each} + {#each diff.moved as file} + + {/each} + {#each diff.copied as file} + {/each}
diff --git a/src/views/projects/SourceBrowser/FileDiff.svelte b/src/views/projects/SourceBrowser/FileDiff.svelte index 0bf9f103a..cefbcd7be 100644 --- a/src/views/projects/SourceBrowser/FileDiff.svelte +++ b/src/views/projects/SourceBrowser/FileDiff.svelte @@ -10,7 +10,7 @@ export let file: DiffAddedDeletedModifiedChangeset; export let revision: string; - export let mode: string | null = null; + export let headerBadgeCaption: "added" | "deleted" | undefined = undefined; let collapsed = false; @@ -163,9 +163,9 @@

{file.path}

- {#if mode === "added"} + {#if headerBadgeCaption === "added"} added - {:else if mode === "deleted"} + {:else if headerBadgeCaption === "deleted"} deleted {/if}
diff --git a/src/views/projects/SourceBrowser/FileLocationChange.svelte b/src/views/projects/SourceBrowser/FileLocationChange.svelte new file mode 100644 index 000000000..849404035 --- /dev/null +++ b/src/views/projects/SourceBrowser/FileLocationChange.svelte @@ -0,0 +1,63 @@ + + + + +
+
+
+

{file.oldPath} → {file.newPath}

+ {#if mode === "moved"} + moved + {:else if mode === "copied"} + copied + {/if} +
+
+ + + +
+
+
diff --git a/tests/e2e/project/commit.spec.ts b/tests/e2e/project/commit.spec.ts index 5049e367f..c769559bc 100644 --- a/tests/e2e/project/commit.spec.ts +++ b/tests/e2e/project/commit.spec.ts @@ -81,6 +81,17 @@ test("deleted file", async ({ page }) => { await expect(page.locator("text=.hidden deleted")).toBeVisible(); }); +test("moved file", async ({ page }) => { + await page.goto( + `${sourceBrowsingUrl}/remotes/${aliceRemote}/commits/835d9a52066c46d86cdee88f2863e9a804c7fa50/commits/`, + ); + await expect( + page.locator("header").filter({ hasText: "moves/111.txt → moves/222.txt" }), + ).toBeVisible(); +}); + +// TODO: Add copy operation detection spec. + test("navigation to source tree at specific revision", async ({ page }) => { await page.goto( `${sourceBrowsingUrl}/commits/0801aceeab500033f8d608778218657bd626ef73`, diff --git a/tests/fixtures/repos/source-browsing.tar.bz2 b/tests/fixtures/repos/source-browsing.tar.bz2 index 2ba24452c93270259984ad8e3b19d8ec7c9def67..8d3f565bb304ea83678120648683bfb2725ff702 100644 GIT binary patch literal 12239 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 literal 16804 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 XjS>C9OwZ?Hzxcb7DZ+$@qbumBg;U-! diff --git a/tests/support/fixtures.ts b/tests/support/fixtures.ts index 6c112175a..9f55b4186 100644 --- a/tests/support/fixtures.ts +++ b/tests/support/fixtures.ts @@ -251,6 +251,9 @@ export async function createSourceBrowsingFixture( await alice.git(["clone", sourceBrowsingDir], { cwd: alice.checkoutPath }); await alice.git(["checkout", "feature/branch"], { cwd: aliceProjectPath }); + await alice.git(["checkout", "feature/move-copy-files"], { + cwd: aliceProjectPath, + }); await alice.git(["checkout", "orphaned-branch"], { cwd: aliceProjectPath }); await alice.git(["checkout", "main"], { cwd: aliceProjectPath }); await alice.rad(