mirror of
https://github.com/facebook/react.git
synced 2026-02-25 13:13:03 +00:00
94 lines
1.9 KiB
JavaScript
94 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
function isClean(app) {
|
|
return getStatus(app) === '';
|
|
}
|
|
|
|
function getStatus(app) {
|
|
return app.execInRepo(`git status --untracked-files=no --porcelain`);
|
|
}
|
|
|
|
function getBranch(app) {
|
|
return app.execInRepo(`git symbolic-ref HEAD`);
|
|
}
|
|
|
|
function fetch(app, remote) {
|
|
return app.execInRepo(`git fetch ${remote}`);
|
|
}
|
|
|
|
function checkout(app, ref) {
|
|
return app.execInRepo(`git checkout ${ref}`);
|
|
}
|
|
|
|
function pull(app, ref) {
|
|
ref = ref || '';
|
|
return app.execInRepo(`git pull ${ref}`);
|
|
}
|
|
|
|
function merge(app, ref, ff, msg) {
|
|
let opts = [
|
|
ff ? '--ff-only' : '--no-ff',
|
|
];
|
|
if (!msg) {
|
|
opts.push('--no-edit');
|
|
} else {
|
|
opts.push(`-m '${msg}''`);
|
|
}
|
|
return app.execInRepo(`git merge ${opts.join(' ')} ${ref}`);
|
|
}
|
|
|
|
function tag(app, tag, ref) {
|
|
ref = ref || '';
|
|
return app.execInRepo(`git tag ${tag} ${ref}`);
|
|
}
|
|
|
|
function commit(app, msg, all) {
|
|
return app.execInRepo(`git commit -m '${msg}' ${all ? '-a' : ''}`);
|
|
}
|
|
|
|
function push(app, remote, refspec, tags) {
|
|
let opts = [
|
|
remote,
|
|
refspec,
|
|
tags ? '--tags' : '',
|
|
];
|
|
return app.execInRepo(`git push ${opts.join(' ')}`);
|
|
}
|
|
|
|
/**
|
|
* Cherry picks a single sha to the given branch. Very crude, but establishes
|
|
* some API. We don't know if the sha is a merge or a squashed commit so just
|
|
* try both.
|
|
*
|
|
* Assume we're already on the right branch.
|
|
*/
|
|
function cherryPickMerge(app, ref) {
|
|
// console.log(`cherry picking ${sha}`)
|
|
// git cherry-pick -x sha || git cherry-pick -x -m1 sha
|
|
try {
|
|
app.execInRepo(`git cherry-pick -x ${ref}`);
|
|
} catch (e) {
|
|
// Assume for now this just means it was actually a merge.
|
|
// TODO: gracefully handle other cases, like possibility the commit was
|
|
// already cherry-picked and should be skipped.
|
|
|
|
app.execInRepo(`git cherry-pick -x -m1 ${ref}`);
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
getBranch,
|
|
getStatus,
|
|
isClean,
|
|
|
|
commit,
|
|
checkout,
|
|
fetch,
|
|
pull,
|
|
push,
|
|
merge,
|
|
tag,
|
|
|
|
cherryPickMerge,
|
|
};
|