diff options
Diffstat (limited to 'polygerrit-ui/app/elements/shared/revision-info/revision-info.html')
-rw-r--r-- | polygerrit-ui/app/elements/shared/revision-info/revision-info.html | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/polygerrit-ui/app/elements/shared/revision-info/revision-info.html b/polygerrit-ui/app/elements/shared/revision-info/revision-info.html new file mode 100644 index 0000000000..91f87d0e43 --- /dev/null +++ b/polygerrit-ui/app/elements/shared/revision-info/revision-info.html @@ -0,0 +1,80 @@ +<!-- +@license +Copyright (C) 2017 The Android Open Source Project + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> +<link rel="import" href="../../../behaviors/gr-patch-set-behavior/gr-patch-set-behavior.html"> +<script> + (function() { + 'use strict'; + + /** + * @param {Object} change A change object resulting from a change detail + * call that includes revision information. + */ + function RevisionInfo(change) { + this._change = change; + } + + /** + * Get the largest number of parents of the commit in any revision. For + * example, with normal changes this will always return 1. For merge changes + * wherein the revisions are merge commits this will return 2 or potentially + * more. + * @return {Number} + */ + RevisionInfo.prototype.getMaxParents = function() { + return Object.values(this._change.revisions) + .reduce((acc, rev) => Math.max(rev.commit.parents.length, acc), 0); + }; + + /** + * Get an object that maps revision numbers to the number of parents of the + * commit of that revision. + * @return {!Object} + */ + RevisionInfo.prototype.getParentCountMap = function() { + const result = {}; + Object.values(this._change.revisions) + .forEach(rev => { result[rev._number] = rev.commit.parents.length; }); + return result; + }; + + /** + * @param {number|string} patchNum + * @return {number} + */ + RevisionInfo.prototype.getParentCount = function(patchNum) { + return this.getParentCountMap()[patchNum]; + }; + + /** + * Get the commit ID of the (0-offset) indexed parent in the given revision + * number. + * @param {number|string} patchNum + * @param {number} parentIndex (0-offset) + * @return {string} + */ + RevisionInfo.prototype.getParentId = function(patchNum, parentIndex) { + const rev = Object.values(this._change.revisions).find(rev => + Gerrit.PatchSetBehavior.patchNumEquals(rev._number, patchNum)); + return rev.commit.parents[parentIndex].commit; + }; + + if (!window.Gerrit) { + window.Gerrit = {}; + } + window.Gerrit.RevisionInfo = RevisionInfo; + })(); +</script> |