import React from 'dom-chef'; import select from 'select-dom'; import delegate from 'delegate-it'; import ClippyIcon from 'octicon/clippy.svg'; import * as pageDetect from 'github-url-detection'; import features from '.'; import {getCurrentBranch, getPRHeadRepo, getRepo, getUsername} from '../github-helpers'; // Logic explained in https://github.com/sindresorhus/refined-github/pull/3596#issuecomment-720910840 function getRemoteName(): string | undefined { const author = getPRHeadRepo()!.owner; if (author === getUsername()) { return; // `origin`, don't add remote } if (author !== getRepo()!.owner) { return author; } if (select('[aria-label="Edit Pull Request title"]')) { return; // It's a collaborator, it's likely to be `origin` } return 'upstream'; } const connectionType = { HTTPS: location.origin + '/', SSH: `git@${location.hostname}:` }; function checkoutOption(remote?: string, remoteType?: 'HTTPS' | 'SSH'): JSX.Element { return ( <> {remote &&
{remoteType}
}
{remote && `git remote add ${remote} ${connectionType[remoteType!]}${getPRHeadRepo()!.nameWithOwner}.git\n`}
git fetch {remote ?? 'origin'} {getCurrentBranch()}{'\n'}
git switch {remote && `--track ${getPRHeadRepo()!.owner}/`}{getCurrentBranch()}
Run in your project repository{remoteName && ', pick either one'}
{remoteName ? [ checkoutOption(remoteName, 'HTTPS'), checkoutOption(remoteName, 'SSH') ] : checkoutOption()}