summaryrefslogtreecommitdiffstats
path: root/polygerrit-ui/app/elements/shared/revision-info/revision-info.html
diff options
context:
space:
mode:
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.html80
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>