refactor: always fetch default branch

This commit is contained in:
EnixCoda 2021-05-03 21:43:48 +08:00
parent 35a313b51b
commit 31f803a03f
No known key found for this signature in database
GPG key ID: 0C1A07377913A1DD
3 changed files with 30 additions and 76 deletions

View file

@ -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' })

View file

@ -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
}

View file

@ -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
},