Support implicit PARENT parameter when calculating commitRange
When there isn't an explicit revision, the view defaults the base patch num to
PARENT. When the base patch num is PARENT, baseCommit should be set to the
parent commit.
Change-Id: I2c5291f67356111ef4562f36636647f0cb98bea6
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js
index a8ada4a..a5d5644 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js
@@ -564,13 +564,19 @@
promises.push(this._getChangeDetail(this._changeNum).then(change => {
let commit;
let baseCommit;
- for (const k in change.revisions) {
- if (!change.revisions.hasOwnProperty(k)) continue;
- const patchNum = change.revisions[k]._number.toString();
+ for (const commitSha in change.revisions) {
+ if (!change.revisions.hasOwnProperty(commitSha)) continue;
+ const revision = change.revisions[commitSha];
+ const patchNum = revision._number.toString();
if (patchNum === this._patchRange.patchNum) {
- commit = k;
+ commit = commitSha;
+ const commitObj = revision.commit || {};
+ const parents = commitObj.parents || [];
+ if (this._patchRange.basePatchNum === PARENT && parents.length) {
+ baseCommit = parents[parents.length - 1].commit;
+ }
} else if (patchNum === this._patchRange.basePatchNum) {
- baseCommit = k;
+ baseCommit = commitSha;
}
}
this._commitRange = {commit, baseCommit};
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html
index 4daabe3..cac87cf 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html
@@ -622,6 +622,66 @@
assert.equal(select.nativeSelect.value, 'SIDE_BY_SIDE');
});
+ suite('_commitRange', () => {
+ setup(() => {
+ sandbox.stub(element.$.diff, 'reload');
+ sandbox.stub(element, '_initCursor');
+ sandbox.stub(element, '_getChangeDetail').returns(Promise.resolve({
+ _number: 42,
+ revisions: {
+ 'commit-sha-1': {
+ _number: 1,
+ commit: {
+ parents: [{commit: 'sha-1-parent'}],
+ },
+ },
+ 'commit-sha-2': {_number: 2},
+ 'commit-sha-3': {_number: 3},
+ 'commit-sha-4': {_number: 4},
+ 'commit-sha-5': {
+ _number: 5,
+ commit: {
+ parents: [{commit: 'sha-5-parent'}],
+ },
+ },
+ },
+ }));
+ });
+
+ test('uses the patchNum and basePatchNum ', done => {
+ element.params = {
+ view: Gerrit.Nav.View.DIFF,
+ changeNum: '42',
+ patchNum: '4',
+ basePatchNum: '2',
+ path: '/COMMIT_MSG',
+ };
+ flush(() => {
+ assert.deepEqual(element._commitRange, {
+ baseCommit: 'commit-sha-2',
+ commit: 'commit-sha-4',
+ });
+ done();
+ });
+ });
+
+ test('uses the parent when there is no base patch num ', done => {
+ element.params = {
+ view: Gerrit.Nav.View.DIFF,
+ changeNum: '42',
+ patchNum: '5',
+ path: '/COMMIT_MSG',
+ };
+ flush(() => {
+ assert.deepEqual(element._commitRange, {
+ commit: 'commit-sha-5',
+ baseCommit: 'sha-5-parent',
+ });
+ done();
+ });
+ });
+ });
+
test('_initCursor', () => {
assert.isNotOk(element.$.cursor.initialLineNumber);