diff --git a/src/components/DiffStatBadge.svelte b/src/components/DiffStatBadge.svelte index 4c949932a..9d1cb6c0a 100644 --- a/src/components/DiffStatBadge.svelte +++ b/src/components/DiffStatBadge.svelte @@ -14,6 +14,12 @@ border-radius: var(--border-radius-round); overflow: hidden; } + .badge:hover .positive { + background-color: var(--color-fill-diff-green); + } + .badge:hover .negative { + background-color: var(--color-fill-diff-red); + } .positive { display: flex; padding: 0 6px; diff --git a/src/views/projects/Cob/Revision.svelte b/src/views/projects/Cob/Revision.svelte index d792d5807..6e9755f84 100644 --- a/src/views/projects/Cob/Revision.svelte +++ b/src/views/projects/Cob/Revision.svelte @@ -40,8 +40,6 @@ export let rawPath: (commit?: string) => string; export let patchId: string; export let patchState: PatchState; - export let projectHead: string; - export let projectDefaultBranch: string; export let projectId: string; export let revisionBase: string; export let revisionId: string; @@ -52,6 +50,7 @@ export let revisionAuthor: { id: string; alias?: string | undefined }; export let revisionDescription: string; export let timelines: Timeline[]; + export let previousRevBase: string | undefined = undefined; export let previousRevId: string | undefined = undefined; export let previousRevOid: string | undefined = undefined; export let first: boolean; @@ -126,14 +125,15 @@ let loading: boolean = false; let revisionState: State = "read"; + $: fromCommit = + previousRevBase !== revisionBase + ? revisionBase + : previousRevBase ?? revisionBase; + onMount(async () => { try { loading = true; - response = await api.project.getDiff( - projectId, - revisionBase, - revisionOid, - ); + response = await api.project.getDiff(projectId, fromCommit, revisionOid); } catch (err: any) { error = err; } finally { @@ -292,48 +292,19 @@ {/if} {#if response?.diff.stats} - {@const { insertions, deletions } = response.diff.stats} - - {/if} - {#if previousRevOid} - - - - - {:else} - - - - + {@const { insertions, deletions } = response.diff.stats} + {/if} + ? [revisionBase, previousRevOid] + : [revisionBase]}> + {@const baseMismatch = previousRevBase !== revisionBase} - {#if item === projectHead} + {#if item === revisionBase} - Compare to {projectDefaultBranch}: + Compare to base: - {utils.formatObjectId(projectHead)} + {utils.formatObjectId(revisionBase)} {:else if previousRevId} - + Compare to previous revision: {#if patchId === revisionId} - opened this patch + opened this patch on base + + {utils.formatObjectId(revisionBase)} + {:else} updated to {utils.formatObjectId(revisionId)} + {#if previousRevBase && previousRevBase !== revisionBase} + with base + + {utils.formatObjectId(revisionBase)} + + {/if} {/if} {utils.formatTimestamp(revisionTimestamp)} @@ -464,7 +455,7 @@ {:else if revisionDescription && !first}
{/if} @@ -528,7 +519,7 @@ {#if index === patch.revisions.length - 1} {#if $experimental && session && view.name === "activity"} diff --git a/src/views/projects/Patch/PatchTeaser.svelte b/src/views/projects/Patch/PatchTeaser.svelte index 8af47e89a..9f8b6ffe4 100644 --- a/src/views/projects/Patch/PatchTeaser.svelte +++ b/src/views/projects/Patch/PatchTeaser.svelte @@ -7,6 +7,7 @@ absoluteTimestamp, formatObjectId, formatTimestamp, + formatCommit, } from "@app/lib/utils"; import Badge from "@app/components/Badge.svelte"; @@ -182,9 +183,25 @@ {#await diffPromise} {:then { diff }} - + + + {/await} diff --git a/tests/e2e/project/patch.spec.ts b/tests/e2e/project/patch.spec.ts index e7096699e..3637893f9 100644 --- a/tests/e2e/project/patch.spec.ts +++ b/tests/e2e/project/patch.spec.ts @@ -69,7 +69,7 @@ test("navigate through revision diffs", async ({ page }) => { .first() .click(); await secondRevision - .getByRole("link", { name: "Compare to main: 38c225e" }) + .getByRole("link", { name: "Compare to base: 38c225e" }) .click(); await expect( page.getByRole("button", { name: "Compare 38c225..9e4fea" }), @@ -95,25 +95,10 @@ test("navigate through revision diffs", async ({ page }) => { /patches\/[a-f0-9]{40}\?diff=88b7fd90389c1a629f91ed7bf838d4b947426622\.\.9e4feab1b2123dfa5f22bd0e4656060ec9296638$/, ); await page.goBack(); - - await secondRevision - .getByRole("link", { name: "Compare 88b7fd9..9e4feab" }) - .getByRole("button") - .click(); - await expect( - page.getByRole("link", { name: "Compare 88b7fd..9e4fea" }), - ).toBeVisible(); - await page.goBack(); } - // First revision + // First revision and DiffStatBadge shortcut. { - await firstRevision - .getByRole("button", { name: "toggle-context-menu" }) - .first() - .click(); - await firstRevision - .getByRole("link", { name: "Compare to main: 38c225e" }) - .click(); + await firstRevision.getByTitle("Compare 38c225e..88b7fd9").click(); await expect( page.getByRole("button", { name: "Compare 38c225..88b7fd" }), ).toBeVisible();