diff --git a/build/bundle.js b/build/bundle.js index 73817242..a2b05cde 100644 --- a/build/bundle.js +++ b/build/bundle.js @@ -8007,19 +8007,26 @@ GitEngine.prototype.getTargetGraphDifference = function( } // filter because we werent doing graph search + var differenceUnique = this.getUniqueObjects(difference); + return this.descendSortDepth(differenceUnique); +}; + +GitEngine.prototype.getUniqueObjects = function(objects) { var unique = {}; - var differenceUnique = []; - _.forEach(difference, function(commit) { - if (unique[commit.id]) { + var result = []; + _.forEach(objects, function(object) { + if (unique[object.id]) { return; } - unique[commit.id] = true; - differenceUnique.push(commit); + unique[object.id] = true; + result.push(object); }); + return result; +}; - return differenceUnique.sort(function(cA, cB) { - // reverse sort by depth - return cB.depth - cA.depth; +GitEngine.prototype.descendSortDepth = function(objects) { + return objects.sort(function(oA, oB) { + return oB.depth - oA.depth; }); }; @@ -8133,8 +8140,7 @@ GitEngine.prototype.fetch = function(options) { ); }, this); - // then we get the difference in commits between these two graphs, ordered by - // depth. TODO -- make work for all branches + // then we get the difference in commits between these two graphs var commitsToMake = []; _.each(allRemotes, function(localRemoteBranch) { commitsToMake = commitsToMake.concat(this.getTargetGraphDifference( @@ -8145,6 +8151,12 @@ GitEngine.prototype.fetch = function(options) { options )); }, this); + // we did this for each remote branch, but we still need to reduce to unique + // and sort. in this particular app we can never have unfected remote + // commits that are upstream of multiple branches (since the fakeTeamwork + // command simply commits), but we are doing it anyways for correctness + commitsToMake = this.getUniqueObjects(commitsToMake); + commitsToMake = this.descendSortDepth(commitsToMake); if (commitsToMake.length === 0) { this.command.addWarning(intl.str( @@ -26440,19 +26452,26 @@ GitEngine.prototype.getTargetGraphDifference = function( } // filter because we werent doing graph search + var differenceUnique = this.getUniqueObjects(difference); + return this.descendSortDepth(differenceUnique); +}; + +GitEngine.prototype.getUniqueObjects = function(objects) { var unique = {}; - var differenceUnique = []; - _.forEach(difference, function(commit) { - if (unique[commit.id]) { + var result = []; + _.forEach(objects, function(object) { + if (unique[object.id]) { return; } - unique[commit.id] = true; - differenceUnique.push(commit); + unique[object.id] = true; + result.push(object); }); + return result; +}; - return differenceUnique.sort(function(cA, cB) { - // reverse sort by depth - return cB.depth - cA.depth; +GitEngine.prototype.descendSortDepth = function(objects) { + return objects.sort(function(oA, oB) { + return oB.depth - oA.depth; }); }; @@ -26566,8 +26585,7 @@ GitEngine.prototype.fetch = function(options) { ); }, this); - // then we get the difference in commits between these two graphs, ordered by - // depth. TODO -- make work for all branches + // then we get the difference in commits between these two graphs var commitsToMake = []; _.each(allRemotes, function(localRemoteBranch) { commitsToMake = commitsToMake.concat(this.getTargetGraphDifference( @@ -26578,6 +26596,12 @@ GitEngine.prototype.fetch = function(options) { options )); }, this); + // we did this for each remote branch, but we still need to reduce to unique + // and sort. in this particular app we can never have unfected remote + // commits that are upstream of multiple branches (since the fakeTeamwork + // command simply commits), but we are doing it anyways for correctness + commitsToMake = this.getUniqueObjects(commitsToMake); + commitsToMake = this.descendSortDepth(commitsToMake); if (commitsToMake.length === 0) { this.command.addWarning(intl.str( @@ -31919,13 +31943,13 @@ _.each(toGlobalize, function(module) { }); $(document).ready(function() { - window.events = toGlobalize.Main.getEvents(); - window.eventBaton = toGlobalize.Main.getEventBaton(); - window.sandbox = toGlobalize.Main.getSandbox(); - window.modules = toGlobalize; - window.levelDropdown = toGlobalize.Main.getLevelDropdown(); - window.under = _; - window.copyTree = function() { + window.debug_events = toGlobalize.Main.getEvents(); + window.debug_eventBaton = toGlobalize.Main.getEventBaton(); + window.debug_sandbox = toGlobalize.Main.getSandbox(); + window.debug_modules = toGlobalize; + window.debug_levelDropdown = toGlobalize.Main.getLevelDropdown(); + window.debug_under = _; + window.debug_copyTree = function() { return toGlobalize.Main.getSandbox().mainVis.gitEngine.printAndCopyTree(); }; }); diff --git a/spec/remote.spec.js b/spec/remote.spec.js new file mode 100644 index 00000000..8616a4d6 --- /dev/null +++ b/spec/remote.spec.js @@ -0,0 +1,13 @@ +var base = require('./base'); +var expectTreeAsync = base.expectTreeAsync; + +describe('Git Remotes', function() { + it('clones', function() { + expectTreeAsync( + 'git clone', + '{"branches":{"master":{"target":"C1","id":"master"},"o/master":{"target":"C1","id":"o/master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"},"originTree":{"branches":{"master":{"remoteTrackingBranchID":null,"localBranchesThatTrackThis":null,"remote":false,"target":"C1","id":"master","type":"branch"}},"commits":{"C0":{"type":"commit","parents":[],"author":"Peter Cottle","createTime":"Sun Sep 01 2013 11:59:29 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C0","rootCommit":true},"C1":{"type":"commit","parents":["C0"],"author":"Peter Cottle","createTime":"Sun Sep 01 2013 11:59:29 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C1"}},"HEAD":{"target":"master","id":"HEAD","type":"general ref"}}}' + ); + }); + +}); + diff --git a/src/js/git/index.js b/src/js/git/index.js index a4d47c57..49f3c9cc 100644 --- a/src/js/git/index.js +++ b/src/js/git/index.js @@ -787,19 +787,26 @@ GitEngine.prototype.getTargetGraphDifference = function( } // filter because we werent doing graph search + var differenceUnique = this.getUniqueObjects(difference); + return this.descendSortDepth(differenceUnique); +}; + +GitEngine.prototype.getUniqueObjects = function(objects) { var unique = {}; - var differenceUnique = []; - _.forEach(difference, function(commit) { - if (unique[commit.id]) { + var result = []; + _.forEach(objects, function(object) { + if (unique[object.id]) { return; } - unique[commit.id] = true; - differenceUnique.push(commit); + unique[object.id] = true; + result.push(object); }); + return result; +}; - return differenceUnique.sort(function(cA, cB) { - // reverse sort by depth - return cB.depth - cA.depth; +GitEngine.prototype.descendSortDepth = function(objects) { + return objects.sort(function(oA, oB) { + return oB.depth - oA.depth; }); }; @@ -913,8 +920,7 @@ GitEngine.prototype.fetch = function(options) { ); }, this); - // then we get the difference in commits between these two graphs, ordered by - // depth. TODO -- make work for all branches + // then we get the difference in commits between these two graphs var commitsToMake = []; _.each(allRemotes, function(localRemoteBranch) { commitsToMake = commitsToMake.concat(this.getTargetGraphDifference( @@ -925,6 +931,12 @@ GitEngine.prototype.fetch = function(options) { options )); }, this); + // we did this for each remote branch, but we still need to reduce to unique + // and sort. in this particular app we can never have unfected remote + // commits that are upstream of multiple branches (since the fakeTeamwork + // command simply commits), but we are doing it anyways for correctness + commitsToMake = this.getUniqueObjects(commitsToMake); + commitsToMake = this.descendSortDepth(commitsToMake); if (commitsToMake.length === 0) { this.command.addWarning(intl.str( diff --git a/src/js/util/debug.js b/src/js/util/debug.js index ceae0abb..9d36bafb 100644 --- a/src/js/util/debug.js +++ b/src/js/util/debug.js @@ -36,13 +36,13 @@ _.each(toGlobalize, function(module) { }); $(document).ready(function() { - window.events = toGlobalize.Main.getEvents(); - window.eventBaton = toGlobalize.Main.getEventBaton(); - window.sandbox = toGlobalize.Main.getSandbox(); - window.modules = toGlobalize; - window.levelDropdown = toGlobalize.Main.getLevelDropdown(); - window.under = _; - window.copyTree = function() { + window.debug_events = toGlobalize.Main.getEvents(); + window.debug_eventBaton = toGlobalize.Main.getEventBaton(); + window.debug_sandbox = toGlobalize.Main.getSandbox(); + window.debug_modules = toGlobalize; + window.debug_levelDropdown = toGlobalize.Main.getLevelDropdown(); + window.debug_under = _; + window.debug_copyTree = function() { return toGlobalize.Main.getSandbox().mainVis.gitEngine.printAndCopyTree(); }; }); diff --git a/todo.txt b/todo.txt index b1471eb9..32a9bb49 100644 --- a/todo.txt +++ b/todo.txt @@ -2,17 +2,10 @@ Big Things ~~~~~~~~~~~~~~~~~~~~~~~~~ [ ] compare settings for a level!!! integrated into builder... -Easier origin things: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -[ ] then maybe work on remote branches tracking correctly? wut? that means: - - getRemoteBranch has a default (the same name of the branch) but could be different - - git push takes in an argument, and has to check if the remote branch exists, and makes - it otherwise (after pushing) - Origin things: ~~~~~~~~~~~~~~~~~~~~~~~~~~ -[-] set checkout -b branch __remoteBranch to track the remote branch -[ ] prototype visual layout (background change + header? maybe...) +[ ] polish visual layout +[ ] importTreeNow fails if origin isnt updated Medium things: ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -37,6 +30,7 @@ Ideas for cleaning Done things: (I only started this on Dec 17th 2012 to get a better sense of what was done) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[x] set checkout -b branch __remoteBranch to track the remote branch [x] test coverage for hg!!! (in progress) [x] tree pruning [x] TONS of hg stuff