blob: 17ad44bdb714e176286967eb3d84a406d2911856 [file] [log] [blame]
/**
* @license
* Copyright 2022 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import {ServerInfo, WebLinkInfo} from '../api/rest-api';
// visible for testing
export function getCodeBrowserWeblink(weblinks: WebLinkInfo[]) {
// is an ordered allowed list of web link types that provide direct
// links to the commit in the url property.
const codeBrowserLinks = ['gitiles', 'browse', 'gitweb', 'code search'];
for (let i = 0; i < codeBrowserLinks.length; i++) {
const weblink = weblinks.find(
weblink => weblink.name?.toLowerCase() === codeBrowserLinks[i]
);
if (weblink) return weblink;
}
return undefined;
}
export function getBrowseCommitWeblink(
weblinks?: WebLinkInfo[],
config?: ServerInfo
): WebLinkInfo | undefined {
if (!weblinks) return undefined;
// Use primary weblink if configured and exists.
const primaryWeblinkName = config?.gerrit?.primary_weblink_name;
if (primaryWeblinkName) {
const weblink = weblinks.find(link => link.name === primaryWeblinkName);
if (weblink) return weblink;
}
return getCodeBrowserWeblink(weblinks);
}
export function getChangeWeblinks(
weblinks?: WebLinkInfo[],
config?: ServerInfo
): WebLinkInfo[] {
if (!weblinks?.length) return [];
const commitWeblink = getBrowseCommitWeblink(weblinks, config);
return weblinks.filter(
weblink => !commitWeblink?.name || weblink.name !== commitWeblink.name
);
}