mirror of
https://github.com/pcottle/learnGitBranching.git
synced 2025-07-07 13:14:25 +02:00
correctness on fetch
This commit is contained in:
parent
7cec1bcaab
commit
9840a5e6b4
5 changed files with 96 additions and 53 deletions
|
@ -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();
|
||||
};
|
||||
});
|
||||
|
|
13
spec/remote.spec.js
Normal file
13
spec/remote.spec.js
Normal file
|
@ -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"}}}'
|
||||
);
|
||||
});
|
||||
|
||||
});
|
||||
|
|
@ -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(
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
});
|
||||
|
|
12
todo.txt
12
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue