11import type { ConfigurationChangeEvent } from 'vscode';
22import { Disposable, workspace } from 'vscode';
33import type { CreatePullRequestActionContext } from '../../api/gitlens';
4+ import type { EnrichedAutolink } from '../../autolinks';
45import { getAvatarUriFromGravatarEmail } from '../../avatars';
56import type { OpenPullRequestOnRemoteCommandArgs } from '../../commands/openPullRequestOnRemote';
67import { GlyphChars, urls } from '../../constants';
@@ -915,6 +916,7 @@ async function getOverviewBranches(
915916
916917 let repoStatusPromise: Promise<GitStatus | undefined> | undefined;
917918 const prPromises = new Map<string, Promise<PullRequest | undefined>>();
919+ const autolinkPromises = new Map<string, Promise<Map<string, EnrichedAutolink> | undefined>>();
918920 const statusPromises = new Map<string, Promise<GitStatus | undefined>>();
919921 const contributorPromises = new Map<string, Promise<BranchContributorOverview | undefined>>();
920922
@@ -929,6 +931,7 @@ async function getOverviewBranches(
929931 if (branch.current || wt?.opened) {
930932 const forceOptions = options?.forceActive ? { force: true } : undefined;
931933 prPromises.set(branch.id, branch.getAssociatedPullRequest({ avatarSize: 16 }));
934+ autolinkPromises.set(branch.id, branch.getEnrichedAutolinks());
932935 if (wt != null) {
933936 statusPromises.set(branch.id, wt.getStatus(forceOptions));
934937 } else {
@@ -955,6 +958,7 @@ async function getOverviewBranches(
955958
956959 if (timestamp != null && timestamp > recentThreshold) {
957960 prPromises.set(branch.id, branch.getAssociatedPullRequest());
961+ autolinkPromises.set(branch.id, branch.getEnrichedAutolinks());
958962 if (wt != null) {
959963 statusPromises.set(branch.id, wt.getStatus());
960964 }
@@ -982,6 +986,7 @@ async function getOverviewBranches(
982986 orderBy: 'date:asc',
983987 });
984988 for (const branch of branches) {
989+ autolinkPromises.set(branch.id, branch.getEnrichedAutolinks());
985990 if (overviewBranches.stale.length > 9) break;
986991
987992 if (
@@ -1025,7 +1030,7 @@ async function getOverviewBranches(
10251030 }
10261031 }
10271032
1028- await enrichOverviewBranches(overviewBranches, prPromises, statusPromises, contributorPromises);
1033+ await enrichOverviewBranches(overviewBranches, prPromises, autolinkPromises, statusPromises, contributorPromises);
10291034
10301035 return overviewBranches;
10311036}
@@ -1034,11 +1039,17 @@ async function getOverviewBranches(
10341039async function enrichOverviewBranches(
10351040 overviewBranches: GetOverviewBranches,
10361041 prPromises: Map<string, Promise<PullRequest | undefined>>,
1042+ autolinkPromises: Map<string, Promise<Map<string, EnrichedAutolink> | undefined>>,
10371043 statusPromises: Map<string, Promise<GitStatus | undefined>>,
10381044 contributorPromises: Map<string, Promise<BranchContributorOverview | undefined>>,
10391045) {
1040- const [prResults, statusResults, contributorResults] = await Promise.allSettled([
1046+ const [prResults, autolinkResults, statusResults, contributorResults] = await Promise.allSettled([
10411047 Promise.allSettled(map(prPromises, ([id, pr]) => pr.then<[string, PullRequest | undefined]>(pr => [id, pr]))),
1048+ Promise.allSettled(
1049+ map(autolinkPromises, ([id, autolinks]) =>
1050+ autolinks.then<[string, Map<string, EnrichedAutolink> | undefined]>(a => [id, a]),
1051+ ),
1052+ ),
10421053 Promise.allSettled(
10431054 map(statusPromises, ([id, status]) => status.then<[string, GitStatus | undefined]>(status => [id, status])),
10441055 ),
@@ -1065,6 +1076,40 @@ async function enrichOverviewBranches(
10651076 ]),
10661077 );
10671078
1079+ const enrichedAutolinkPromises = new Map(
1080+ getSettledValue(autolinkResults)
1081+ ?.filter(r => r.status === 'fulfilled')
1082+ .map(({ value: [autolinkId, autolinks] }) => [
1083+ autolinkId,
1084+ autolinks
1085+ ? [...autolinks.values()]
1086+ .filter(autolink => autolink?.[0] != null)
1087+ .map(async autolink => {
1088+ const issue = await autolink[0]!;
1089+ return {
1090+ id: autolink[1].id,
1091+ title: issue?.title ?? autolink[1].title ?? `Issue #${autolink[1].id}`,
1092+ state: issue?.state === 'closed' ? 'closed' : 'opened',
1093+ url: autolink[1].url,
1094+ hasIssue: issue != null,
1095+ };
1096+ })
1097+ : undefined,
1098+ ]),
1099+ );
1100+
1101+ const autolinks = new Map<string, GetOverviewBranch['autolinks']>();
1102+
1103+ for (const [id, enrichedAutolinkPromise] of enrichedAutolinkPromises.entries()) {
1104+ if (enrichedAutolinkPromise == null) continue;
1105+ const enrichedAutolinks = await Promise.all(enrichedAutolinkPromise);
1106+ if (!enrichedAutolinks.length) continue;
1107+ autolinks.set(
1108+ id,
1109+ enrichedAutolinks.filter(a => a.hasIssue),
1110+ );
1111+ }
1112+
10681113 const statuses = new Map(
10691114 getSettledValue(statusResults)
10701115 ?.filter(r => r.status === 'fulfilled')
@@ -1081,6 +1126,9 @@ async function enrichOverviewBranches(
10811126 const pr = prs.get(branch.id);
10821127 branch.pr = pr;
10831128
1129+ const autolinksForBranch = autolinks.get(branch.id);
1130+ branch.autolinks = autolinksForBranch;
1131+
10841132 const status = statuses.get(branch.id);
10851133 if (status != null) {
10861134 branch.workingTreeState = status.getDiffStatus();
0 commit comments