From 31f803a03f8ff3392a2bbc09f22adc5e235104dd Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Mon, 3 May 2021 21:43:48 +0800 Subject: [PATCH] refactor: always fetch default branch --- src/driver/core/SideBar.ts | 67 +++++++++++++------------------ src/platforms/GitHub/DOMHelper.ts | 20 --------- src/platforms/GitHub/index.ts | 19 +-------- 3 files changed, 30 insertions(+), 76 deletions(-) diff --git a/src/driver/core/SideBar.ts b/src/driver/core/SideBar.ts index 31d21f8..bb643f5 100644 --- a/src/driver/core/SideBar.ts +++ b/src/driver/core/SideBar.ts @@ -43,7 +43,7 @@ export const init: BoundMethodCreator = dispatch => async () => { dispatch.set({ state: 'disabled' }) return } - const { userName, repoName, branchName, defaultBranchName } = metaData + const { userName, repoName, branchName } = metaData DOMHelper.markGitakoReadyState(true) dispatch.set({ @@ -69,50 +69,39 @@ export const init: BoundMethodCreator = dispatch => async () => { ) getTreeData.catch(error => error) // catch it early to prevent the error being raised higher + const defaultBranchName = await platform.getDefaultBranchName( + { userName, repoName }, + accessToken, + ) + if (!defaultBranchName) { + throw new Error(`Failed resolving default branch name`) + } + + const safeMetaData: MetaData = { + userName, + repoName, + branchName: branchName || defaultBranchName, + defaultBranchName, + } + dispatch.set({ metaData: safeMetaData }) if (branchName) { - const safeMetaData: MetaData = { - userName, - repoName, - branchName, - defaultBranchName, - } - dispatch.set({ metaData: safeMetaData }) getTreeData.catch(error => { dispatch.call(handleError, error) }) - } else { - const defaultBranchName = await platform.getDefaultBranchName( - { userName, repoName }, + } else if (defaultBranchName !== guessDefaultBranch && metaData.type !== 'pull') { + // Accessing repository's non-homepage(no branch name in URL, nor in DOM) + // We predicted its default branch to be 'master' and sent aggressive request + // Throw that request due to the repo do not use {defaultBranchName} as default branch + getTreeData = platform.getTreeData( + { + branchName: defaultBranchName, + userName, + repoName, + }, + '/', + true, accessToken, ) - - if (!defaultBranchName) { - throw new Error(`Failed resolving default branch name`) - } - - const safeMetaData: MetaData = { - userName, - repoName, - branchName: defaultBranchName, - defaultBranchName, - } - dispatch.set({ metaData: safeMetaData }) - - if (defaultBranchName !== guessDefaultBranch && metaData.type !== 'pull') { - // Accessing repository's non-homepage(no branch name in URL, nor in DOM) - // We predicted its default branch to be 'master' and sent aggressive request - // Throw that request due to the repo do not use {defaultBranchName} as default branch - getTreeData = platform.getTreeData( - { - branchName: defaultBranchName, - userName, - repoName, - }, - '/', - true, - accessToken, - ) - } } dispatch.set({ state: 'loading-tree' }) diff --git a/src/platforms/GitHub/DOMHelper.ts b/src/platforms/GitHub/DOMHelper.ts index 0d62f0e..146812a 100644 --- a/src/platforms/GitHub/DOMHelper.ts +++ b/src/platforms/GitHub/DOMHelper.ts @@ -232,23 +232,3 @@ export function attachCopySnippet() { ) }) } - -export function getPath() { - const folderPathElementSelector = '.file-navigation .position-relative' // available when in path like '/tree/...' - const blobPathElementSelector = '#blob-path' // available when in path like '/blob/...' - const pathElement = - document.querySelector(blobPathElementSelector) || - document.querySelector(folderPathElementSelector)?.nextElementSibling - if (!pathElement || !pathElement.querySelector('.js-repo-root')) { - raiseError(new Error(`Path element not found`)) - return '' - } - const path = ((pathElement as HTMLDivElement).innerText || '') - .replace(/ \/ Jump to $/, '') - .trim() - .split('/') - .filter(Boolean) - .slice(1) // the first is the repo's name - .join('/') - return path -} diff --git a/src/platforms/GitHub/index.ts b/src/platforms/GitHub/index.ts index 4b63d68..13e362b 100644 --- a/src/platforms/GitHub/index.ts +++ b/src/platforms/GitHub/index.ts @@ -1,4 +1,3 @@ -import { raiseError } from 'analytics' import { GITHUB_OAUTH } from 'env' import { Base64 } from 'js-base64' import { platform } from 'platforms' @@ -83,26 +82,13 @@ export function isEnterprise() { return !window.location.host.endsWith('github.com') } -function getBranchName() { - const pathFromDOM = DOMHelper.getPath() - const pathAndBranchFromURL = URLHelper.parse().path.filter(Boolean).join('/') - if (pathAndBranchFromURL.endsWith(pathFromDOM)) { - return pathAndBranchFromURL - .slice(0, pathAndBranchFromURL.length - pathFromDOM.length) - .replace(/\/$/, '') - } - raiseError(new Error(`Parsed path not end with path from DOM`)) -} - function resolvePageScope(defaultBranchName?: string) { const parsed = URLHelper.parse() switch (parsed.type) { - // case undefined: - // return `branch-${defaultBranchName}` case 'blob': case 'tree': { - // handle URLs like {user}/{repo}/tree/{sha|branch}, issue#131 - const branchName = getBranchName() + // handle URLs like {user}/{repo}/{'tree'|'blob'}/{sha|branch}, issue #131 + const branchName = DOMHelper.getCurrentBranch() if (branchName && branchName !== defaultBranchName) return `branch-${branchName}` break } @@ -150,7 +136,6 @@ export const GitHub: Platform = { repoName, type, branchName, - defaultBranchName: type ? undefined : branchName, } return metaData },