finish end

This commit is contained in:
rkiel
2019-07-20 08:11:08 -04:00
parent 2443a88ad7
commit 438416bd41
4 changed files with 66 additions and 50 deletions

View File

@@ -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))
.then(() => console.log())
.then(() => shell.run(elem));
},
Promise.resolve({})
);
} }
// function setBranchParts(dp) { return shell.pipeline(cmds);
// 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));

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;