Now can cherry pick multiple commits in a row like git usage Issue #57

This commit is contained in:
Peter Cottle 2013-02-24 22:44:49 -08:00
parent 3523d28416
commit 80a540e172
7 changed files with 133 additions and 36 deletions

View file

@ -94,4 +94,5 @@ Or reported an issue that was successfully closed!
* "MaPePeR" * "MaPePeR"
* Lutz ("mobilutz") * Lutz ("mobilutz")
* Jan Philipp * Jan Philipp
* Jon Frisby

View file

@ -8424,22 +8424,53 @@ GitEngine.prototype.reset = function(target) {
}; };
GitEngine.prototype.cherrypickStarter = function() { GitEngine.prototype.cherrypickStarter = function() {
this.validateArgBounds(this.generalArgs, 1, 1); this.validateArgBounds(this.generalArgs, 1, Number.MAX_VALUE);
var newCommit = this.cherrypick(this.generalArgs[0]);
this.animationFactory.genCommitBirthAnimation(this.animationQueue, newCommit, this.gitVisuals); var set = this.getUpstreamSet('HEAD');
// first resolve all the refs (as an error check)
_.each(this.generalArgs, function(arg) {
var commit = this.resolveID(arg);
// and check that its not upstream
if (set[commit.get('id')]) {
throw new GitError({
msg: 'The commit ' + commit.get('id') +
' already exists in your changes set, aborting!'
});
}
}, this);
// error checks are all good, lets go!
// hack up the rebase response to animate this better
var animationResponse = {};
animationResponse.destinationBranch = this.resolveID('HEAD');
animationResponse.toRebaseArray = [];
animationResponse.rebaseSteps = [];
// now lets start going through
var beforeSnapshot = this.gitVisuals.genSnapshot();
var afterSnapshot;
var newCommit;
_.each(this.generalArgs, function(arg) {
var oldCommit = this.resolveID(arg);
animationResponse.toRebaseArray.push(oldCommit);
newCommit = this.cherrypick(arg);
afterSnapshot = this.gitVisuals.genSnapshot();
animationResponse.rebaseSteps.push({
oldCommit: oldCommit,
newCommit: newCommit,
beforeSnapshot: beforeSnapshot,
afterSnapshot: this.gitVisuals.genSnapshot()
});
beforeSnapshot = afterSnapshot;
}, this);
this.animationFactory.rebaseAnimation(this.animationQueue, animationResponse, this, this.gitVisuals);
}; };
GitEngine.prototype.cherrypick = function(ref) { GitEngine.prototype.cherrypick = function(ref) {
var commit = this.getCommitFromRef(ref); var commit = this.getCommitFromRef(ref);
// check if we already have that
var set = this.getUpstreamSet('HEAD');
if (set[commit.get('id')]) {
throw new GitError({
msg: "We already have that commit in our changes history! You can't cherry-pick it " +
"if it shows up in git log."
});
}
// alter the ID slightly // alter the ID slightly
var id = this.rebaseAltID(commit.get('id')); var id = this.rebaseAltID(commit.get('id'));
@ -8447,6 +8478,7 @@ GitEngine.prototype.cherrypick = function(ref) {
// now commit with that id onto HEAD // now commit with that id onto HEAD
var newCommit = this.makeCommit([this.getCommitFromRef('HEAD')], id); var newCommit = this.makeCommit([this.getCommitFromRef('HEAD')], id);
this.setTargetLocation(this.HEAD, newCommit); this.setTargetLocation(this.HEAD, newCommit);
return newCommit; return newCommit;
}; };
@ -21379,22 +21411,53 @@ GitEngine.prototype.reset = function(target) {
}; };
GitEngine.prototype.cherrypickStarter = function() { GitEngine.prototype.cherrypickStarter = function() {
this.validateArgBounds(this.generalArgs, 1, 1); this.validateArgBounds(this.generalArgs, 1, Number.MAX_VALUE);
var newCommit = this.cherrypick(this.generalArgs[0]);
this.animationFactory.genCommitBirthAnimation(this.animationQueue, newCommit, this.gitVisuals); var set = this.getUpstreamSet('HEAD');
// first resolve all the refs (as an error check)
_.each(this.generalArgs, function(arg) {
var commit = this.resolveID(arg);
// and check that its not upstream
if (set[commit.get('id')]) {
throw new GitError({
msg: 'The commit ' + commit.get('id') +
' already exists in your changes set, aborting!'
});
}
}, this);
// error checks are all good, lets go!
// hack up the rebase response to animate this better
var animationResponse = {};
animationResponse.destinationBranch = this.resolveID('HEAD');
animationResponse.toRebaseArray = [];
animationResponse.rebaseSteps = [];
// now lets start going through
var beforeSnapshot = this.gitVisuals.genSnapshot();
var afterSnapshot;
var newCommit;
_.each(this.generalArgs, function(arg) {
var oldCommit = this.resolveID(arg);
animationResponse.toRebaseArray.push(oldCommit);
newCommit = this.cherrypick(arg);
afterSnapshot = this.gitVisuals.genSnapshot();
animationResponse.rebaseSteps.push({
oldCommit: oldCommit,
newCommit: newCommit,
beforeSnapshot: beforeSnapshot,
afterSnapshot: this.gitVisuals.genSnapshot()
});
beforeSnapshot = afterSnapshot;
}, this);
this.animationFactory.rebaseAnimation(this.animationQueue, animationResponse, this, this.gitVisuals);
}; };
GitEngine.prototype.cherrypick = function(ref) { GitEngine.prototype.cherrypick = function(ref) {
var commit = this.getCommitFromRef(ref); var commit = this.getCommitFromRef(ref);
// check if we already have that
var set = this.getUpstreamSet('HEAD');
if (set[commit.get('id')]) {
throw new GitError({
msg: "We already have that commit in our changes history! You can't cherry-pick it " +
"if it shows up in git log."
});
}
// alter the ID slightly // alter the ID slightly
var id = this.rebaseAltID(commit.get('id')); var id = this.rebaseAltID(commit.get('id'));
@ -21402,6 +21465,7 @@ GitEngine.prototype.cherrypick = function(ref) {
// now commit with that id onto HEAD // now commit with that id onto HEAD
var newCommit = this.makeCommit([this.getCommitFromRef('HEAD')], id); var newCommit = this.makeCommit([this.getCommitFromRef('HEAD')], id);
this.setTargetLocation(this.HEAD, newCommit); this.setTargetLocation(this.HEAD, newCommit);
return newCommit; return newCommit;
}; };

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
build/bundle.min.js vendored

File diff suppressed because one or more lines are too long

View file

@ -412,7 +412,7 @@
For a much easier time perusing the source, see the individual files at: For a much easier time perusing the source, see the individual files at:
https://github.com/pcottle/learnGitBranching https://github.com/pcottle/learnGitBranching
--> -->
<script src="build/bundle.min.01944793.js"></script> <script src="build/bundle.min.90526ef9.js"></script>
<!-- The advantage of github pages: super-easy, simple, slick static hostic. <!-- The advantage of github pages: super-easy, simple, slick static hostic.
The downside? No raw logs to parse for analytics, so I have to include The downside? No raw logs to parse for analytics, so I have to include

View file

@ -522,22 +522,53 @@ GitEngine.prototype.reset = function(target) {
}; };
GitEngine.prototype.cherrypickStarter = function() { GitEngine.prototype.cherrypickStarter = function() {
this.validateArgBounds(this.generalArgs, 1, 1); this.validateArgBounds(this.generalArgs, 1, Number.MAX_VALUE);
var newCommit = this.cherrypick(this.generalArgs[0]);
this.animationFactory.genCommitBirthAnimation(this.animationQueue, newCommit, this.gitVisuals); var set = this.getUpstreamSet('HEAD');
// first resolve all the refs (as an error check)
_.each(this.generalArgs, function(arg) {
var commit = this.resolveID(arg);
// and check that its not upstream
if (set[commit.get('id')]) {
throw new GitError({
msg: 'The commit ' + commit.get('id') +
' already exists in your changes set, aborting!'
});
}
}, this);
// error checks are all good, lets go!
// hack up the rebase response to animate this better
var animationResponse = {};
animationResponse.destinationBranch = this.resolveID('HEAD');
animationResponse.toRebaseArray = [];
animationResponse.rebaseSteps = [];
// now lets start going through
var beforeSnapshot = this.gitVisuals.genSnapshot();
var afterSnapshot;
var newCommit;
_.each(this.generalArgs, function(arg) {
var oldCommit = this.resolveID(arg);
animationResponse.toRebaseArray.push(oldCommit);
newCommit = this.cherrypick(arg);
afterSnapshot = this.gitVisuals.genSnapshot();
animationResponse.rebaseSteps.push({
oldCommit: oldCommit,
newCommit: newCommit,
beforeSnapshot: beforeSnapshot,
afterSnapshot: this.gitVisuals.genSnapshot()
});
beforeSnapshot = afterSnapshot;
}, this);
this.animationFactory.rebaseAnimation(this.animationQueue, animationResponse, this, this.gitVisuals);
}; };
GitEngine.prototype.cherrypick = function(ref) { GitEngine.prototype.cherrypick = function(ref) {
var commit = this.getCommitFromRef(ref); var commit = this.getCommitFromRef(ref);
// check if we already have that
var set = this.getUpstreamSet('HEAD');
if (set[commit.get('id')]) {
throw new GitError({
msg: "We already have that commit in our changes history! You can't cherry-pick it " +
"if it shows up in git log."
});
}
// alter the ID slightly // alter the ID slightly
var id = this.rebaseAltID(commit.get('id')); var id = this.rebaseAltID(commit.get('id'));
@ -545,6 +576,7 @@ GitEngine.prototype.cherrypick = function(ref) {
// now commit with that id onto HEAD // now commit with that id onto HEAD
var newCommit = this.makeCommit([this.getCommitFromRef('HEAD')], id); var newCommit = this.makeCommit([this.getCommitFromRef('HEAD')], id);
this.setTargetLocation(this.HEAD, newCommit); this.setTargetLocation(this.HEAD, newCommit);
return newCommit; return newCommit;
}; };