diff --git a/packages/app/src/git/policy.test.ts b/packages/app/src/git/policy.test.ts index 6a2e8484e..771ca3bff 100644 --- a/packages/app/src/git/policy.test.ts +++ b/packages/app/src/git/policy.test.ts @@ -190,6 +190,25 @@ describe("git-actions-policy", () => { }); }); + it("prioritizes push over pull request merge when local commits are unpushed", () => { + const actions = buildGitActions( + createInput({ + hasRemote: true, + isOnBaseBranch: false, + aheadCount: 2, + aheadOfOrigin: 2, + hasPullRequest: true, + pullRequestUrl: "https://example.com/pr/456", + pullRequestState: "open", + pullRequestMergeable: "MERGEABLE", + pullRequestGithub: githubStatus(), + shipDefault: "pr", + }), + ); + + expect(actions.primary).toMatchObject({ id: "push", label: "Push" }); + }); + it("shows update-from-base only on feature branches that are behind the base branch", () => { const actions = buildGitActions( createInput({ @@ -358,7 +377,7 @@ describe("git-actions-policy", () => { expect(actions.primary).toMatchObject({ id: "merge-pr-squash", - label: "Squash and merge", + label: "Merge", }); }); @@ -379,7 +398,7 @@ describe("git-actions-policy", () => { expect(actions.primary).toMatchObject({ id: "merge-pr-squash", - label: "Squash and merge", + label: "Merge", }); }); @@ -439,11 +458,11 @@ describe("git-actions-policy", () => { expect(actions.primary).toMatchObject({ id: "merge-pr-squash", - label: "Squash and merge", + label: "Merge", }); }); - it("promotes Create PR over push and local merge when PR is the ship default", () => { + it("promotes push over Create PR when local commits are unpushed", () => { const actions = buildGitActions( createInput({ hasRemote: true, @@ -455,8 +474,8 @@ describe("git-actions-policy", () => { ); expect(actions.primary).toMatchObject({ - id: "pr", - label: "Create PR", + id: "push", + label: "Push", }); }); @@ -493,7 +512,7 @@ describe("git-actions-policy", () => { expect(actions.primary).toMatchObject({ id: "merge-pr-squash", - label: "Squash and merge", + label: "Merge", }); expect(actions.secondary.some((action) => action.id === "merge-branch")).toBe(true); }); @@ -564,7 +583,7 @@ describe("git-actions-policy", () => { }, { id: "merge-pr-squash", - label: "Squash and merge", + label: "Merge", pendingLabel: "Merging PR...", successLabel: "PR merged", disabled: false, @@ -573,7 +592,7 @@ describe("git-actions-policy", () => { }, { id: "merge-pr-merge", - label: "Create a merge commit", + label: "Merge", pendingLabel: "Merging PR...", successLabel: "PR merged", disabled: false, @@ -582,7 +601,7 @@ describe("git-actions-policy", () => { }, { id: "merge-pr-rebase", - label: "Rebase and merge", + label: "Merge", pendingLabel: "Merging PR...", successLabel: "PR merged", disabled: false, @@ -684,7 +703,7 @@ describe("git-actions-policy", () => { ); expect(oldDaemonStatus.github).toBeUndefined(); - expect(actions.primary).toMatchObject({ id: "merge-pr-squash", label: "Squash and merge" }); + expect(actions.primary).toMatchObject({ id: "merge-pr-squash", label: "Merge" }); expect(actions.secondary.map((action) => action.id)).toEqual([ "pull", "push", @@ -725,7 +744,7 @@ describe("git-actions-policy", () => { expect(actions.primary).toMatchObject({ id: "enable-pr-auto-merge-squash", - label: "Enable auto-merge with squash", + label: "Auto merge", }); expect(actions.secondary.map((action) => action.id)).toEqual([ "pull", @@ -832,7 +851,7 @@ describe("git-actions-policy", () => { expect(actions.primary).toMatchObject({ id: "merge-pr-merge", - label: "Create a merge commit", + label: "Merge", }); expect(actions.secondary.map((action) => action.id)).toEqual([ "pull", diff --git a/packages/app/src/git/policy.ts b/packages/app/src/git/policy.ts index 78cdacc60..63a5d74af 100644 --- a/packages/app/src/git/policy.ts +++ b/packages/app/src/git/policy.ts @@ -326,6 +326,9 @@ function getPrimaryActionId(input: BuildGitActionsInput): GitActionId | null { if (canPull(input)) { return "pull"; } + if (canPush(input)) { + return "push"; + } if (canMergePr(input)) { return getDefaultDirectPullRequestMergeActionId(input); } @@ -338,9 +341,6 @@ function getPrimaryActionId(input: BuildGitActionsInput): GitActionId | null { if (input.shipDefault === "pr" && canUsePullRequestActionAsShipDefault(input)) { return "pr"; } - if (canPush(input)) { - return "push"; - } if (!input.isOnBaseBranch && input.aheadCount > 0) { return "merge-branch"; } diff --git a/packages/app/src/i18n/resources/ar.ts b/packages/app/src/i18n/resources/ar.ts index f51e861ee..fbcc405a0 100644 --- a/packages/app/src/i18n/resources/ar.ts +++ b/packages/app/src/i18n/resources/ar.ts @@ -590,16 +590,16 @@ export const ar: TranslationResources = { success: "مؤرشف", }, mergePr: { - squash: "الاسكواش والاندماج", - merge: "إنشاء التزام الدمج", - rebase: "إعادة الأساس والدمج", + squash: "دمج", + merge: "دمج", + rebase: "دمج", pending: "دمج PR...", success: "تم دمج PR", }, autoMerge: { - enableSquash: "تمكين الدمج التلقائي مع الاسكواش", - enableMerge: "تمكين الدمج التلقائي مع التزام الدمج", - enableRebase: "تمكين الدمج التلقائي مع rebase", + enableSquash: "دمج تلقائي", + enableMerge: "دمج تلقائي", + enableRebase: "دمج تلقائي", enabled: "تم تمكين الدمج التلقائي", enabling: "تمكين الدمج التلقائي...", disabling: "تعطيل الدمج التلقائي...", diff --git a/packages/app/src/i18n/resources/en.ts b/packages/app/src/i18n/resources/en.ts index fd5507606..c79bf3538 100644 --- a/packages/app/src/i18n/resources/en.ts +++ b/packages/app/src/i18n/resources/en.ts @@ -588,16 +588,16 @@ export const en = { success: "Archived", }, mergePr: { - squash: "Squash and merge", - merge: "Create a merge commit", - rebase: "Rebase and merge", + squash: "Merge", + merge: "Merge", + rebase: "Merge", pending: "Merging PR...", success: "PR merged", }, autoMerge: { - enableSquash: "Enable auto-merge with squash", - enableMerge: "Enable auto-merge with merge commit", - enableRebase: "Enable auto-merge with rebase", + enableSquash: "Auto merge", + enableMerge: "Auto merge", + enableRebase: "Auto merge", enabled: "Auto-merge enabled", enabling: "Enabling auto-merge...", disabling: "Disabling auto-merge...", diff --git a/packages/app/src/i18n/resources/es.ts b/packages/app/src/i18n/resources/es.ts index 8a996ac8e..1b6f61589 100644 --- a/packages/app/src/i18n/resources/es.ts +++ b/packages/app/src/i18n/resources/es.ts @@ -595,16 +595,16 @@ export const es: TranslationResources = { success: "Archivado", }, mergePr: { - squash: "Aplastar y fusionar", - merge: "Crear una confirmación de fusión", - rebase: "Rebase y fusionar", + squash: "Fusionar", + merge: "Fusionar", + rebase: "Fusionar", pending: "FusionandoPR...", success: "PRfusionado", }, autoMerge: { - enableSquash: "Habilitar la fusión automática con squash", - enableMerge: "Habilitar la fusión automática con confirmación de fusión", - enableRebase: "Habilitar la fusión automática con rebase", + enableSquash: "Fusión automática", + enableMerge: "Fusión automática", + enableRebase: "Fusión automática", enabled: "Combinación automática habilitada", enabling: "Habilitando la fusión automática...", disabling: "Desactivando la fusión automática...", diff --git a/packages/app/src/i18n/resources/fr.ts b/packages/app/src/i18n/resources/fr.ts index 40a3da6ff..5a96059fc 100644 --- a/packages/app/src/i18n/resources/fr.ts +++ b/packages/app/src/i18n/resources/fr.ts @@ -595,16 +595,16 @@ export const fr: TranslationResources = { success: "Archivé", }, mergePr: { - squash: "Écraser et fusionner", - merge: "Créer un commit de fusion", - rebase: "Rebase et fusionner", + squash: "Fusionner", + merge: "Fusionner", + rebase: "Fusionner", pending: "Fusion dePR...", success: "PRfusionné", }, autoMerge: { - enableSquash: "Activer la fusion automatique avec squash", - enableMerge: "Activer la fusion automatique avec la validation de fusion", - enableRebase: "Activer la fusion automatique avec rebase", + enableSquash: "Fusion automatique", + enableMerge: "Fusion automatique", + enableRebase: "Fusion automatique", enabled: "Fusion automatique activée", enabling: "Activation de la fusion automatique...", disabling: "Désactivation de la fusion automatique...", diff --git a/packages/app/src/i18n/resources/ru.ts b/packages/app/src/i18n/resources/ru.ts index 9d8c043da..3a61a2354 100644 --- a/packages/app/src/i18n/resources/ru.ts +++ b/packages/app/src/i18n/resources/ru.ts @@ -594,16 +594,16 @@ export const ru: TranslationResources = { success: "В архиве", }, mergePr: { - squash: "Сжать и объединить", - merge: "Создать коммит слияния", - rebase: "Перебазировать и объединить", + squash: "Объединить", + merge: "Объединить", + rebase: "Объединить", pending: "Объединение PR...", success: "PR объединен", }, autoMerge: { - enableSquash: "Включить автоматическое объединение со сквошом", - enableMerge: "Включить автоматическое слияние с фиксацией слияния", - enableRebase: "Включить автоматическое слияние с перебазированием", + enableSquash: "Автообъединение", + enableMerge: "Автообъединение", + enableRebase: "Автообъединение", enabled: "Автоматическое объединение включено", enabling: "Включение автоматического объединения...", disabling: "Отключение автоматического объединения...", diff --git a/packages/app/src/i18n/resources/zh-CN.ts b/packages/app/src/i18n/resources/zh-CN.ts index 9ba58672b..021cb366d 100644 --- a/packages/app/src/i18n/resources/zh-CN.ts +++ b/packages/app/src/i18n/resources/zh-CN.ts @@ -588,16 +588,16 @@ export const zhCN: TranslationResources = { success: "已归档", }, mergePr: { - squash: "Squash and merge", - merge: "Create a merge commit", - rebase: "Rebase and merge", + squash: "Merge", + merge: "Merge", + rebase: "Merge", pending: "正在 merge PR...", success: "PR 已 merge", }, autoMerge: { - enableSquash: "启用 squash auto-merge", - enableMerge: "启用 merge commit auto-merge", - enableRebase: "启用 rebase auto-merge", + enableSquash: "Auto merge", + enableMerge: "Auto merge", + enableRebase: "Auto merge", enabled: "Auto-merge 已启用", enabling: "正在启用 auto-merge...", disabling: "正在禁用 auto-merge...",