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();