From 9ac7110d7705eafd91a228c732646a1678fdf9d7 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 17 Jun 2020 14:14:54 +0300 Subject: [PATCH] Fix `parent` in `gr-change-metadata` when there is no revision This caused multiple issues, because revision can be undefined and some metadata could not be retrieved. This issues included not always being able to switch between changes in a series and errors adding files to a change during editing. Amends I33c88df5e01b9659256b11f70df7f9442cb5cb9e. Issue: 12917 Change-Id: Ieeb731a72c36c3535b1ec68d601dd0fb39ce681c --- .../gr-change-metadata/gr-change-metadata.js | 8 +++-- .../gr-change-metadata_test.html | 36 ++++++++++++++----- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.js b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.js index 518634735f..e107e150af 100644 --- a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.js +++ b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.js @@ -131,7 +131,7 @@ _currentParents: { type: Array, - computed: '_computeParents(revision)', + computed: '_computeParents(change, revision)', }, /** @type {?} */ @@ -445,9 +445,11 @@ return null; }, - _computeParents(revision) { + _computeParents(change, revision) { if (!revision || !revision.commit) { - return undefined; + if (!change || !change.current_revision) { return []; } + revision = change.revisions[change.current_revision]; + if (!revision || !revision.commit) { return []; } } return revision.commit.parents; }, diff --git a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_test.html b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_test.html index 946524617f..f3ef41e98d 100644 --- a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_test.html +++ b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_test.html @@ -429,20 +429,38 @@ limitations under the License. }); test('_computeParents', () => { - const revision = {commit: {parents: [{commit: '123', subject: 'abc'}]}}; - assert.isUndefined(element._computeParents({})); - assert.equal(element._computeParents(revision), revision.commit.parents); + const parents = [{commit: '123', subject: 'abc'}]; + const revision = {commit: {parents}}; + assert.deepEqual(element._computeParents({}, {}), []); + assert.equal(element._computeParents(null, revision), parents); + const change = current_revision => { + return {current_revision, revisions: {456: revision}}; + }; + assert.deepEqual(element._computeParents(change(null), null), []); + const change_bad_revision = change('789'); + assert.deepEqual(element._computeParents(change_bad_revision, {}), []); + const change_no_commit = {current_revision: '456', revisions: {456: {}}}; + assert.deepEqual(element._computeParents(change_no_commit, null), []); + const change_good = change('456'); + assert.equal(element._computeParents(change_good, null), parents); }); test('_currentParents', () => { - element.revision = { - commit: {parents: [{commit: '123', subject: 'abc'}]}, + const revision = parent => { + return {commit: {parents: [{commit: parent, subject: 'abc'}]}}; }; - assert.equal(element._currentParents[0].commit, '123'); - element.revision = { - commit: {parents: [{commit: '12345', subject: 'abc'}]}, + element.change = { + current_revision: '456', + revisions: {456: revision('111')}, }; - assert.equal(element._currentParents[0].commit, '12345'); + element.revision = revision('222'); + assert.equal(element._currentParents[0].commit, '222'); + element.revision = revision('333'); + assert.equal(element._currentParents[0].commit, '333'); + element.revision = null; + assert.equal(element._currentParents[0].commit, '111'); + element.change = {current_revision: null}; + assert.deepEqual(element._currentParents, []); }); test('_computeParentsLabel', () => {