diff --git a/src/renderer/locales/de/messages.po b/src/renderer/locales/de/messages.po index 0aaaa5e8c..2b10f2435 100644 --- a/src/renderer/locales/de/messages.po +++ b/src/renderer/locales/de/messages.po @@ -9417,6 +9417,10 @@ msgstr "Push ({0})" msgid "Push ({ahead})" msgstr "Push ({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "Push & PR erstellen" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "Push ↑{ahead}" diff --git a/src/renderer/locales/en/messages.po b/src/renderer/locales/en/messages.po index 8e61d83d8..f29b81aae 100644 --- a/src/renderer/locales/en/messages.po +++ b/src/renderer/locales/en/messages.po @@ -9417,6 +9417,10 @@ msgstr "Push ({0})" msgid "Push ({ahead})" msgstr "Push ({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "Push & Create PR" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "Push ↑{ahead}" diff --git a/src/renderer/locales/es/messages.po b/src/renderer/locales/es/messages.po index 90275dbcb..2bfc561f2 100644 --- a/src/renderer/locales/es/messages.po +++ b/src/renderer/locales/es/messages.po @@ -9417,6 +9417,10 @@ msgstr "Push ({0})" msgid "Push ({ahead})" msgstr "Push ({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "Push y crear PR" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "Push ↑{ahead}" diff --git a/src/renderer/locales/fr/messages.po b/src/renderer/locales/fr/messages.po index ccd43ac7f..8d7df21d1 100644 --- a/src/renderer/locales/fr/messages.po +++ b/src/renderer/locales/fr/messages.po @@ -9416,6 +9416,10 @@ msgstr "Push ({0})" msgid "Push ({ahead})" msgstr "Push ({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "Push et créer une PR" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "Push ↑{ahead}" diff --git a/src/renderer/locales/ja/messages.po b/src/renderer/locales/ja/messages.po index a839d9a4f..9c077b7ae 100644 --- a/src/renderer/locales/ja/messages.po +++ b/src/renderer/locales/ja/messages.po @@ -9415,6 +9415,10 @@ msgstr "プッシュ ({0})" msgid "Push ({ahead})" msgstr "プッシュ ({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "プッシュして PR を作成" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "プッシュ ↑{ahead}" diff --git a/src/renderer/locales/ko/messages.po b/src/renderer/locales/ko/messages.po index c36c20024..42cbeb0cc 100644 --- a/src/renderer/locales/ko/messages.po +++ b/src/renderer/locales/ko/messages.po @@ -9417,6 +9417,10 @@ msgstr "푸시({0})" msgid "Push ({ahead})" msgstr "푸시({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "푸시 및 PR 작성" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "푸시 ↑{ahead}" diff --git a/src/renderer/locales/pl/messages.po b/src/renderer/locales/pl/messages.po index 230b25abf..5fbb7aa1a 100644 --- a/src/renderer/locales/pl/messages.po +++ b/src/renderer/locales/pl/messages.po @@ -9417,6 +9417,10 @@ msgstr "Push ({0})" msgid "Push ({ahead})" msgstr "Push ({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "Push i utwórz PR" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "Push ↑{ahead}" diff --git a/src/renderer/locales/pt-BR/messages.po b/src/renderer/locales/pt-BR/messages.po index 3841aff4c..c0cf4c3f5 100644 --- a/src/renderer/locales/pt-BR/messages.po +++ b/src/renderer/locales/pt-BR/messages.po @@ -9417,6 +9417,10 @@ msgstr "Push ({0})" msgid "Push ({ahead})" msgstr "Push ({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "Push e criar PR" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "Push ↑{ahead}" diff --git a/src/renderer/locales/ru/messages.po b/src/renderer/locales/ru/messages.po index e16b3255e..2150173cb 100644 --- a/src/renderer/locales/ru/messages.po +++ b/src/renderer/locales/ru/messages.po @@ -9417,6 +9417,10 @@ msgstr "Push ({0})" msgid "Push ({ahead})" msgstr "Push ({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "Push и создать PR" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "Push ↑{ahead}" diff --git a/src/renderer/locales/tr/messages.po b/src/renderer/locales/tr/messages.po index 3f70d1b5a..fd1f8038b 100644 --- a/src/renderer/locales/tr/messages.po +++ b/src/renderer/locales/tr/messages.po @@ -9417,6 +9417,10 @@ msgstr "Push ({0})" msgid "Push ({ahead})" msgstr "Push ({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "Push Et ve PR Oluştur" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "Push ↑{ahead}" diff --git a/src/renderer/locales/uk/messages.po b/src/renderer/locales/uk/messages.po index a70fc6f49..e2a112768 100644 --- a/src/renderer/locales/uk/messages.po +++ b/src/renderer/locales/uk/messages.po @@ -9417,6 +9417,10 @@ msgstr "Push ({0})" msgid "Push ({ahead})" msgstr "Push ({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "Push і створити PR" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "Push ↑{ahead}" diff --git a/src/renderer/locales/vi/messages.po b/src/renderer/locales/vi/messages.po index 2d145e51a..46d776c58 100644 --- a/src/renderer/locales/vi/messages.po +++ b/src/renderer/locales/vi/messages.po @@ -9417,6 +9417,10 @@ msgstr "Đẩy ({0})" msgid "Push ({ahead})" msgstr "Đẩy ({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "Push & Tạo PR" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "Đẩy ↑{ahead}" diff --git a/src/renderer/locales/zh-CN/messages.po b/src/renderer/locales/zh-CN/messages.po index aaacd5085..5705ba043 100644 --- a/src/renderer/locales/zh-CN/messages.po +++ b/src/renderer/locales/zh-CN/messages.po @@ -9416,6 +9416,10 @@ msgstr "推 ({0})" msgid "Push ({ahead})" msgstr "推 ({ahead})" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +msgid "Push & Create PR" +msgstr "推送并创建 PR" + #: src/renderer/views/MainView/parts/Sidebar/parts/SyncBadge.tsx msgid "Push ↑{ahead}" msgstr "推送 ↑{ahead}" diff --git a/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/GitReviewSidebar.tsx b/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/GitReviewSidebar.tsx index 171ab9abd..5bc0dedbb 100644 --- a/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/GitReviewSidebar.tsx +++ b/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/GitReviewSidebar.tsx @@ -185,6 +185,7 @@ export function GitReviewSidebar(props: { handleGenerateMessage, handleSyncOrPush, handleSyncAction, + handlePushAndCreatePr, handleMergeOnly, handleMergeAndRemove, handlePullFromSource, @@ -559,6 +560,7 @@ export function GitReviewSidebar(props: { handleGenerateMessage={handleGenerateMessage} handleSyncOrPush={handleSyncOrPush} handleSyncAction={handleSyncAction} + handlePushAndCreatePr={handlePushAndCreatePr} hasTracking={hasTracking} handlePullFromSource={handlePullFromSource} /> diff --git a/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.test.tsx b/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.test.tsx index 42548525c..bb56f02a8 100644 --- a/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.test.tsx +++ b/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.test.tsx @@ -71,6 +71,7 @@ function renderPanel(overrides?: Partial[0]>) handleGenerateMessage: vi.fn<() => Promise>(), handleSyncOrPush: vi.fn<() => Promise>(), handleSyncAction: vi.fn<() => Promise>(), + handlePushAndCreatePr: vi.fn<() => Promise>(), handlePullFromSource: vi.fn<() => Promise>(), }; renderWithI18n(); @@ -160,3 +161,26 @@ describe("CommitSyncPanel in-button step status", () => { expect(screen.getByRole("button", { name: "Commit" })).toBeDisabled(); }); }); + +// Committed-but-not-pushed is the gap between the commit split-button (which +// offers "Commit & Create PR") and the PR section (which offers "Create PR" +// once pushed): the push row has to carry the chained action there. +describe("CommitSyncPanel push options", () => { + const pushedAhead = { + hasRemote: true, + hasTracking: true, + needsPush: true, + ahead: 2, + } as const; + + it("offers Push & Create PR while a pushable branch can still open a PR", () => { + renderPanel({ ...pushedAhead, canCreatePr: true }); + expect(screen.getByText("Push & Create PR")).toBeInTheDocument(); + }); + + it("omits Push & Create PR when no PR can be opened", () => { + renderPanel({ ...pushedAhead, canCreatePr: false }); + expect(screen.queryByText("Push & Create PR")).not.toBeInTheDocument(); + expect(screen.getAllByText("Push (2)").length).toBeGreaterThan(0); + }); +}); diff --git a/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx b/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx index 57d0bd0b2..475fbde4d 100644 --- a/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx +++ b/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx @@ -60,6 +60,7 @@ export function CommitSyncPanel(props: { handleGenerateMessage: () => Promise; handleSyncOrPush: () => Promise; handleSyncAction: (key: GitSyncCommand) => Promise; + handlePushAndCreatePr: () => Promise; handlePullFromSource: () => Promise; }) { const { @@ -92,6 +93,7 @@ export function CommitSyncPanel(props: { handleGenerateMessage, handleSyncOrPush, handleSyncAction, + handlePushAndCreatePr, handlePullFromSource, } = props; const { t } = useLingui(); @@ -323,10 +325,15 @@ export function CommitSyncPanel(props: { const showPull = hasTracking && behind > 0; const showPush = ahead > 0 || !hasTracking; const showSyncBoth = hasTracking && ahead > 0 && behind > 0; + // Committed but not pushed yet: offer the chained push + PR here too, + // so the flow the commit split-button offers before committing (and + // the PR section offers after pushing) stays reachable in between. + const showPushPr = showPush && canCreatePr; const showPullFromSourceItem = Boolean( showPullFromSource && sourceBranch && sourceAhead > 0, ); - const hasSyncOptions = showPull || showPush || showSyncBoth || showPullFromSourceItem; + const hasSyncOptions = + showPull || showPush || showPushPr || showSyncBoth || showPullFromSourceItem; const primaryButton = (