finish end
This commit is contained in:
@@ -1,59 +1,31 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
const _ = require("lodash");
|
const _ = require("lodash");
|
||||||
|
|
||||||
const path = x => require("../" + x);
|
const path = x => require("../" + x);
|
||||||
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 = require("commander");
|
const validate = path("js/validate");
|
||||||
const program = new commander.Command();
|
|
||||||
|
|
||||||
program.parse(process.argv);
|
|
||||||
|
|
||||||
function endFeatureBranch(dp) {
|
function endFeatureBranch(dp) {
|
||||||
const cmds = [
|
const cmds = [
|
||||||
"git fetch origin -p",
|
`git checkout ${dp.branch.standard}`,
|
||||||
"git fetch origin --tags",
|
`git branch -d ${dp.branch.current}`
|
||||||
`git merge origin/${dp.currentBranch}`,
|
|
||||||
`git checkout -b ${dp.featureBranch}`,
|
|
||||||
`git push -u origin ${dp.featureBranch}`
|
|
||||||
];
|
];
|
||||||
return _.reduce(
|
const remoteBranch = _.get(dp, "branch.remote", false);
|
||||||
cmds,
|
if (remoteBranch) {
|
||||||
(accum, elem) => {
|
cmds.push(`git push origin :${remoteBranch}`);
|
||||||
return accum
|
}
|
||||||
.then(() => console.log(elem))
|
return shell.pipeline(cmds);
|
||||||
.then(() => console.log())
|
|
||||||
.then(() => shell.run(elem));
|
|
||||||
},
|
|
||||||
Promise.resolve({})
|
|
||||||
);
|
|
||||||
}
|
|
||||||
// function setBranchParts(dp) {
|
|
||||||
// def parse_branch (branch)
|
|
||||||
// parts = branch.split('-')
|
|
||||||
// error "invalid branch: user-standard-feature" unless parts.size > 2
|
|
||||||
//
|
|
||||||
// user = parts.shift
|
|
||||||
// standard = parts.shift
|
|
||||||
// error "invalid user: #{user}" unless [ENV['FEATURE_USER'],ENV['USER']].include? user
|
|
||||||
// error "invalid branch: #{standard}" unless standard_branches.include? standard or standard =~ release_branch_pattern
|
|
||||||
// feature = parts.join('-')
|
|
||||||
// { user: user, standard: standard, feature: feature }
|
|
||||||
// }
|
|
||||||
|
|
||||||
function toPromise(dp) {
|
|
||||||
return Promise.resolve(dp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const x = toPromise({ program })
|
commander
|
||||||
.then(setStandardBranches)
|
.start()
|
||||||
.then(setFeatureName)
|
.then(git.setCurrentBranch)
|
||||||
.then(validateFeatureName)
|
.then(git.parseCurrentBranch)
|
||||||
.then(setPrefix)
|
.then(validate.mustBeFeatureBranch)
|
||||||
.then(setCurrentBranch)
|
.then(git.setStandardBranch)
|
||||||
.then(validateCurrentBranch)
|
.then(git.isBranchRemote)
|
||||||
.then(setFeatureBranch)
|
.then(endFeatureBranch)
|
||||||
.then(createFeatureBranch)
|
|
||||||
.catch(err => console.error(err));
|
.catch(err => console.error(err));
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ function toPromise(dp) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function echo(dp) {
|
function echo(dp) {
|
||||||
console.log(JSON.stringify(dp));
|
console.log(JSON.stringify(dp, null, 2));
|
||||||
return dp;
|
return dp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +38,8 @@ lib = {
|
|||||||
parse,
|
parse,
|
||||||
featureName,
|
featureName,
|
||||||
prefix,
|
prefix,
|
||||||
start
|
start,
|
||||||
|
echo
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = lib;
|
module.exports = lib;
|
||||||
|
|||||||
28
js/git.js
28
js/git.js
@@ -22,9 +22,35 @@ function setFeatureBranch(dp) {
|
|||||||
return immutable.set(dp, "branch.feature", fb);
|
return immutable.set(dp, "branch.feature", fb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parseCurrentBranch(dp) {
|
||||||
|
const parts = dp.branch.current.split("-");
|
||||||
|
return immutable.set(dp, "branch.parts", parts);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setStandardBranch(dp) {
|
||||||
|
const parts = _.get(dp, "branch.parts", []);
|
||||||
|
return immutable.set(dp, "branch.standard", parts[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isBranchRemote(dp) {
|
||||||
|
const branch = _.get(dp, "branch.current");
|
||||||
|
const cmd = `git branch -r|grep origin|grep -v 'HEAD'|grep ${branch}`;
|
||||||
|
return shell
|
||||||
|
.capture(cmd)
|
||||||
|
.then(x => x.trim())
|
||||||
|
.then(x =>
|
||||||
|
x === ""
|
||||||
|
? immutable.set(dp, "branch.remote", false)
|
||||||
|
: immutable.set(dp, "branch.remote", branch)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
lib = {
|
lib = {
|
||||||
setCurrentBranch,
|
setCurrentBranch,
|
||||||
setFeatureBranch
|
setFeatureBranch,
|
||||||
|
setStandardBranch,
|
||||||
|
parseCurrentBranch,
|
||||||
|
isBranchRemote
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = lib;
|
module.exports = lib;
|
||||||
|
|||||||
@@ -28,6 +28,23 @@ function featureIsNotStandardBranch(dp) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lib = { currentIsStandardBranch, featureIsNotStandardBranch };
|
function mustBeFeatureBranch(dp) {
|
||||||
|
const parts = dp.branch.parts;
|
||||||
|
if (
|
||||||
|
parts.length > 2 &&
|
||||||
|
commander.prefix() === parts[0] &&
|
||||||
|
branch.isStandard(parts[1])
|
||||||
|
) {
|
||||||
|
return dp;
|
||||||
|
} else {
|
||||||
|
throw `ERROR: ${dp.branch.current} is not a feature branch`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lib = {
|
||||||
|
currentIsStandardBranch,
|
||||||
|
mustBeFeatureBranch,
|
||||||
|
featureIsNotStandardBranch
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = lib;
|
module.exports = lib;
|
||||||
|
|||||||
Reference in New Issue
Block a user