From e08f2f22600d0b3f24568fb527c0947e91885cb1 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 2 Jul 2020 11:30:26 +0200 Subject: [PATCH] ensure both changeset short link matchers are using the same regex --- scm-ui/ui-components/src/index.ts | 1 + .../changesets/ChangesetShortLink.tsx | 35 ++++++++++--------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/scm-ui/ui-components/src/index.ts b/scm-ui/ui-components/src/index.ts index 9a8049a7bd..8fb3115c65 100644 --- a/scm-ui/ui-components/src/index.ts +++ b/scm-ui/ui-components/src/index.ts @@ -79,6 +79,7 @@ export { default as CardColumn } from "./CardColumn"; export { default as CardColumnSmall } from "./CardColumnSmall"; export { default as CommaSeparatedList } from "./CommaSeparatedList"; export { default as SplitAndReplace, Replacement } from "./SplitAndReplace"; +export { regExpPattern as changesetShortLinkRegex } from "./remarkChangesetShortLinkParser"; export { default as comparators } from "./comparators"; diff --git a/scm-ui/ui-webapp/src/repos/components/changesets/ChangesetShortLink.tsx b/scm-ui/ui-webapp/src/repos/components/changesets/ChangesetShortLink.tsx index e4f03a351f..6177dee5a9 100644 --- a/scm-ui/ui-webapp/src/repos/components/changesets/ChangesetShortLink.tsx +++ b/scm-ui/ui-webapp/src/repos/components/changesets/ChangesetShortLink.tsx @@ -25,26 +25,27 @@ import React from "react"; import { Link } from "react-router-dom"; import { Changeset } from "@scm-manager/ui-types"; -import { Replacement } from "@scm-manager/ui-components"; +import { Replacement, changesetShortLinkRegex } from "@scm-manager/ui-components"; const ChangesetShortLink: (changeset: Changeset, value: string) => Replacement[] = (changeset, value) => { - const linkRegExp = "([A-Za-z0-9\.\-_]+)\/([A-Za-z0-9\.\-_]+)@([a-f0-9]+)"; - const matches = value.match(new RegExp(linkRegExp, "g")); - if (!matches) { - return []; + const regex = new RegExp(changesetShortLinkRegex, "g") + + const replacements: Replacement[] = []; + + let m = regex.exec(value); + while (m) { + const namespace = m[1]; + const name = m[2]; + const revision = m[3]; + const link = `/repo/${namespace}/${name}/code/changeset/${revision}`; + replacements.push({ + textToReplace: m[0], + replacement: {m[0]} + }); + m = regex.exec(value); } - return matches.map(value => { - const groups = value.match(new RegExp(linkRegExp)); - const namespace = groups[1]; - const name = groups[2]; - const revision = groups[3]; - const link = `/repo/${namespace}/${name}/changeset/${revision}`; - const replacement: Replacement = { - textToReplace: value, - replacement: {value} - }; - return replacement; - }); + + return replacements; }; export default ChangesetShortLink;