diff --git a/gradle/changelog/fix_diff_for_hg_and_svn.yaml b/gradle/changelog/fix_diff_for_hg_and_svn.yaml new file mode 100644 index 0000000000..dfe71304df --- /dev/null +++ b/gradle/changelog/fix_diff_for_hg_and_svn.yaml @@ -0,0 +1,2 @@ +- type: fixed + description: Diff for mercurial and subversion ([#1588](https://github.com/scm-manager/scm-manager/issues/1588) and [#1587](https://github.com/scm-manager/scm-manager/issues/1587)) diff --git a/scm-ui/ui-api/src/diff.test.ts b/scm-ui/ui-api/src/diff.test.ts index ecdc316eb3..fb81058441 100644 --- a/scm-ui/ui-api/src/diff.test.ts +++ b/scm-ui/ui-api/src/diff.test.ts @@ -222,4 +222,16 @@ describe("Test diff", () => { expect(result.current.data).toEqual({ ...partialDiff2, files: [partialDiff1.files[0], partialDiff2.files[0]] }); }); + + it("should append query parameters to url which has already query params", async () => { + fetchMock.getOnce("/api/v2/diff?format=GIT&limit=25", { + body: simpleDiff, + headers: { "Content-Type": "application/vnd.scmm-diffparsed+json;v=2" } + }); + const { result, waitFor } = renderHook(() => useDiff("/diff?format=GIT", { limit: 25 }), { + wrapper: createWrapper() + }); + await waitFor(() => !!result.current.data); + expect(result.current.data).toEqual(simpleDiff); + }); }); diff --git a/scm-ui/ui-api/src/diff.ts b/scm-ui/ui-api/src/diff.ts index 3d3b9b2de6..0e6b3c8f00 100644 --- a/scm-ui/ui-api/src/diff.ts +++ b/scm-ui/ui-api/src/diff.ts @@ -35,7 +35,8 @@ type UseDiffOptions = { export const useDiff = (link: string, options: UseDiffOptions = {}) => { let initialLink = link; if (options.limit) { - initialLink = `${initialLink}?limit=${options.limit}`; + const separator = initialLink.includes("?") ? "&" : "?"; + initialLink = `${initialLink}${separator}limit=${options.limit}`; } const { isLoading, error, data, isFetchingNextPage, fetchNextPage } = useInfiniteQuery( ["link", link], @@ -48,9 +49,9 @@ export const useDiff = (link: string, options: UseDiffOptions = {}) => { return response .text() .then(parser.parse) - .then(data => { + .then(parsedGit => { return { - files: data, + files: parsedGit, partial: false, _links: {} };