diff --git a/__test__/create-or-update-branch.int.test.ts b/__test__/create-or-update-branch.int.test.ts index 0f122541d..e392ad439 100644 --- a/__test__/create-or-update-branch.int.test.ts +++ b/__test__/create-or-update-branch.int.test.ts @@ -140,10 +140,22 @@ describe('create-or-update-branch tests', () => { }) async function beforeTest(): Promise { + await git.fetch( + [`${DEFAULT_BRANCH}:${DEFAULT_BRANCH}`], + REMOTE_NAME, + ['--force', '--update-head-ok'], + true + ) await git.checkout(DEFAULT_BRANCH) } async function afterTest(deleteRemote = true): Promise { + await git.fetch( + [`${DEFAULT_BRANCH}:${DEFAULT_BRANCH}`], + REMOTE_NAME, + ['--force', '--update-head-ok'], + true + ) await git.checkout(DEFAULT_BRANCH) try { // Get the upstream branch if it exists @@ -1454,8 +1466,7 @@ describe('create-or-update-branch tests', () => { expect( await gitLogMatches([ _commitMessage, - ...commits.commitMsgs, - INIT_COMMIT_MESSAGE + commits.commitMsgs[0] // fetch depth of base is 1 ]) ).toBeTruthy() }) @@ -1590,7 +1601,9 @@ describe('create-or-update-branch tests', () => { expect(await getFileContent(TRACKED_FILE)).toEqual(_changes.tracked) expect(await getFileContent(UNTRACKED_FILE)).toEqual(_changes.untracked) expect( - await gitLogMatches([...commits.commitMsgs, INIT_COMMIT_MESSAGE]) + await gitLogMatches([ + commits.commitMsgs[0] // fetch depth of base is 1 + ]) ).toBeTruthy() }) @@ -1668,7 +1681,9 @@ describe('create-or-update-branch tests', () => { expect(await getFileContent(TRACKED_FILE)).toEqual(_changes.tracked) expect(await getFileContent(UNTRACKED_FILE)).toEqual(_changes.untracked) expect( - await gitLogMatches([...commits.commitMsgs, INIT_COMMIT_MESSAGE]) + await gitLogMatches([ + commits.commitMsgs[0] // fetch depth of base is 1 + ]) ).toBeTruthy() }) @@ -1951,8 +1966,7 @@ describe('create-or-update-branch tests', () => { await gitLogMatches([ _commitMessage, ..._commits.commitMsgs, - ...commitsOnBase.commitMsgs, - INIT_COMMIT_MESSAGE + commitsOnBase.commitMsgs[0] // fetch depth of base is 1 ]) ).toBeTruthy() }) @@ -2147,8 +2161,7 @@ describe('create-or-update-branch tests', () => { expect( await gitLogMatches([ _commitMessage, - ...commitsOnBase.commitMsgs, - INIT_COMMIT_MESSAGE + commitsOnBase.commitMsgs[0] // fetch depth of base is 1 ]) ).toBeTruthy() }) diff --git a/dist/index.js b/dist/index.js index bca7be4f4..57130a626 100644 --- a/dist/index.js +++ b/dist/index.js @@ -183,8 +183,13 @@ function createOrUpdateBranch(git, commitMessage, base, branch, branchRemoteName // This will also be true if the working base type is a commit if (workingBase != base) { core.info(`Rebasing commits made to ${workingBaseType} '${workingBase}' on to base branch '${base}'`); + const fetchArgs = ['--force']; + if (branchRemoteName != 'fork') { + // If pushing to a fork we cannot shallow fetch otherwise the 'shallow update not allowed' error occurs + fetchArgs.push('--depth=1'); + } // Checkout the actual base - yield git.fetch([`${base}:${base}`], baseRemote, ['--force']); + yield git.fetch([`${base}:${base}`], baseRemote, fetchArgs); yield git.checkout(base); // Cherrypick commits from the temporary branch starting from the working base const commits = yield git.revList([`${workingBase}..${tempBranch}`, '.'], ['--reverse']); @@ -197,7 +202,7 @@ function createOrUpdateBranch(git, commitMessage, base, branch, branchRemoteName // Reset the temp branch to the working index yield git.checkout(tempBranch, 'HEAD'); // Reset the base - yield git.fetch([`${base}:${base}`], baseRemote, ['--force']); + yield git.fetch([`${base}:${base}`], baseRemote, fetchArgs); } // Try to fetch the pull request branch if (!(yield tryFetch(git, branchRemoteName, branch))) { diff --git a/src/create-or-update-branch.ts b/src/create-or-update-branch.ts index 1c55ea5fc..000dc513d 100644 --- a/src/create-or-update-branch.ts +++ b/src/create-or-update-branch.ts @@ -199,8 +199,13 @@ export async function createOrUpdateBranch( core.info( `Rebasing commits made to ${workingBaseType} '${workingBase}' on to base branch '${base}'` ) + const fetchArgs = ['--force'] + if (branchRemoteName != 'fork') { + // If pushing to a fork we cannot shallow fetch otherwise the 'shallow update not allowed' error occurs + fetchArgs.push('--depth=1') + } // Checkout the actual base - await git.fetch([`${base}:${base}`], baseRemote, ['--force']) + await git.fetch([`${base}:${base}`], baseRemote, fetchArgs) await git.checkout(base) // Cherrypick commits from the temporary branch starting from the working base const commits = await git.revList( @@ -219,7 +224,7 @@ export async function createOrUpdateBranch( // Reset the temp branch to the working index await git.checkout(tempBranch, 'HEAD') // Reset the base - await git.fetch([`${base}:${base}`], baseRemote, ['--force']) + await git.fetch([`${base}:${base}`], baseRemote, fetchArgs) } // Try to fetch the pull request branch