From 7a939a897097a730f1579002ed641a583d3381c4 Mon Sep 17 00:00:00 2001 From: Pierre Vanduynslager Date: Fri, 1 Nov 2019 20:38:45 -0400 Subject: [PATCH] fix: use authenticated URL to check if local branch is up to date --- index.js | 2 +- lib/git.js | 5 +++-- test/git.test.js | 8 ++++---- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/index.js b/index.js index 66fc877cbb..2014a81b84 100644 --- a/index.js +++ b/index.js @@ -65,7 +65,7 @@ async function run(context, plugins) { try { await verifyAuth(options.repositoryUrl, options.branch, {cwd, env}); } catch (error) { - if (!(await isBranchUpToDate(options.branch, {cwd, env}))) { + if (!(await isBranchUpToDate(options.repositoryUrl, options.branch, {cwd, env}))) { logger.log( `The local branch ${options.branch} is behind the remote one, therefore a new version won't be published.` ); diff --git a/lib/git.js b/lib/git.js index 88ef0e419d..a190f71045 100644 --- a/lib/git.js +++ b/lib/git.js @@ -170,13 +170,14 @@ async function verifyTagName(tagName, execaOpts) { /** * Verify the local branch is up to date with the remote one. * + * @param {String} repositoryUrl The remote repository URL. * @param {String} branch The repository branch for which to verify status. * @param {Object} [execaOpts] Options to pass to `execa`. * * @return {Boolean} `true` is the HEAD of the current local branch is the same as the HEAD of the remote branch, falsy otherwise. */ -async function isBranchUpToDate(branch, execaOpts) { - const {stdout: remoteHead} = await execa('git', ['ls-remote', '--heads', 'origin', branch], execaOpts); +async function isBranchUpToDate(repositoryUrl, branch, execaOpts) { + const {stdout: remoteHead} = await execa('git', ['ls-remote', '--heads', repositoryUrl, branch], execaOpts); try { return await isRefInHistory(remoteHead.match(/^(\w+)?/)[1], execaOpts); } catch (error) { diff --git a/test/git.test.js b/test/git.test.js index 3ae326a39a..1d79dfb46d 100644 --- a/test/git.test.js +++ b/test/git.test.js @@ -214,7 +214,7 @@ test('Return "true" if repository is up to date', async t => { await gitCommits(['First'], {cwd}); await gitPush(repositoryUrl, 'master', {cwd}); - t.true(await isBranchUpToDate('master', {cwd})); + t.true(await isBranchUpToDate(repositoryUrl, 'master', {cwd})); }); test('Return falsy if repository is not up to date', async t => { @@ -223,13 +223,13 @@ test('Return falsy if repository is not up to date', async t => { await gitCommits(['Second'], {cwd}); await gitPush(repositoryUrl, 'master', {cwd}); - t.true(await isBranchUpToDate('master', {cwd})); + t.true(await isBranchUpToDate(repositoryUrl, 'master', {cwd})); const tmpRepo = await gitShallowClone(repositoryUrl); await gitCommits(['Third'], {cwd: tmpRepo}); await gitPush('origin', 'master', {cwd: tmpRepo}); - t.falsy(await isBranchUpToDate('master', {cwd})); + t.falsy(await isBranchUpToDate(repositoryUrl, 'master', {cwd})); }); test('Return "true" if local repository is ahead', async t => { @@ -238,5 +238,5 @@ test('Return "true" if local repository is ahead', async t => { await gitPush(repositoryUrl, 'master', {cwd}); await gitCommits(['Second'], {cwd}); - t.true(await isBranchUpToDate('master', {cwd})); + t.true(await isBranchUpToDate(repositoryUrl, 'master', {cwd})); });