Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 21 additions & 6 deletions addons/isl/src/Commit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import type {JSX, ReactNode} from 'react';
import type {ContextMenuItem} from 'shared/ContextMenu';
import type {UICodeReviewProvider} from './codeReview/UICodeReviewProvider';
import type {DagCommitInfo} from './dag/dag';
import type {CommitInfo, MergeConflicts, SuccessorInfo, WorktreeEntry} from './types';
import type {CommitInfo, DiffId, MergeConflicts, SuccessorInfo, WorktreeEntry} from './types';
import {succeedableRevset, WarningCheckResult} from './types';

import {Button} from 'isl-components/Button';
Expand Down Expand Up @@ -48,6 +48,7 @@ import {
allDiffSummaries,
branchingDiffInfos,
codeReviewProvider,
diffIdsByBranchName,
diffSummary,
latestCommitTitles,
} from './codeReview/CodeReviewInfo';
Expand Down Expand Up @@ -762,7 +763,9 @@ export const Commit = memo(
</span>
)}
<UnsavedEditedMessageIndicator commit={commit} />
{!isPublic && <BranchingPrs bookmarks={commit.remoteBookmarks} />}
{!isPublic && (
<BranchingPrs bookmarks={commit.remoteBookmarks} diffId={commit.diffId} />
)}
<AllBookmarksTruncated
local={commit.bookmarks}
remote={
Expand Down Expand Up @@ -813,24 +816,36 @@ export const Commit = memo(
},
);

function BranchingPrs({bookmarks}: {bookmarks: ReadonlyArray<string>}) {
function BranchingPrs({bookmarks, diffId}: {bookmarks: ReadonlyArray<string>; diffId?: DiffId}) {
const provider = useAtomValue(codeReviewProvider);
if (provider == null || !provider.supportBranchingPrs) {
// If we don't have a provider, just render them as bookmarks so they don't get hidden.
return <Bookmarks bookmarks={bookmarks} kind="remote" />;
}
return bookmarks.map(bookmark => (
<BranchingPr key={bookmark} provider={provider} bookmark={bookmark} />
<BranchingPr key={bookmark} provider={provider} bookmark={bookmark} diffId={diffId} />
));
}

function BranchingPr({bookmark, provider}: {bookmark: string; provider: UICodeReviewProvider}) {
function BranchingPr({
bookmark,
provider,
diffId,
}: {
bookmark: string;
provider: UICodeReviewProvider;
diffId?: DiffId;
}) {
const branchName = nullthrows(provider.branchNameForRemoteBookmark)(bookmark);
const info = useAtomValue(branchingDiffInfos(branchName));
// `sl pr submit` pushes each commit to its PR's head branch, so that bookmark resolves to the
// commit's own PR, whose badge `DiffInfo` already shows.
const branchDiffId = useAtomValue(diffIdsByBranchName).get(branchName);
const isOwnPr = diffId != null && branchDiffId === diffId;
return (
<>
<Bookmark kind="remote">{bookmark}</Bookmark>
{info.value == null ? null : (
{info.value == null || isOwnPr ? null : (
<DiffBadge diff={info.value} provider={provider} url={info.value.url} />
)}
</>
Expand Down
66 changes: 66 additions & 0 deletions addons/isl/src/__tests__/GitHubPRBadge.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,72 @@ describe('GitHubPRBadge', () => {
});
});

describe('commit on its own PR branch', () => {
beforeEach(() => {
act(() => {
simulateCommits({
value: [
COMMIT('1', 'some public base', '0', {phase: 'public'}),
COMMIT('a', 'Commit A', '1', {
isDot: true,
diffId: '10',
remoteBookmarks: ['origin/pr10', 'origin/feature'],
}),
],
});
simulateMessageFromServer({
type: 'fetchedDiffSummaries',
summaries: {
value: new Map<DiffId, DiffSummary>([
[
'10',
{
number: '10',
state: PullRequestState.Open,
title: 'PR A',
type: 'github',
url: 'https://github.com/myusername/testrepo/pull/10',
anyUnresolvedComments: false,
commentCount: 0,
commitMessage: 'PR A',
base: '1',
head: 'a',
branchName: 'pr10',
},
],
[
'12',
{
number: '12',
state: PullRequestState.Closed,
title: 'Feature PR',
type: 'github',
url: 'https://github.com/myusername/testrepo/pull/12',
anyUnresolvedComments: false,
commentCount: 0,
commitMessage: 'Feature PR',
base: '1',
head: 'a',
branchName: 'feature',
},
],
]),
},
});
});
});

it('renders its own PR badge once', () => {
const commitA = screen.getByTestId('commit-a');
expect(within(commitA).getByText('origin/pr10')).toBeInTheDocument();
expect(within(commitA).queryAllByText('Open')).toHaveLength(1);
});

it('still renders badges for other PR branches', () => {
expect(within(screen.getByTestId('commit-a')).queryAllByText('Closed')).toHaveLength(1);
});
});

describe('after error', () => {
suppressReactErrorBoundaryErrorMessages();

Expand Down
Loading