Finally fixed async git dispatching and promise chains, fixed rebase level Issue #111

This commit is contained in:
Peter Cottle 2013-07-21 18:40:26 -07:00
parent 380bcfaa4b
commit a95a56241b
6 changed files with 25 additions and 24 deletions

File diff suppressed because one or more lines are too long

1
build/bundle.min.js vendored

File diff suppressed because one or more lines are too long

View file

@ -434,7 +434,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.421f004f.js"></script> <script src="build/bundle.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

@ -24,12 +24,6 @@ var compareAnswerExpect = function(headless, expectedJSON) {
expect(equal).toBe(true); expect(equal).toBe(true);
}; };
var expectTree = function(command, expectedJSON) {
var headless = new HeadlessGit();
headless.sendCommand(command);
compareAnswerExpect(headless, expectedJSON);
};
var expectTreeAsync = function(command, expectedJSON) { var expectTreeAsync = function(command, expectedJSON) {
var headless = new HeadlessGit(); var headless = new HeadlessGit();
runs(function() { runs(function() {
@ -42,14 +36,14 @@ var expectTreeAsync = function(command, expectedJSON) {
describe('GitEngine', function() { describe('GitEngine', function() {
it('Commits', function() { it('Commits', function() {
expectTree( expectTreeAsync(
'git commit', 'git commit',
'{"branches":{"master":{"target":"C2","id":"master","type":"branch"}},"commits":{"C0":{"type":"commit","parents":[],"id":"C0","rootCommit":true},"C1":{"type":"commit","parents":["C0"],"id":"C1"},"C2":{"type":"commit","parents":["C1"],"id":"C2"}},"HEAD":{"id":"HEAD","target":"master","type":"general ref"}}' '{"branches":{"master":{"target":"C2","id":"master","type":"branch"}},"commits":{"C0":{"type":"commit","parents":[],"id":"C0","rootCommit":true},"C1":{"type":"commit","parents":["C0"],"id":"C1"},"C2":{"type":"commit","parents":["C1"],"id":"C2"}},"HEAD":{"id":"HEAD","target":"master","type":"general ref"}}'
); );
}); });
it('Checkouts', function() { it('Checkouts', function() {
expectTree( expectTreeAsync(
'git checkout -b side', 'git checkout -b side',
'{"branches":{"master":{"target":"C1","id":"master"},"side":{"target":"C1","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"side","id":"HEAD"}}' '{"branches":{"master":{"target":"C1","id":"master"},"side":{"target":"C1","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"side","id":"HEAD"}}'
); );
@ -70,35 +64,35 @@ describe('GitEngine', function() {
}); });
it('Merges', function() { it('Merges', function() {
expectTree( expectTreeAsync(
'gc; git checkout -b side C1; gc; git merge master', 'gc; git checkout -b side C1; gc; git merge master',
'{"branches":{"master":{"target":"C2","id":"master"},"side":{"target":"C4","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2","C3"],"id":"C4"}},"HEAD":{"target":"side","id":"HEAD"}}' '{"branches":{"master":{"target":"C2","id":"master"},"side":{"target":"C4","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2","C3"],"id":"C4"}},"HEAD":{"target":"side","id":"HEAD"}}'
); );
}); });
it('Resets', function() { it('Resets', function() {
expectTree( expectTreeAsync(
'git commit; git reset HEAD~1', 'git commit; git reset HEAD~1',
'{"branches":{"master":{"target":"C1","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}' '{"branches":{"master":{"target":"C1","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}'
); );
}); });
it('Branches', function() { it('Branches', function() {
expectTree( expectTreeAsync(
'git branch side C0', 'git branch side C0',
'{"branches":{"master":{"target":"C1","id":"master"},"side":{"target":"C0","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}' '{"branches":{"master":{"target":"C1","id":"master"},"side":{"target":"C0","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}'
); );
}); });
it('Deletes branches', function() { it('Deletes branches', function() {
expectTree( expectTreeAsync(
'git branch side; git branch -d side', 'git branch side; git branch -d side',
'{"branches":{"master":{"target":"C1","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}' '{"branches":{"master":{"target":"C1","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}'
); );
}); });
it('Ammends commits', function() { it('Ammends commits', function() {
expectTree( expectTreeAsync(
'git commit --amend', 'git commit --amend',
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C1%27%22%2C%22id%22%3A%22master%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C1%27%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D' '%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C1%27%22%2C%22id%22%3A%22master%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C1%27%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D'
); );
@ -112,7 +106,7 @@ describe('GitEngine', function() {
}); });
it('Forces branches', function() { it('Forces branches', function() {
expectTree( expectTreeAsync(
'git checkout -b side; git branch -f side C0', 'git checkout -b side; git branch -f side C0',
'{"branches":{"master":{"target":"C1","id":"master"},"side":{"target":"C0","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"side","id":"HEAD"}}' '{"branches":{"master":{"target":"C1","id":"master"},"side":{"target":"C0","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"side","id":"HEAD"}}'
); );
@ -125,5 +119,11 @@ describe('GitEngine', function() {
); );
}); });
it('checks out after a rebase', function() {
expectTreeAsync(
'git commit; git checkout -b bugFix C1; git commit; git rebase master;git checkout master',
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22master%22%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C3%27%22%2C%22id%22%3A%22bugFix%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D'
);
});
}); });

View file

@ -83,12 +83,15 @@ HeadlessGit.prototype.sendCommand = function(value, entireCommandPromise) {
var startTime = new Date().getTime(); var startTime = new Date().getTime();
util.splitTextCommand(value, function(commandStr) { util.splitTextCommand(value, function(commandStr) {
var commandObj = new Command({ chain = chain.then(_.bind(function() {
rawStr: commandStr var commandObj = new Command({
}); rawStr: commandStr
var thisDeferred = Q.defer(); });
this.gitEngine.dispatch(commandObj, thisDeferred);
chain = chain.then(thisDeferred.promise); var thisDeferred = Q.defer();
this.gitEngine.dispatch(commandObj, thisDeferred);
return thisDeferred.promise;
}, this));
}, this); }, this);
chain.then(function() { chain.then(function() {

View file

@ -1144,7 +1144,7 @@ GitEngine.prototype.fakeTeamworkStarter = function() {
this.validateArgBounds(this.generalArgs, 0, 2); this.validateArgBounds(this.generalArgs, 0, 2);
// allow formats of: git Faketeamwork 2 or git Faketeamwork side 3 // allow formats of: git Faketeamwork 2 or git Faketeamwork side 3
var branch = (this.origin.refs[this.generalArgs[0]]) ? var branch = (this.origin.refs[this.generalArgs[0]]) ?
this.generalArgs[0] || 'master'; this.generalArgs[0] : 'master';
var numToMake = parseInt(this.generalArgs[0], 10) || this.generalArgs[1] || 1; var numToMake = parseInt(this.generalArgs[0], 10) || this.generalArgs[1] || 1;
// make sure its a branch and exists // make sure its a branch and exists