fix: resolve branch name

This commit is contained in:
EnixCoda 2026-01-18 12:07:59 +08:00
parent 6e193db9c5
commit b4ace1f54b
2 changed files with 41 additions and 2 deletions

View file

@ -36,12 +36,18 @@ const selectors = {
'nav[role="navigation"] ul[role="list"] li:nth-child(2) .AppHeader-context-item', 'nav[role="navigation"] ul[role="list"] li:nth-child(2) .AppHeader-context-item',
].join(), ].join(),
}, },
branchSelector: 'button[id^="branch-picker-"]', treeViewBranchSelector: ['#react-repos-tree-pane-ref-selector'].join(),
branchSelector: [
'button[id^="branch-picker-"]',
'#ref-picker-repos-header-ref-selector-wide',
].join(),
pathContext: '[data-testid="breadcrumbs"]', pathContext: '[data-testid="breadcrumbs"]',
pathContextFileName: '[data-testid="breadcrumbs-filename"]', pathContextFileName: '[data-testid="breadcrumbs-filename"]',
pathContextScreenReaderHeading: '[data-testid="screen-reader-heading"]', pathContextScreenReaderHeading: '[data-testid="screen-reader-heading"]',
embeddedData: { embeddedData: {
app: 'script[type="application/json"][data-target="react-app.embeddedData"]', app: 'script[type="application/json"][data-target="react-app.embeddedData"]',
reactAppCodeView:
'react-app[app-name="react-code-view"] script[type="application/json"][data-target="react-app.embeddedData"]',
reposOverview: reposOverview:
'[partial-name="repos-overview"] script[type="application/json"][data-target="react-partial.embeddedData"]', '[partial-name="repos-overview"] script[type="application/json"][data-target="react-partial.embeddedData"]',
pullRequest: 'script[type="application/json"][data-target="react-app.embeddedData"]', pullRequest: 'script[type="application/json"][data-target="react-app.embeddedData"]',
@ -79,6 +85,11 @@ function resolveEmbeddedAppData() {
if (s.is(data, embeddedDataStruct.app)) return getMetaFromPayload(data.payload) if (s.is(data, embeddedDataStruct.app)) return getMetaFromPayload(data.payload)
} }
function resolveEmbeddedCodeViewData() {
const data = getDOMJSON(selectors.globalNavigation.embeddedData.reactAppCodeView)
if (s.is(data, embeddedDataStruct.codeViewApp)) return data.payload
}
function resolveEmbeddedReposOverviewData() { function resolveEmbeddedReposOverviewData() {
const data = getDOMJSON(selectors.globalNavigation.embeddedData.reposOverview) const data = getDOMJSON(selectors.globalNavigation.embeddedData.reposOverview)
if (s.is(data, embeddedDataStruct.reposOverview)) if (s.is(data, embeddedDataStruct.reposOverview))
@ -175,6 +186,22 @@ export function getCommitTitle() {
} }
export function getCurrentBranch(passive = false) { export function getCurrentBranch(passive = false) {
const embeddedData = resolveEmbeddedCodeViewData()
if (embeddedData) {
return embeddedData.refInfo.name
}
{
const treeViewSelectedBranchButtonSelector = [
selectors.globalNavigation.treeViewBranchSelector,
].join()
const treeViewSelectedBranchButtonElement = $(treeViewSelectedBranchButtonSelector)
const branchName = treeViewSelectedBranchButtonElement?.textContent.trim()
if (branchName) {
return branchName
}
}
const selectedBranchButtonSelector = [ const selectedBranchButtonSelector = [
'main #branch-select-menu summary', 'main #branch-select-menu summary',
'main .branch-select-menu summary', 'main .branch-select-menu summary',
@ -220,7 +247,9 @@ export function getCurrentBranch(passive = false) {
}) })
if (branchNameFromCodeTab) return branchNameFromCodeTab if (branchNameFromCodeTab) return branchNameFromCodeTab
if (!passive) raiseError(new Error('cannot get current branch')) if (!passive) {
raiseError(new Error('cannot get current branch'))
}
} }
/** /**

View file

@ -70,6 +70,15 @@ const app = s.type({
payload: repoPayload, payload: repoPayload,
}) })
const codeViewApp = s.type({
payload: s.type({
refInfo: s.type({
name: s.string(),
refType: s.string(),
}),
}),
})
const diffSummary = s.type({ const diffSummary = s.type({
changeType: s.string(), changeType: s.string(),
highestAnnotationLevel: s.nullable(s.string()), highestAnnotationLevel: s.nullable(s.string()),
@ -111,5 +120,6 @@ export const embeddedDataStruct = {
repoPayload, repoPayload,
reposOverview, reposOverview,
app, app,
codeViewApp,
pullRequest, pullRequest,
} }