fix: harden and de-slop the merged sidebar/chat/settings batch
Post-merge follow-ups for #2740 #2735 #2734 #2690 #2676 #2738 #2684 #2689 #2733 #2739 #2462 #2687 #2736 #2618 #2697, plus three regressions found while reviewing them: - ctrl/cmd+digit while typing no longer switches session tabs (#2503 was still open in practice: the guard only covered the mod+alt surface binding) - Shiki template-call sanitizer now covers every bundled grammar, including the js/ts aliases and embedding grammars; timed-out highlight requests are memoized and no longer cancel unrelated in-flight requests - settings flush on suspend uses keepalive and also fires on Capacitor appStateChange; keeps the selected model persisted across mode switches - remote-only branches fetch before checkout; range helpers fail clearly - git status invalidation now fires for runtime adapters too - settings number inputs and select triggers size in ch so they scale with the interface font - recent-activity timestamps tick from one list-level ticker - Markdown preview find goes through the shared find_in_file keybind with containment, no longer counts its own bar, and debounces observer runs - #2676 reverted; #2524 fixed by fading the sticky header's own background instead of overlaying the content below it - sticky group headers in the model picker and sidebar render again (oc-sticky-fade-scroller class restored after9b9d7069c) - project switcher names are left-aligned again (wrapper lost in26dbc2f30) - tool card quick-open icon is always visible and opens the same line as the expanded card's button - tautological tests replaced or removed; new oxlint findings fixed
This commit is contained in:
@@ -1111,6 +1111,32 @@ describe('checkoutBranch', () => {
|
||||
const { repository } = createRepositoryWithRemote();
|
||||
await expect(checkoutBranch(repository, 'does-not-exist')).rejects.toThrow();
|
||||
});
|
||||
|
||||
it('fetches a remote-only branch that was never fetched locally (#2735)', async () => {
|
||||
const { repository, remote } = createRepositoryWithRemote({ defaultBranch: 'react' });
|
||||
// A collaborator pushes straight to the remote; this repository never
|
||||
// fetches, so `remotes/origin/collab` is listed (#2098) with no local ref.
|
||||
const collaborator = createTempDir();
|
||||
runGit(collaborator, ['clone', remote, '.']);
|
||||
runGit(collaborator, ['config', 'user.email', 'test@example.com']);
|
||||
runGit(collaborator, ['config', 'user.name', 'Test']);
|
||||
runGit(collaborator, ['checkout', '-b', 'collab']);
|
||||
runGit(collaborator, ['push', 'origin', 'collab']);
|
||||
|
||||
const result = await checkoutBranch(repository, 'remotes/origin/collab');
|
||||
|
||||
expect(result).toEqual({ success: true, branch: 'collab' });
|
||||
expect(runGit(repository, ['rev-parse', '--abbrev-ref', 'HEAD']).trim()).toBe('collab');
|
||||
expect(runGit(repository, ['rev-parse', '--abbrev-ref', 'collab@{upstream}']).trim()).toBe('origin/collab');
|
||||
});
|
||||
|
||||
it('reports a clear failure when the remote branch no longer exists', async () => {
|
||||
const { repository } = createRepositoryWithRemote({ defaultBranch: 'react' });
|
||||
|
||||
await expect(checkoutBranch(repository, 'remotes/origin/never-pushed')).rejects.toThrow(
|
||||
/Failed to fetch never-pushed from origin/
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -1485,6 +1511,14 @@ describe.runIf(canRunGit())('getRangeDiff', () => {
|
||||
|
||||
expect(diff).toContain('feature.txt');
|
||||
});
|
||||
|
||||
it('names an unfetched remote-only ref instead of failing with git\'s ambiguous argument (#2735)', async () => {
|
||||
const { repository } = createRepositoryWithRemote({ defaultBranch: 'react' });
|
||||
|
||||
await expect(
|
||||
getRangeDiff(repository, { base: 'remotes/origin/never-fetched', head: 'next' })
|
||||
).rejects.toThrow(/is not available locally/);
|
||||
});
|
||||
});
|
||||
|
||||
describe('parseBranchCreationSource', () => {
|
||||
|
||||
Reference in New Issue
Block a user