diff --git a/httpd-client/lib/project/commit.ts b/httpd-client/lib/project/commit.ts index 5fa4f1423..0f46f908f 100644 --- a/httpd-client/lib/project/commit.ts +++ b/httpd-client/lib/project/commit.ts @@ -148,13 +148,7 @@ const diffCopiedChangesetSchema = object({ oldPath: string(), }); -const diffMovedChangesetSchema = diffCopiedChangesetSchema.merge( - object({ - current: diffFileSchema, - }), -); - -const diffMovedWithModificationsChangesetSchema = +const diffCopiedWithModificationsChangesetSchema = diffCopiedChangesetSchema.merge( object({ old: diffFileSchema, @@ -163,6 +157,22 @@ const diffMovedWithModificationsChangesetSchema = }), ); +const diffMovedChangesetSchema = object({ + newPath: string(), + oldPath: string(), + current: diffFileSchema, +}); + +const diffMovedWithModificationsChangesetSchema = diffMovedChangesetSchema + .omit({ current: true }) + .merge( + object({ + old: diffFileSchema, + new: diffFileSchema, + diff: diffContentSchema, + }), + ); + type Diff = z.infer; const diffSchema = object({ @@ -175,7 +185,12 @@ const diffSchema = object({ diffMovedWithModificationsChangesetSchema, ]), ), - copied: array(diffCopiedChangesetSchema), + copied: array( + union([ + diffCopiedWithModificationsChangesetSchema, + diffCopiedChangesetSchema, + ]), + ), stats: object({ filesChanged: number(), insertions: number(), diff --git a/src/views/projects/Changeset.svelte b/src/views/projects/Changeset.svelte index a586179df..1d7d8f096 100644 --- a/src/views/projects/Changeset.svelte +++ b/src/views/projects/Changeset.svelte @@ -180,12 +180,30 @@ {/if} {/each} {#each diff.copied as file} - + {#if "diff" in file} +
+ +
+ {:else} + + {/if} {/each}