diff options
Diffstat (limited to 'polygerrit-ui/app/elements/change/gr-change-view')
3 files changed, 59 insertions, 9 deletions
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html index 4f5bf94795..82279bd5fb 100644 --- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html +++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html @@ -40,6 +40,7 @@ limitations under the License. <link rel="import" href="../../shared/gr-overlay/gr-overlay.html"> <link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html"> <link rel="import" href="../../shared/gr-tooltip-content/gr-tooltip-content.html"> +<link rel="import" href="../../shared/revision-info/revision-info.html"> <link rel="import" href="../gr-change-actions/gr-change-actions.html"> <link rel="import" href="../gr-change-metadata/gr-change-metadata.html"> <link rel="import" href="../gr-commit-info/gr-commit-info.html"> @@ -525,6 +526,7 @@ limitations under the License. all-patch-sets="[[_allPatchSets]]" change="[[_change]]" change-num="[[_changeNum]]" + revision-info="[[_revisionInfo]]" change-comments="[[_changeComments]]" commit-info="[[_commitInfo]]" change-url="[[_computeChangeUrl(_change)]]" diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js index 909a1ee0ec..470f8596c1 100644 --- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js +++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js @@ -122,6 +122,7 @@ type: Object, value: {}, }, + _prefs: Object, /** @type {?} */ _changeComments: Object, _canStartReview: { @@ -134,6 +135,10 @@ type: Object, observer: '_changeChanged', }, + _revisionInfo: { + type: Object, + computed: '_getRevisionInfo(_change)', + }, /** @type {?} */ _commitInfo: Object, _currentRevision: { @@ -262,6 +267,7 @@ 'fullscreen-overlay-closed': '_handleShowBackgroundContent', 'diff-comments-modified': '_handleReloadCommentThreads', }, + observers: [ '_labelsChanged(_change.labels.*)', '_paramsAndChangeChanged(params, _change)', @@ -335,7 +341,7 @@ _setDiffViewMode(opt_reset) { if (!opt_reset && this.viewState.diffViewMode) { return; } - return this.$.restAPI.getPreferences().then( prefs => { + return this._getPreferences().then( prefs => { if (!this.viewState.diffMode) { this.set('viewState.diffMode', prefs.default_diff_view); } @@ -790,10 +796,11 @@ _changeChanged(change) { if (!change || !this._patchRange || !this._allPatchSets) { return; } - this.set('_patchRange.basePatchNum', - this._patchRange.basePatchNum || 'PARENT'); - this.set('_patchRange.patchNum', - this._patchRange.patchNum || + + const parent = this._getBasePatchNum(change, this._patchRange); + + this.set('_patchRange.basePatchNum', parent); + this.set('_patchRange.patchNum', this._patchRange.patchNum || this.computeLatestPatchNum(this._allPatchSets)); // Reset the related changes toggle in the event it was previously @@ -804,6 +811,35 @@ this.fire('title-change', {title}); }, + /** + * Gets base patch number, if is a parent try and + * decide from preference weather to default to `auto merge` + * or `Parent 1`. + * @param {Object} change + * @param {Object} patchRange + * @return {number|string} + */ + _getBasePatchNum(change, patchRange) { + if (patchRange.basePatchNum && + patchRange.basePatchNum !== 'PARENT') { + return patchRange.basePatchNum; + } + + const revisionInfo = this._getRevisionInfo(change); + if (!revisionInfo) return 'PARENT'; + + const parentCounts = revisionInfo.getParentCountMap(); + // check that there is at least 2 parents otherwise fall back to 1, + // which means there is only one parent. + const parentCount = parentCounts.hasOwnProperty(1) ? + parentCounts[1] : 1; + + const preferFirst = this._prefs && + this._prefs.default_base_for_merges === 'FIRST_PARENT'; + + return parentCount > 1 && preferFirst ? -1 : 'PARENT'; + }, + _computeChangeUrl(change) { return Gerrit.Nav.getUrlForChange(change); }, @@ -1057,6 +1093,10 @@ }); }, + _getPreferences() { + return this.$.restAPI.getPreferences(); + }, + _updateRebaseAction(revisionActions) { if (revisionActions && revisionActions.rebase) { revisionActions.rebase.rebaseOnCurrent = @@ -1110,9 +1150,12 @@ const detailCompletes = this.$.restAPI.getChangeDetail( this._changeNum, this._handleGetChangeDetailError.bind(this)); const editCompletes = this._getEdit(); + const prefCompletes = this._getPreferences(); + + return Promise.all([detailCompletes, editCompletes, prefCompletes]) + .then(([change, edit, prefs]) => { + this._prefs = prefs; - return Promise.all([detailCompletes, editCompletes]) - .then(([change, edit]) => { if (!change) { return ''; } @@ -1661,6 +1704,10 @@ e.detail.starred); }, + _getRevisionInfo(change) { + return new Gerrit.RevisionInfo(change); + }, + _computeCurrentRevision(currentRevision, revisions) { return revisions && revisions[currentRevision]; }, diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html index f6acef68a1..926895b1fb 100644 --- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html +++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html @@ -1580,8 +1580,8 @@ limitations under the License. }); test('_selectedRevision updates when patchNum is changed', () => { - const revision1 = {_number: 1, commit: {}}; - const revision2 = {_number: 2, commit: {}}; + const revision1 = {_number: 1, commit: {parents: []}}; + const revision2 = {_number: 2, commit: {parents: []}}; sandbox.stub(element.$.restAPI, 'getChangeDetail').returns( Promise.resolve({ revisions: { @@ -1594,6 +1594,7 @@ limitations under the License. change_id: 'loremipsumdolorsitamet', })); sandbox.stub(element, '_getEdit').returns(Promise.resolve()); + sandbox.stub(element, '_getPreferences').returns(Promise.resolve({})); element._patchRange = {patchNum: '2'}; return element._getChangeDetail().then(() => { assert.strictEqual(element._selectedRevision, revision2); |