diff --git a/packages/app/e2e/browser/changes-pane.spec.ts b/packages/app/e2e/browser/changes-pane.spec.ts
index 2e8353035c..7818cd8733 100644
--- a/packages/app/e2e/browser/changes-pane.spec.ts
+++ b/packages/app/e2e/browser/changes-pane.spec.ts
@@ -367,6 +367,7 @@ test("Changes lets a compact workspace change its base in a sheet", async ({ pag
await page.screenshot({ path: testInfo.outputPath("compact-base-picker.png") });
await release.click();
await expect(picker).toContainText("release");
+ await page.screenshot({ path: testInfo.outputPath("compact-base-selected.png") });
});
test("Changes shows a failed base selection and lets the user retry", async ({ page }) => {
@@ -392,7 +393,9 @@ test("Changes shows a failed base selection and lets the user retry", async ({ p
await expect(picker).toContainText("release");
});
-test("Changes asks to update a host without the base-branch capability", async ({ page }) => {
+test("Changes shows the base as text on a host without the base-branch capability", async ({
+ page,
+}) => {
let baseRequests = 0;
await page.routeWebSocket(daemonWsRoutePattern(), (browser) => {
const server = browser.connectToServer();
diff --git a/packages/app/src/git/diff-pane.tsx b/packages/app/src/git/diff-pane.tsx
index 5f370dfea8..d4a7d43ea8 100644
--- a/packages/app/src/git/diff-pane.tsx
+++ b/packages/app/src/git/diff-pane.tsx
@@ -19,6 +19,7 @@ import type { Theme } from "@/styles/theme";
import { useIsCompactFormFactor } from "@/constants/layout";
import {
AlignJustify,
+ ArrowRight,
ChevronDown,
Columns2,
ExternalLink,
@@ -202,6 +203,7 @@ const foregroundMutedIconColorMapping = (theme: Theme) => ({ color: theme.colors
const ThemedLoadingSpinner = withUnistyles(LoadingSpinner);
const ThemedAlignJustify = withUnistyles(AlignJustify);
+const ThemedArrowRight = withUnistyles(ArrowRight);
const ThemedColumns2 = withUnistyles(Columns2);
const ThemedPilcrow = withUnistyles(Pilcrow);
const ThemedWrapText = withUnistyles(WrapText);
@@ -471,7 +473,8 @@ interface ChangesPullRequestLinkModel extends Pick
- →
- {model.baseBranchPicker}
+ {model.baseRef ? (
+ <>
+
+
+ >
+ ) : null}
{model.pullRequest ? (
@@ -1914,15 +1929,8 @@ export function ChangesSurface({
const changesHeaderModel = useMemo(
() =>
buildChangesHeaderModel({
- baseBranchPicker: (
-
- ),
+ baseRef: baseRef ?? null,
+ isWorktree: isManagedWorktree(status),
branchName: currentBranchName,
committedDescription: committedDiffDescription,
compact: isMobile,
@@ -2012,7 +2020,6 @@ export function ChangesSurface({
}
const styles = StyleSheet.create((theme) => ({
- baseArrow: { color: theme.colors.foregroundMuted },
container: {
flex: 1,
minHeight: 0,
diff --git a/packages/app/src/git/workspace-base-branch-picker.tsx b/packages/app/src/git/workspace-base-branch-picker.tsx
index 0c8f627bd0..cf260e90d6 100644
--- a/packages/app/src/git/workspace-base-branch-picker.tsx
+++ b/packages/app/src/git/workspace-base-branch-picker.tsx
@@ -8,12 +8,10 @@ import { StyleSheet, withUnistyles } from "react-native-unistyles";
import type { Theme } from "@/styles/theme";
import { Combobox, ComboboxItem, type ComboboxProps } from "@/components/ui/combobox";
import { ToolbarLabelSelectTrigger } from "@/components/ui/toolbar-label-trigger";
-import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
import { LoadingSpinner } from "@/components/ui/loading-spinner";
import { Button } from "@/components/ui/button";
import { useHostRuntimeClient, useHostRuntimeIsConnected } from "@/runtime/host-runtime";
import { useSessionStore } from "@/stores/session-store";
-import { useToast } from "@/contexts/toast-context";
import { useDebouncedValue } from "@/hooks/use-debounced-value";
import { invalidateCheckoutGitQueriesForClient } from "./query-keys";
@@ -21,7 +19,7 @@ interface Props {
serverId: string;
workspaceId?: string | null;
cwd: string;
- baseRef: string | null;
+ baseRef: string;
isWorktree: boolean;
}
@@ -48,7 +46,6 @@ export function WorkspaceBaseBranchPicker({
(state) => state.sessions[serverId]?.serverInfo?.features?.workspaceBaseBranch === true,
);
const queryClient = useQueryClient();
- const toast = useToast();
const anchorRef = useRef(null);
const [open, setOpen] = useState(false);
const [search, setSearch] = useState("");
@@ -78,7 +75,6 @@ export function WorkspaceBaseBranchPicker({
},
onSuccess: async () => {
setOpen(false);
- toast.show(t("workspace.git.diff.baseBranch.saved"));
await invalidateCheckoutGitQueriesForClient(queryClient, { serverId, cwd });
},
});
@@ -88,22 +84,15 @@ export function WorkspaceBaseBranchPicker({
);
const error = mutation.error ?? branches.error;
const title = t("workspace.git.diff.baseBranch.title");
- const label = baseRef ? refLabel(baseRef).replace(/^origin\//, "") : title;
- const hint = supported
- ? t("workspace.git.diff.baseBranch.hint")
- : t("workspace.git.diff.baseBranch.updateHost");
+ const label = refLabel(baseRef).replace(/^origin\//, "");
const { reset, mutate, isPending } = mutation;
const { refetch, isError } = branches;
const handleOpen = useCallback(() => {
- if (!supported) {
- toast.error(t("workspace.git.diff.baseBranch.updateHost"));
- return;
- }
reset();
setSearch("");
setOpen(true);
- }, [reset, supported, toast, t]);
+ }, [reset]);
const handleSelect = useCallback(
(ref: string) => {
if (!isPending) mutate(ref);
@@ -150,26 +139,18 @@ export function WorkspaceBaseBranchPicker({
return (
-
-
-
-
-
- {hint}
-
-
+