diff --git a/lib/modules/platform/azure/index.spec.ts b/lib/modules/platform/azure/index.spec.ts index d5466a0af4f4ec669376c2ccfa3995abe60f290f..e6a881cdb56a314c0f14e7910fe95a729b573053 100644 --- a/lib/modules/platform/azure/index.spec.ts +++ b/lib/modules/platform/azure/index.spec.ts @@ -41,7 +41,7 @@ describe('modules/platform/azure/index', () => { logger = (await import('../../../logger')).logger as never; git = require('../../../util/git'); git.branchExists.mockReturnValue(true); - git.isBranchStale.mockResolvedValue(false); + git.isBranchBehindBase.mockResolvedValue(false); hostRules.find.mockReturnValue({ token: 'token', }); diff --git a/lib/modules/platform/bitbucket-server/index.spec.ts b/lib/modules/platform/bitbucket-server/index.spec.ts index 8faf6f06a6185e951d213710cf9690e984a40e90..7044e66a3e73f4ab66202571708f922ecfc02896 100644 --- a/lib/modules/platform/bitbucket-server/index.spec.ts +++ b/lib/modules/platform/bitbucket-server/index.spec.ts @@ -209,7 +209,7 @@ describe('modules/platform/bitbucket-server/index', () => { bitbucket = await import('.'); git = require('../../../util/git'); git.branchExists.mockReturnValue(true); - git.isBranchStale.mockResolvedValue(false); + git.isBranchBehindBase.mockResolvedValue(false); git.getBranchCommit.mockReturnValue( '0d9c7726c3d628b7e28af234595cfd20febdbf8e' ); diff --git a/lib/modules/platform/bitbucket/index.spec.ts b/lib/modules/platform/bitbucket/index.spec.ts index b9fdcfb80eefab5415d3805bfd6c886880652ce9..f4cb3b0685b9897933c45a9c13f8e702ce6cbf6d 100644 --- a/lib/modules/platform/bitbucket/index.spec.ts +++ b/lib/modules/platform/bitbucket/index.spec.ts @@ -34,7 +34,7 @@ describe('modules/platform/bitbucket/index', () => { logger = (await import('../../../logger')).logger as any; git = require('../../../util/git'); git.branchExists.mockReturnValue(true); - git.isBranchStale.mockResolvedValue(false); + git.isBranchBehindBase.mockResolvedValue(false); // clean up hostRules hostRules.clear(); hostRules.find.mockReturnValue({ diff --git a/lib/modules/platform/gitea/index.spec.ts b/lib/modules/platform/gitea/index.spec.ts index 0e8582b100b3686edb8ad55776612f6cb40efbe4..9681e3c64be2c3a6d6e8ce142feb0f3fbee3579b 100644 --- a/lib/modules/platform/gitea/index.spec.ts +++ b/lib/modules/platform/gitea/index.spec.ts @@ -179,7 +179,7 @@ describe('modules/platform/gitea/index', () => { helper = mocked(await import('./gitea-helper')); logger = mocked((await import('../../../logger')).logger); gitvcs = require('../../../util/git'); - gitvcs.isBranchStale.mockResolvedValue(false); + gitvcs.isBranchBehindBase.mockResolvedValue(false); gitvcs.getBranchCommit.mockReturnValue(mockCommitHash); hostRules = mocked(await import('../../../util/host-rules')); hostRules.clear(); diff --git a/lib/modules/platform/github/index.spec.ts b/lib/modules/platform/github/index.spec.ts index 8ecbbebf86eb559c67c58cbef519daae104699b2..0eb24bc7bd9cf5e02f5509f712691333432a1ec7 100644 --- a/lib/modules/platform/github/index.spec.ts +++ b/lib/modules/platform/github/index.spec.ts @@ -35,7 +35,7 @@ describe('modules/platform/github/index', () => { setBaseUrl(githubApiHost); git.branchExists.mockReturnValue(true); - git.isBranchStale.mockResolvedValue(true); + git.isBranchBehindBase.mockResolvedValue(true); git.getBranchCommit.mockReturnValue( '0d9c7726c3d628b7e28af234595cfd20febdbf8e' ); diff --git a/lib/modules/platform/gitlab/index.spec.ts b/lib/modules/platform/gitlab/index.spec.ts index 4292c28de1a775f0f4c11702b356c582f90a1067..8c2cc97805a47bba3cca6bd317846baf67c12000 100644 --- a/lib/modules/platform/gitlab/index.spec.ts +++ b/lib/modules/platform/gitlab/index.spec.ts @@ -36,7 +36,7 @@ describe('modules/platform/gitlab/index', () => { jest.mock('../../../util/git'); git = require('../../../util/git'); git.branchExists.mockReturnValue(true); - git.isBranchStale.mockResolvedValue(true); + git.isBranchBehindBase.mockResolvedValue(true); git.getBranchCommit.mockReturnValue( '0d9c7726c3d628b7e28af234595cfd20febdbf8e' ); diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts index c3d1886cc4fc9e7988a8a32f385fe7fd79872cd3..d9351da8b0a2f60fa7bdacebef882df920f9c6c5 100644 --- a/lib/util/git/index.spec.ts +++ b/lib/util/git/index.spec.ts @@ -237,18 +237,20 @@ describe('util/git/index', () => { }); }); - describe('isBranchStale()', () => { + describe('isBranchBehindBase()', () => { it('should return false if same SHA as master', async () => { - expect(await git.isBranchStale('renovate/future_branch')).toBeFalse(); + expect( + await git.isBranchBehindBase('renovate/future_branch') + ).toBeFalse(); }); it('should return true if SHA different from master', async () => { - expect(await git.isBranchStale('renovate/past_branch')).toBeTrue(); + expect(await git.isBranchBehindBase('renovate/past_branch')).toBeTrue(); }); it('should return result even if non-default and not under branchPrefix', async () => { - expect(await git.isBranchStale('develop')).toBeTrue(); - expect(await git.isBranchStale('develop')).toBeTrue(); // cache + expect(await git.isBranchBehindBase('develop')).toBeTrue(); + expect(await git.isBranchBehindBase('develop')).toBeTrue(); // cache }); }); diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts index e4181f81533c5f0f215594c88c3dc4c7eaf36d2b..36974d65aa020ff3a3970b3e3190cdd350317955 100644 --- a/lib/util/git/index.ts +++ b/lib/util/git/index.ts @@ -542,7 +542,7 @@ export function getBranchList(): string[] { return Object.keys(config.branchCommits); } -export async function isBranchStale(branchName: string): Promise<boolean> { +export async function isBranchBehindBase(branchName: string): Promise<boolean> { await syncGit(); try { const { currentBranchSha, currentBranch } = config; @@ -552,12 +552,12 @@ export async function isBranchStale(branchName: string): Promise<boolean> { '--contains', config.currentBranchSha, ]); - const isStale = !branches.all.map(localName).includes(branchName); + const isBehind = !branches.all.map(localName).includes(branchName); logger.debug( - { isStale, currentBranch, currentBranchSha }, - `isBranchStale=${isStale}` + { isBehind, currentBranch, currentBranchSha }, + `isBranchBehindBase=${isBehind}` ); - return isStale; + return isBehind; } catch (err) /* istanbul ignore next */ { const errChecked = checkForPlatformFailure(err); if (errChecked) { diff --git a/lib/workers/repository/config-migration/branch/rebase.spec.ts b/lib/workers/repository/config-migration/branch/rebase.spec.ts index ccdbf3a5f9272d9d6bf38e32515227af5bd68727..f6bb3cd0db8742320d8b95002fe75f85a98cce16 100644 --- a/lib/workers/repository/config-migration/branch/rebase.spec.ts +++ b/lib/workers/repository/config-migration/branch/rebase.spec.ts @@ -52,7 +52,7 @@ describe('workers/repository/config-migration/branch/rebase', () => { }); it('rebases migration branch', async () => { - git.isBranchStale.mockResolvedValueOnce(true); + git.isBranchBehindBase.mockResolvedValueOnce(true); await rebaseMigrationBranch(config, migratedConfigData); expect(git.commitFiles).toHaveBeenCalledTimes(1); }); @@ -61,14 +61,14 @@ describe('workers/repository/config-migration/branch/rebase', () => { GlobalConfig.set({ dryRun: 'full', }); - git.isBranchStale.mockResolvedValueOnce(true); + git.isBranchBehindBase.mockResolvedValueOnce(true); await rebaseMigrationBranch(config, migratedConfigData); expect(git.commitFiles).toHaveBeenCalledTimes(0); }); it('rebases via platform', async () => { config.platformCommit = true; - git.isBranchStale.mockResolvedValueOnce(true); + git.isBranchBehindBase.mockResolvedValueOnce(true); await rebaseMigrationBranch(config, migratedConfigData); expect(platform.commitFiles).toHaveBeenCalledTimes(1); }); diff --git a/lib/workers/repository/config-migration/branch/rebase.ts b/lib/workers/repository/config-migration/branch/rebase.ts index b5a3a320f34d9d9aa1d192fc4bbfa60cbbdac23e..3ab5f3170c02ac44287653fc0159b6421f8ff10e 100644 --- a/lib/workers/repository/config-migration/branch/rebase.ts +++ b/lib/workers/repository/config-migration/branch/rebase.ts @@ -2,7 +2,11 @@ import { GlobalConfig } from '../../../../config/global'; import type { RenovateConfig } from '../../../../config/types'; import { logger } from '../../../../logger'; import { commitAndPush } from '../../../../modules/platform/commit'; -import { getFile, isBranchModified, isBranchStale } from '../../../../util/git'; +import { + getFile, + isBranchBehindBase, + isBranchModified, +} from '../../../../util/git'; import { getMigrationBranchName } from '../common'; import { ConfigMigrationCommitMessageFactory } from './commit-message'; import type { MigratedData } from './migrated-data'; @@ -20,7 +24,10 @@ export async function rebaseMigrationBranch( const configFileName = migratedConfigData.filename; const contents = migratedConfigData.content; const existingContents = await getFile(configFileName, branchName); - if (contents === existingContents && !(await isBranchStale(branchName))) { + if ( + contents === existingContents && + !(await isBranchBehindBase(branchName)) + ) { logger.debug('Migration branch is up to date'); return null; } diff --git a/lib/workers/repository/onboarding/branch/rebase.spec.ts b/lib/workers/repository/onboarding/branch/rebase.spec.ts index 8bbb18c3492d4f20dd358e76c8ebecbfeaef634d..62dfd90e58431842c955a5b95176425427cea194 100644 --- a/lib/workers/repository/onboarding/branch/rebase.spec.ts +++ b/lib/workers/repository/onboarding/branch/rebase.spec.ts @@ -44,7 +44,7 @@ describe('workers/repository/onboarding/branch/rebase', () => { }); it('rebases onboarding branch', async () => { - git.isBranchStale.mockResolvedValueOnce(true); + git.isBranchBehindBase.mockResolvedValueOnce(true); await rebaseOnboardingBranch(config); expect(git.commitFiles).toHaveBeenCalledTimes(1); }); @@ -52,13 +52,13 @@ describe('workers/repository/onboarding/branch/rebase', () => { it('rebases via platform', async () => { platform.commitFiles = jest.fn(); config.platformCommit = true; - git.isBranchStale.mockResolvedValueOnce(true); + git.isBranchBehindBase.mockResolvedValueOnce(true); await rebaseOnboardingBranch(config); expect(platform.commitFiles).toHaveBeenCalledTimes(1); }); it('uses the onboardingConfigFileName if set', async () => { - git.isBranchStale.mockResolvedValueOnce(true); + git.isBranchBehindBase.mockResolvedValueOnce(true); await rebaseOnboardingBranch({ ...config, onboardingConfigFileName: '.github/renovate.json', @@ -73,7 +73,7 @@ describe('workers/repository/onboarding/branch/rebase', () => { }); it('falls back to "renovate.json" if onboardingConfigFileName is not set', async () => { - git.isBranchStale.mockResolvedValueOnce(true); + git.isBranchBehindBase.mockResolvedValueOnce(true); await rebaseOnboardingBranch({ ...config, onboardingConfigFileName: undefined, diff --git a/lib/workers/repository/onboarding/branch/rebase.ts b/lib/workers/repository/onboarding/branch/rebase.ts index b4bce2b1ed22e6f013d2979597bb6f6c97fbdd17..61b7073530c56ded360623326db0fc1e6a5f6523 100644 --- a/lib/workers/repository/onboarding/branch/rebase.ts +++ b/lib/workers/repository/onboarding/branch/rebase.ts @@ -3,7 +3,11 @@ import { GlobalConfig } from '../../../../config/global'; import type { RenovateConfig } from '../../../../config/types'; import { logger } from '../../../../logger'; import { commitAndPush } from '../../../../modules/platform/commit'; -import { getFile, isBranchModified, isBranchStale } from '../../../../util/git'; +import { + getFile, + isBranchBehindBase, + isBranchModified, +} from '../../../../util/git'; import { OnboardingCommitMessageFactory } from './commit-message'; import { getOnboardingConfigContents } from './config'; @@ -27,7 +31,7 @@ export async function rebaseOnboardingBranch( // TODO #7154 if ( contents === existingContents && - !(await isBranchStale(config.onboardingBranch!)) + !(await isBranchBehindBase(config.onboardingBranch!)) ) { logger.debug('Onboarding branch is up to date'); return null; diff --git a/lib/workers/repository/update/branch/reuse.spec.ts b/lib/workers/repository/update/branch/reuse.spec.ts index 1945f185b4d69c8bc5ad7a219d9da7d4c61c1ee6..ce9ca6ccafe33768e82295ff6ecd0477f37c3248 100644 --- a/lib/workers/repository/update/branch/reuse.spec.ts +++ b/lib/workers/repository/update/branch/reuse.spec.ts @@ -173,7 +173,7 @@ describe('workers/repository/update/branch/reuse', () => { config.automerge = true; config.automergeType = 'branch'; git.branchExists.mockReturnValueOnce(true); - git.isBranchStale.mockResolvedValueOnce(true); + git.isBranchBehindBase.mockResolvedValueOnce(true); const res = await shouldReuseExistingBranch(config); expect(res.reuseExistingBranch).toBeFalse(); }); @@ -181,7 +181,7 @@ describe('workers/repository/update/branch/reuse', () => { it('returns true if rebaseWhen=behind-base-branch but cannot rebase', async () => { config.rebaseWhen = 'behind-base-branch'; git.branchExists.mockReturnValueOnce(true); - git.isBranchStale.mockResolvedValueOnce(true); + git.isBranchBehindBase.mockResolvedValueOnce(true); git.isBranchConflicted.mockResolvedValueOnce(true); platform.getBranchPr.mockResolvedValueOnce(pr); git.isBranchModified.mockResolvedValueOnce(true); @@ -194,7 +194,7 @@ describe('workers/repository/update/branch/reuse', () => { config.automerge = true; config.automergeType = 'pr'; git.branchExists.mockReturnValueOnce(true); - git.isBranchStale.mockResolvedValueOnce(true); + git.isBranchBehindBase.mockResolvedValueOnce(true); const res = await shouldReuseExistingBranch(config); expect(res.reuseExistingBranch).toBeFalse(); }); @@ -203,7 +203,7 @@ describe('workers/repository/update/branch/reuse', () => { config.rebaseWhen = 'auto'; platform.getRepoForceRebase.mockResolvedValueOnce(true); git.branchExists.mockReturnValueOnce(true); - git.isBranchStale.mockResolvedValueOnce(true); + git.isBranchBehindBase.mockResolvedValueOnce(true); const res = await shouldReuseExistingBranch(config); expect(res.reuseExistingBranch).toBeFalse(); }); @@ -214,7 +214,7 @@ describe('workers/repository/update/branch/reuse', () => { git.branchExists.mockReturnValueOnce(true); const res = await shouldReuseExistingBranch(config); expect(res.reuseExistingBranch).toBeTrue(); - expect(git.isBranchStale).not.toHaveBeenCalled(); + expect(git.isBranchBehindBase).not.toHaveBeenCalled(); expect(git.isBranchModified).not.toHaveBeenCalled(); }); @@ -222,7 +222,7 @@ describe('workers/repository/update/branch/reuse', () => { config.rebaseWhen = 'conflicted'; config.automerge = true; git.branchExists.mockReturnValueOnce(true); - git.isBranchStale.mockResolvedValueOnce(true); + git.isBranchBehindBase.mockResolvedValueOnce(true); const res = await shouldReuseExistingBranch(config); expect(res.reuseExistingBranch).toBeTrue(); }); diff --git a/lib/workers/repository/update/branch/reuse.ts b/lib/workers/repository/update/branch/reuse.ts index c1ac3e786fda36b446fc07bd502575de538792af..2f1e75d5761cdef3563006a98110057893a7dc84 100644 --- a/lib/workers/repository/update/branch/reuse.ts +++ b/lib/workers/repository/update/branch/reuse.ts @@ -5,9 +5,9 @@ import { platform } from '../../../../modules/platform'; import type { RangeStrategy } from '../../../../types'; import { branchExists, + isBranchBehindBase, isBranchConflicted, isBranchModified, - isBranchStale, } from '../../../../util/git'; import type { BranchConfig } from '../../../types'; @@ -62,7 +62,7 @@ export async function shouldReuseExistingBranch( (config.rebaseWhen === 'auto' && (config.automerge || (await platform.getRepoForceRebase()))) ) { - if (await isBranchStale(branchName)) { + if (await isBranchBehindBase(branchName)) { logger.debug(`Branch is stale and needs rebasing`); // We can rebase the branch only if no PR or PR can be rebased if (await isBranchModified(branchName)) {