refactor
This commit is contained in:
@@ -7,109 +7,49 @@ const immutable = path("js/immutable");
|
|||||||
const git = path("js/git");
|
const git = path("js/git");
|
||||||
const shell = path("js/shell");
|
const shell = path("js/shell");
|
||||||
const commander = path("js/commander");
|
const commander = path("js/commander");
|
||||||
|
const branch = path("js/branch");
|
||||||
function setStandardBranches(dp) {
|
|
||||||
return immutable.set(dp, "standardBranches", ["master", "release"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function validateCurrentBranch(dp) {
|
function validateCurrentBranch(dp) {
|
||||||
if (!dp.standardBranches.includes(dp.currentBranch)) {
|
if (branch.isNonStandard(dp.branch.current)) {
|
||||||
throw `invalid base branch: ${dp.currentBranch}`;
|
throw `invalid base branch: ${dp.branch.current}`;
|
||||||
} else {
|
} else {
|
||||||
return dp;
|
return dp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function validateFeatureName(dp) {
|
function validateFeatureName(dp) {
|
||||||
if (dp.standardBranches.includes(dp.featureName)) {
|
if (branch.isStandard(commander.featureName())) {
|
||||||
throw `invalid feature branch: ${dp.featureName}`;
|
throw `invalid feature branch: ${commander.featureName()}`;
|
||||||
} else {
|
} else {
|
||||||
return dp;
|
return dp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setFeatureName(dp) {
|
|
||||||
const fn = commander.args().join("-");
|
|
||||||
return Object.assign({}, dp, { featureName: fn });
|
|
||||||
}
|
|
||||||
|
|
||||||
function setPrefix(dp) {
|
|
||||||
const p = process.env.FEATURE_USER || process.env.USER;
|
|
||||||
return Object.assign({}, dp, { prefix: p });
|
|
||||||
}
|
|
||||||
|
|
||||||
function setFeatureBranch(dp) {
|
function setFeatureBranch(dp) {
|
||||||
const fb = `${dp.prefix}-${dp.currentBranch}-${dp.featureName}`;
|
const fb = [
|
||||||
return Object.assign({}, dp, { featureBranch: fb });
|
commander.prefix(),
|
||||||
}
|
dp.branch.current,
|
||||||
|
commander.featureName()
|
||||||
function gitFetch(dp) {
|
].join("-");
|
||||||
const cmd = "git fetch origin -p && git fetch origin --tags";
|
return immutable.set(dp, "branch.feature", fb);
|
||||||
console.log(cmd);
|
|
||||||
return shell.something(cmd, dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
function setMergeBranch(dp) {
|
|
||||||
return immutable.set(
|
|
||||||
dp,
|
|
||||||
"mergeBranch",
|
|
||||||
["origin", dp.currentBranch].join("/")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function gitMerge(dp) {
|
|
||||||
const cmd = `git merge ${dp.mergeBranch}`;
|
|
||||||
console.log(cmd);
|
|
||||||
return shell.something(cmd, dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
function gitBranch(dp) {
|
|
||||||
const cmd = `git branch ${dp.featureBranch}`;
|
|
||||||
console.log(cmd);
|
|
||||||
return shell.something(cmd, dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
function gitCheckout(dp) {
|
|
||||||
const cmd = `git checkout ${dp.featureBranch}`;
|
|
||||||
console.log(cmd);
|
|
||||||
return shell.something(cmd, dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
function gitPush(dp) {
|
|
||||||
const cmd = `git push -u origin ${dp.featureBranch}`;
|
|
||||||
console.log(cmd);
|
|
||||||
return shell.something(cmd, dp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function createFeatureBranch(dp) {
|
function createFeatureBranch(dp) {
|
||||||
const cmds = [
|
return shell.pipeline([
|
||||||
"git fetch origin -p",
|
"git fetch --prune --prune-tags --tags origin",
|
||||||
"git fetch origin --tags",
|
`git merge origin/${dp.branch.current}`,
|
||||||
`git merge origin/${dp.currentBranch}`,
|
"git push",
|
||||||
`git checkout -b ${dp.featureBranch}`,
|
`git checkout -b ${dp.branch.feature}`,
|
||||||
`git push -u origin ${dp.featureBranch}`
|
`git push -u origin ${dp.branch.feature}`
|
||||||
];
|
]);
|
||||||
return _.reduce(
|
|
||||||
cmds,
|
|
||||||
(accum, elem) => {
|
|
||||||
return accum
|
|
||||||
.then(() => console.log(elem))
|
|
||||||
.then(() => console.log())
|
|
||||||
.then(() => shell.run(elem));
|
|
||||||
},
|
|
||||||
Promise.resolve({})
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function toPromise(dp) {
|
function toPromise(dp) {
|
||||||
return Promise.resolve(dp);
|
return Promise.resolve(dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
const x = toPromise({ program: commander.parse() })
|
const x = toPromise(commander.parse())
|
||||||
.then(setStandardBranches)
|
|
||||||
.then(setFeatureName)
|
|
||||||
.then(validateFeatureName)
|
.then(validateFeatureName)
|
||||||
.then(setPrefix)
|
|
||||||
.then(git.setCurrentBranch)
|
.then(git.setCurrentBranch)
|
||||||
.then(validateCurrentBranch)
|
.then(validateCurrentBranch)
|
||||||
.then(setFeatureBranch)
|
.then(setFeatureBranch)
|
||||||
|
|||||||
17
js/branch.js
Normal file
17
js/branch.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
let lib;
|
||||||
|
|
||||||
|
function standard() {
|
||||||
|
return ["master", "release"];
|
||||||
|
}
|
||||||
|
|
||||||
|
function isStandard(b) {
|
||||||
|
return lib.standard().includes(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isNonStandard(b) {
|
||||||
|
return !lib.isStandard(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
lib = { standard, isStandard, isNonStandard };
|
||||||
|
|
||||||
|
module.exports = lib;
|
||||||
@@ -4,17 +4,27 @@ const something = program.parse(process.argv);
|
|||||||
|
|
||||||
let lib;
|
let lib;
|
||||||
|
|
||||||
function parse() {
|
|
||||||
return something;
|
|
||||||
}
|
|
||||||
|
|
||||||
function args() {
|
function args() {
|
||||||
return something.args;
|
return something.args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function featureName() {
|
||||||
|
return args().join("-");
|
||||||
|
}
|
||||||
|
|
||||||
|
function parse() {
|
||||||
|
return { program: something };
|
||||||
|
}
|
||||||
|
|
||||||
|
function prefix() {
|
||||||
|
return process.env.FEATURE_USER || process.env.USER;
|
||||||
|
}
|
||||||
|
|
||||||
lib = {
|
lib = {
|
||||||
args,
|
args,
|
||||||
parse
|
parse,
|
||||||
|
featureName,
|
||||||
|
prefix
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = lib;
|
module.exports = lib;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ let lib;
|
|||||||
function setCurrentBranch(dp) {
|
function setCurrentBranch(dp) {
|
||||||
const cmd = "git rev-parse --abbrev-ref HEAD";
|
const cmd = "git rev-parse --abbrev-ref HEAD";
|
||||||
|
|
||||||
return shell.capture(cmd).then(x => immutable.set(dp, "currentBranch", x));
|
return shell.capture(cmd).then(x => immutable.set(dp, "branch.current", x));
|
||||||
}
|
}
|
||||||
|
|
||||||
lib = {
|
lib = {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ const _ = require("lodash");
|
|||||||
let lib;
|
let lib;
|
||||||
|
|
||||||
function set(dp, path, value) {
|
function set(dp, path, value) {
|
||||||
return _.assign({}, dp, _.set({}, path, value));
|
return _.set(_.assign({}, dp), path, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
lib = {
|
lib = {
|
||||||
|
|||||||
14
js/shell.js
14
js/shell.js
@@ -23,10 +23,24 @@ function something(cmd, dp) {
|
|||||||
return lib.run(cmd).then(lib._something(dp));
|
return lib.run(cmd).then(lib._something(dp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function pipeline(cmds) {
|
||||||
|
return _.reduce(
|
||||||
|
cmds,
|
||||||
|
(accum, elem) => {
|
||||||
|
return accum
|
||||||
|
.then(() => console.log())
|
||||||
|
.then(() => console.log(elem))
|
||||||
|
.then(() => exec(elem));
|
||||||
|
},
|
||||||
|
Promise.resolve({})
|
||||||
|
).then(() => console.log());
|
||||||
|
}
|
||||||
|
|
||||||
lib = {
|
lib = {
|
||||||
_something,
|
_something,
|
||||||
run,
|
run,
|
||||||
capture,
|
capture,
|
||||||
|
pipeline,
|
||||||
something: _.curry(something)
|
something: _.curry(something)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
23
js/validate.js
Normal file
23
js/validate.js
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
const branch = path("js/branch");
|
||||||
|
|
||||||
|
let lib;
|
||||||
|
|
||||||
|
function validateCurrentBranch(dp) {
|
||||||
|
if (branch.isNonStandard(dp.branch.current)) {
|
||||||
|
throw `invalid base branch: ${dp.branch.current}`;
|
||||||
|
} else {
|
||||||
|
return dp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateFeatureName(dp) {
|
||||||
|
if (branch.isStandard(commander.featureName())) {
|
||||||
|
throw `invalid feature branch: ${commander.featureName()}`;
|
||||||
|
} else {
|
||||||
|
return dp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lib = { validateCurrentBranch, validateFeatureName };
|
||||||
|
|
||||||
|
module.exports = lib;
|
||||||
Reference in New Issue
Block a user