From 4f453ad4d83885f319a554e62401aacc0b5f0fce Mon Sep 17 00:00:00 2001 From: Peter Cottle Date: Tue, 30 Oct 2012 16:51:06 -0700 Subject: [PATCH] big advance on levels, i can now compare trees holistically or just specific branches, will be big for level design --- src/git.js | 80 ------------------------------------------------------ 1 file changed, 80 deletions(-) diff --git a/src/git.js b/src/git.js index d16e2978..47ca17b8 100644 --- a/src/git.js +++ b/src/git.js @@ -81,86 +81,6 @@ GitEngine.prototype.exportTree = function() { return totalExport; }; -GitEngine.prototype.compareBranchesWithinTrees = function(treeA, treeB, branches) { - var result = true; - _.each(branches, function(branchName) { - result = result && this.compareBranchWithinTrees(treeA, treeB, branchName); - }, this); - - return result; -}; - -GitEngine.prototype.compareBranchWithinTrees = function(treeA, treeB, branchName) { - treeA = this.convertTreeSafe(treeA); - treeB = this.convertTreeSafe(treeB); - - this.stripTreeFields([treeA, treeB]); - - // we need a recursive comparison function to bubble up the branch - var recurseCompare = function(commitA, commitB) { - // this is the short-circuit base case - var result = _.isEqual(commitA, commitB); - if (!result) { - return false; - } - - // we loop through each parent ID. we sort the parent ID's beforehand - // so the index lookup is valid - _.each(commitA.parents, function(pAid, index) { - var pBid = commitB.parents[index]; - - var childA = treeA.commits[pAid]; - var childB = treeB.commits[pBid]; - - result = result && recurseCompare(childA, childB); - }, this); - // if each of our children recursively are equal, we are good - return result; - }; - - var branchA = treeA.branches[branchName]; - var branchB = treeB.branches[branchName]; - - return _.isEqual(branchA, branchB) && - recurseCompare(treeA.commits[branchA.target], treeB.commits[branchB.target]); -}; - -GitEngine.prototype.convertTreeSafe = function(tree) { - if (typeof tree == 'string') { - return JSON.parse(unescape(tree)); - } - return tree; -}; - -GitEngine.prototype.stripTreeFields = function(trees) { - var stripFields = ['createTime', 'author', 'commitMessage']; - var sortFields = ['children', 'parents']; - - _.each(trees, function(tree) { - _.each(tree.commits, function(commit) { - _.each(stripFields, function(field) { - commit[field] = undefined; - }); - _.each(sortFields, function(field) { - if (commit[field]) { - commit[field] = commit[field].sort(); - } - }); - }); - }); -}; - -GitEngine.prototype.compareTrees = function(treeA, treeB) { - treeA = this.convertTreeSafe(treeA); - treeB = this.convertTreeSafe(treeB); - - // now we need to strip out the fields we don't care about, aka things - // like createTime, message, author - this.stripTreeFields([treeA, treeB]); - - return _.isEqual(treeA, treeB); -}; - GitEngine.prototype.printTree = function() { var str = escape(JSON.stringify(this.exportTree())); return str;