mirror of
https://github.com/pcottle/learnGitBranching.git
synced 2025-06-27 16:38:50 +02:00
Resolves #164 case insensitive branch comparison with test and validation
This commit is contained in:
parent
0be3577572
commit
43579378e8
5 changed files with 47 additions and 8 deletions
10
spec/base.js
10
spec/base.js
|
@ -6,7 +6,7 @@ var loadTree = function(json) {
|
||||||
};
|
};
|
||||||
|
|
||||||
var compareLevelTree = function(headless, levelBlob) {
|
var compareLevelTree = function(headless, levelBlob) {
|
||||||
var actualTree = headless.gitEngine.exportTree();
|
var actualTree = headless.gitEngine.printTree();
|
||||||
return TreeCompare.dispatchFromLevel(levelBlob, actualTree);
|
return TreeCompare.dispatchFromLevel(levelBlob, actualTree);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ var expectLevelAsync = function(headless, levelBlob) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var hasWarned = false;
|
||||||
var start;
|
var start;
|
||||||
runs(function() {
|
runs(function() {
|
||||||
start = Date.now();
|
start = Date.now();
|
||||||
|
@ -37,8 +38,11 @@ var expectLevelAsync = function(headless, levelBlob) {
|
||||||
});
|
});
|
||||||
waitsFor(function() {
|
waitsFor(function() {
|
||||||
var diff = (Date.now() - start);
|
var diff = (Date.now() - start);
|
||||||
if (diff > TIME - 10) {
|
if (diff > TIME - 10 && !hasWarned) {
|
||||||
console.log('not going to match', command);
|
hasWarned = true;
|
||||||
|
console.log('this goal tree', loadTree(levelBlob.goalTreeString));
|
||||||
|
console.log('not going to match with command', command);
|
||||||
|
console.log(getHeadlessSummary(headless));
|
||||||
}
|
}
|
||||||
var result = compareLevelTree(headless, levelBlob);
|
var result = compareLevelTree(headless, levelBlob);
|
||||||
if (result) {
|
if (result) {
|
||||||
|
|
|
@ -6,7 +6,8 @@ describe('GitEngine Levels', function() {
|
||||||
var sequences = require('../src/levels/index').levelSequences;
|
var sequences = require('../src/levels/index').levelSequences;
|
||||||
_.each(Object.keys(sequences), function(sequenceKey) {
|
_.each(Object.keys(sequences), function(sequenceKey) {
|
||||||
var levels = sequences[sequenceKey];
|
var levels = sequences[sequenceKey];
|
||||||
_.each(levels, function(levelBlob) {
|
_.each(levels, function(levelBlob, index) {
|
||||||
|
console.log('testing level', levelBlob.name.en_US);
|
||||||
base.expectLevelSolved(levelBlob);
|
base.expectLevelSolved(levelBlob);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -55,6 +55,8 @@ describe('Tree Compare', function() {
|
||||||
// state with originTree
|
// state with originTree
|
||||||
'{"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":{"remoteTrackingBranch":null,"remote":false,"target":"C1","id":"master","type":"branch"}},"commits":{"C0":{"type":"commit","parents":[],"author":"Peter Cottle","createTime":"Wed Jul 24 2013 09:58:50 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C0","rootCommit":true},"C1":{"type":"commit","parents":["C0"],"author":"Peter Cottle","createTime":"Wed Jul 24 2013 09:58:50 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C1"}},"HEAD":{"target":"master","id":"HEAD","type":"general ref"}}}',
|
'{"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":{"remoteTrackingBranch":null,"remote":false,"target":"C1","id":"master","type":"branch"}},"commits":{"C0":{"type":"commit","parents":[],"author":"Peter Cottle","createTime":"Wed Jul 24 2013 09:58:50 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C0","rootCommit":true},"C1":{"type":"commit","parents":["C0"],"author":"Peter Cottle","createTime":"Wed Jul 24 2013 09:58:50 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C1"}},"HEAD":{"target":"master","id":"HEAD","type":"general ref"}}}',
|
||||||
{
|
{
|
||||||
|
// different cases for origin tree too
|
||||||
|
'{"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":{"remoteTrackingBranch":null,"remote":false,"target":"C1","id":"MaStEr","type":"branch"}},"commits":{"C0":{"type":"commit","parents":[],"author":"Peter Cottle","createTime":"Wed Jul 24 2013 09:58:50 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C0","rootCommit":true},"C1":{"type":"commit","parents":["C0"],"author":"Peter Cottle","createTime":"Wed Jul 24 2013 09:58:50 GMT-0800 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C1"}},"HEAD":{"target":"MaStEr","id":"HEAD","type":"general ref"}}}': true,
|
||||||
// one extra commit in origin
|
// one extra commit in origin
|
||||||
'{"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":{"remoteTrackingBranch":null,"remote":false,"target":"C2","id":"master","type":"branch"}},"commits":{"C0":{"type":"commit","parents":[],"author":"Peter Cottle","createTime":"Wed Jul 24 2013 10:24:50 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C0","rootCommit":true},"C1":{"type":"commit","parents":["C0"],"author":"Peter Cottle","createTime":"Wed Jul 24 2013 10:24:50 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C1"},"C2":{"type":"commit","parents":["C1"],"author":"Peter Cottle","createTime":"Wed Jul 24 2013 10:24:55 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C2"}},"HEAD":{"target":"master","id":"HEAD","type":"general ref"}}}': false,
|
'{"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":{"remoteTrackingBranch":null,"remote":false,"target":"C2","id":"master","type":"branch"}},"commits":{"C0":{"type":"commit","parents":[],"author":"Peter Cottle","createTime":"Wed Jul 24 2013 10:24:50 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C0","rootCommit":true},"C1":{"type":"commit","parents":["C0"],"author":"Peter Cottle","createTime":"Wed Jul 24 2013 10:24:50 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C1"},"C2":{"type":"commit","parents":["C1"],"author":"Peter Cottle","createTime":"Wed Jul 24 2013 10:24:55 GMT-0700 (PDT)","commitMessage":"Quick commit. Go Bears!","id":"C2"}},"HEAD":{"target":"master","id":"HEAD","type":"general ref"}}}': false,
|
||||||
// extra commit local
|
// extra commit local
|
||||||
|
@ -88,6 +90,8 @@ describe('Tree Compare', function() {
|
||||||
{
|
{
|
||||||
// side branch that is checked out
|
// side branch that is checked out
|
||||||
'{"branches":{"master":{"target":"C2","id":"master"},"side":{"target":"C3","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"side","id":"HEAD"}}': false,
|
'{"branches":{"master":{"target":"C2","id":"master"},"side":{"target":"C3","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"side","id":"HEAD"}}': false,
|
||||||
|
// different cases of branches
|
||||||
|
'{"branches":{"mAsTeR":{"target":"C3","id":"mAsTeR"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"mAsTeR","id":"HEAD"}}': true,
|
||||||
// head detached
|
// head detached
|
||||||
'{"branches":{"master":{"target":"C3","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"C2","id":"HEAD"}}': false
|
'{"branches":{"master":{"target":"C3","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"C2","id":"HEAD"}}': false
|
||||||
}
|
}
|
||||||
|
|
|
@ -618,6 +618,14 @@ GitEngine.prototype.validateBranchName = function(name) {
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (/^[cC]\d+$/.test(name)) {
|
||||||
|
throw new GitError({
|
||||||
|
msg: intl.str(
|
||||||
|
'bad-branch-name',
|
||||||
|
{ branch: name }
|
||||||
|
)
|
||||||
|
});
|
||||||
|
}
|
||||||
if (/[hH][eE][aA][dD]/.test(name)) {
|
if (/[hH][eE][aA][dD]/.test(name)) {
|
||||||
throw new GitError({
|
throw new GitError({
|
||||||
msg: intl.str(
|
msg: intl.str(
|
||||||
|
@ -644,7 +652,7 @@ GitEngine.prototype.validateAndMakeBranch = function(id, target) {
|
||||||
throw new GitError({
|
throw new GitError({
|
||||||
msg: intl.str(
|
msg: intl.str(
|
||||||
'bad-branch-name',
|
'bad-branch-name',
|
||||||
{ branch: name }
|
{ branch: id }
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,7 @@ TreeCompare.compareAllBranchesWithinTreesAndHEAD = function(treeA, treeB) {
|
||||||
treeB = this.convertTreeSafe(treeB);
|
treeB = this.convertTreeSafe(treeB);
|
||||||
|
|
||||||
// also compare tags!! for just one level
|
// also compare tags!! for just one level
|
||||||
return treeA.HEAD.target == treeB.HEAD.target &&
|
return treeA.HEAD.target === treeB.HEAD.target &&
|
||||||
this.compareAllBranchesWithinTrees(treeA, treeB) &&
|
this.compareAllBranchesWithinTrees(treeA, treeB) &&
|
||||||
this.compareAllTagsWithinTrees(treeA, treeB);
|
this.compareAllTagsWithinTrees(treeA, treeB);
|
||||||
};
|
};
|
||||||
|
@ -319,9 +319,31 @@ TreeCompare.getRecurseCompare = function(treeA, treeB, options) {
|
||||||
return recurseCompare;
|
return recurseCompare;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TreeCompare.lowercaseTree = function(tree) {
|
||||||
|
if (tree.HEAD) {
|
||||||
|
tree.HEAD.target = tree.HEAD.target.toLocaleLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
var branches = tree.branches;
|
||||||
|
tree.branches = {};
|
||||||
|
_.each(branches, function(obj, name) {
|
||||||
|
obj.id = obj.id.toLocaleLowerCase();
|
||||||
|
tree.branches[name.toLocaleLowerCase()] = obj;
|
||||||
|
});
|
||||||
|
return tree;
|
||||||
|
};
|
||||||
|
|
||||||
TreeCompare.convertTreeSafe = function(tree) {
|
TreeCompare.convertTreeSafe = function(tree) {
|
||||||
if (typeof tree == 'string') {
|
if (typeof tree !== 'string') {
|
||||||
return JSON.parse(unescape(tree));
|
return tree;
|
||||||
|
}
|
||||||
|
tree = JSON.parse(unescape(tree));
|
||||||
|
// ok we are almost done -- but we need to case insensitive
|
||||||
|
// certain fields. so go ahead and do that.
|
||||||
|
// handle HEAD target first
|
||||||
|
this.lowercaseTree(tree);
|
||||||
|
if (tree.originTree) {
|
||||||
|
tree.originTree = this.lowercaseTree(tree.originTree);
|
||||||
}
|
}
|
||||||
return tree;
|
return tree;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue