fix: verify is branch is up to date by comparing remote and local HEAD

This commit is contained in:
Pierre Vanduynslager
2019-12-10 00:23:38 -05:00
parent 9a1af4de44
commit a8747c4f86
2 changed files with 13 additions and 58 deletions
+4 -34
View File
@@ -69,33 +69,6 @@ async function getBranches(repositoryUrl, execaOpts) {
.filter(Boolean);
}
/**
* Verify if the `ref` is in the direct history of a given branch.
*
* @param {String} ref The reference to look for.
* @param {String} branch The branch for which to check if the `ref` is in history.
* @param {Object} [execaOpts] Options to pass to `execa`.
*
* @return {Boolean} `true` if the reference is in the history of the current branch, falsy otherwise.
*/
async function isRefInHistory(ref, branch, execaOpts) {
if (!(await isRefExists(branch, execaOpts))) {
return false;
}
try {
await execa('git', ['merge-base', '--is-ancestor', ref, branch], execaOpts);
return true;
} catch (error) {
if (error.exitCode === 1) {
return false;
}
debug(error);
throw error;
}
}
/**
* Verify if the `ref` exits
*
@@ -310,12 +283,10 @@ async function verifyBranchName(branch, execaOpts) {
* @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(repositoryUrl, branch, execaOpts) {
const {stdout: remoteHead} = await execa('git', ['ls-remote', '--heads', repositoryUrl, branch], execaOpts);
try {
return await isRefInHistory(remoteHead.match(/^(?<ref>\w+)?/)[1], branch, execaOpts);
} catch (error) {
debug(error);
}
return (
(await getGitHead(execaOpts)) ===
(await execa('git', ['ls-remote', '--heads', repositoryUrl, branch], execaOpts)).stdout.match(/^(?<ref>\w+)?/)[1]
);
}
/**
@@ -355,7 +326,6 @@ module.exports = {
getTags,
getCommits,
getBranches,
isRefInHistory,
isRefExists,
fetch,
fetchNotes,