Merge branch 'stable-3.0'

* stable-3.0:
  ReceiveCommits: Don't instantiate BranchCommitValidator repeatedly
  ElasticVersionTest: Add missing version 7.1 asserts
  ElasticVersionTest: Improve test method ordering
  ElasticVersionTest: Make test method names accurate
  Upgrade gitiles to 0.2-10
  PermissionRange: Interpret allowMin > allowMax as disallow
  Fix formatting issue in project config documentation
  ReceiveCommits: Validate ref operation before commits for non-ff case
  Add test coverage for ref operation validation extension point
  Allow CommitValidationListener to ignore 'skip validation' push option
  Upgrade JGit to 4.11.8.201904181247-r
  CreateProject: Expose createProject method
  ElasticContainer: Switch to Alpine-based images from blacktop
  DeleteVote.soy: Make wording consistent with DeleteVoteHtml.soy
  DeleteVote.soy add missing review URL
  Update git submodules
  NewChange.soy: add missing closing parenthesis
  Remove use of "NoteDB" config in PolyGerrit
  Always show "NoteDB" config under gr-repo
  Fix hiding "enable signed push" and "require signed push" under gr-repo
  Update git submodules
  gerrit.sh: Fix message about JRE
  Allow CommitValidationListener to ignore 'skip validation' push option
  ChangeEmail: Stop using deprecated SoyListData and SoyMapData
  IndexServlet: Stop using deprecated SoyMapData
  Bazel: Fix lint warning flagged by buildifier

Change-Id: Icadfa2bb77929e0aa5118ea8492fdb24e0e9aa7e
This commit is contained in:
Marco Miller
2019-06-27 12:51:40 -04:00
35 changed files with 476 additions and 258 deletions

View File

@@ -46,10 +46,10 @@ limitations under the License.
#loading:not(.loading) {
display: none;
}
.repositorySettings {
#options .repositorySettings {
display: none;
}
.repositorySettings.showConfig {
#options .repositorySettings.showConfig {
display: block;
}
</style>
@@ -219,7 +219,7 @@ limitations under the License.
</gr-select>
</span>
</section>
<section id="noteDbSettings" class$="repositorySettings [[_computeRepositoriesClass(_noteDbEnabled)]]">
<section>
<span class="title">
Enable adding unregistered users as reviewers and CCs on changes</span>
<span class="value">

View File

@@ -107,10 +107,6 @@
},
_selectedScheme: String,
_schemesObj: Object,
_noteDbEnabled: {
type: Boolean,
value: false,
},
},
observers: [
@@ -177,7 +173,6 @@
if (!config) { return Promise.resolve(); }
this._schemesObj = config.download.schemes;
this._noteDbEnabled = !!config.note_db_enabled;
}));
return Promise.all(promises);

View File

@@ -316,17 +316,6 @@ limitations under the License.
});
test('fields update and save correctly', () => {
// test notedb
element._noteDbEnabled = false;
assert.equal(
element._computeRepositoriesClass(element._noteDbEnabled), '');
element._noteDbEnabled = true;
assert.equal(element._computeRepositoriesClass(
element._noteDbEnabled), 'showConfig');
const configInputObj = {
description: 'new description',
use_contributor_agreements: 'TRUE',

View File

@@ -85,9 +85,6 @@ limitations under the License.
getLoggedIn() { return Promise.resolve(false); },
deleteVote() { return Promise.resolve({ok: true}); },
});
stub('gr-change-metadata', {
_computeShowReviewersByState() { return true; },
});
});
teardown(() => {

View File

@@ -200,38 +200,26 @@ limitations under the License.
allow-any-user></gr-account-list>
</span>
</section>
<template is="dom-if" if="[[_showReviewersByState]]">
<section>
<span class="title">Reviewers</span>
<span class="value">
<gr-reviewer-list
change="{{change}}"
mutable="[[_mutable]]"
reviewers-only
max-reviewers-displayed="3"></gr-reviewer-list>
</span>
</section>
<section>
<span class="title">CC</span>
<span class="value">
<gr-reviewer-list
change="{{change}}"
mutable="[[_mutable]]"
ccs-only
max-reviewers-displayed="3"></gr-reviewer-list>
</span>
</section>
</template>
<template is="dom-if" if="[[!_showReviewersByState]]">
<section>
<span class="title">Reviewers</span>
<span class="value">
<gr-reviewer-list
change="{{change}}"
mutable="[[_mutable]]"></gr-reviewer-list>
</span>
</section>
</template>
<section>
<span class="title">Reviewers</span>
<span class="value">
<gr-reviewer-list
change="{{change}}"
mutable="[[_mutable]]"
reviewers-only
max-reviewers-displayed="3"></gr-reviewer-list>
</span>
</section>
<section>
<span class="title">CC</span>
<span class="value">
<gr-reviewer-list
change="{{change}}"
mutable="[[_mutable]]"
ccs-only
max-reviewers-displayed="3"></gr-reviewer-list>
</span>
</section>
<section>
<span class="title">Repo</span>
<span class="value">
@@ -299,31 +287,29 @@ limitations under the License.
<span class="title">Strategy</span>
<span class="value">[[_computeStrategy(change)]]</span>
</section>
<template is="dom-if" if="[[serverConfig.note_db_enabled]]">
<section class="hashtag">
<span class="title">Hashtags</span>
<span class="value">
<template is="dom-repeat" items="[[change.hashtags]]">
<gr-linked-chip
class="hashtagChip"
text="[[item]]"
href="[[_computeHashtagURL(item)]]"
removable="[[!_hashtagReadOnly]]"
on-remove="_handleHashtagRemoved">
</gr-linked-chip>
</template>
<template is="dom-if" if="[[!_hashtagReadOnly]]">
<gr-editable-label
uppercase
label-text="Add a hashtag"
value="{{_newHashtag}}"
placeholder="[[_computeHashtagPlaceholder(_hashtagReadOnly)]]"
read-only="[[_hashtagReadOnly]]"
on-changed="_handleHashtagChanged"></gr-editable-label>
</template>
</span>
</section>
</template>
<section class="hashtag">
<span class="title">Hashtags</span>
<span class="value">
<template is="dom-repeat" items="[[change.hashtags]]">
<gr-linked-chip
class="hashtagChip"
text="[[item]]"
href="[[_computeHashtagURL(item)]]"
removable="[[!_hashtagReadOnly]]"
on-remove="_handleHashtagRemoved">
</gr-linked-chip>
</template>
<template is="dom-if" if="[[!_hashtagReadOnly]]">
<gr-editable-label
uppercase
label-text="Add a hashtag"
value="{{_newHashtag}}"
placeholder="[[_computeHashtagPlaceholder(_hashtagReadOnly)]]"
read-only="[[_hashtagReadOnly]]"
on-changed="_handleHashtagChanged"></gr-editable-label>
</template>
</span>
</section>
<div class="separatedSection">
<gr-change-requirements
change="{{change}}"

View File

@@ -84,9 +84,7 @@
type: Boolean,
computed: '_computeIsMutable(account)',
},
/**
* @type {{ note_db_enabled: string }}
*/
/** @type {?} */
serverConfig: Object,
parentIsCurrent: Boolean,
_notCurrentMessage: {
@@ -102,10 +100,6 @@
type: Boolean,
computed: '_computeHashtagReadOnly(_mutable, change)',
},
_showReviewersByState: {
type: Boolean,
computed: '_computeShowReviewersByState(serverConfig)',
},
/**
* @type {Defs.PushCertificateValidation}
*/
@@ -283,10 +277,6 @@
return _hashtagReadOnly ? '' : HASHTAG_ADD_MESSAGE;
},
_computeShowReviewersByState(serverConfig) {
return !!serverConfig.note_db_enabled;
},
_computeShowRequirements(change) {
if (change.status !== this.ChangeStatus.NEW) {
// TODO(maximeg) change this to display the stored

View File

@@ -119,18 +119,6 @@ limitations under the License.
assert.isTrue(element.$$('.strategy').hasAttribute('hidden'));
});
test('show CC section when NoteDb enabled', () => {
function hasCc() {
return element._showReviewersByState;
}
element.serverConfig = {};
assert.isFalse(hasCc());
element.serverConfig = {note_db_enabled: true};
assert.isTrue(hasCc());
});
test('weblinks use Gerrit.Nav interface', () => {
const weblinksStub = sandbox.stub(Gerrit.Nav, '_generateWeblinks')
.returns([{name: 'stubb', url: '#s'}]);
@@ -552,9 +540,6 @@ limitations under the License.
});
test('_computeHashtagReadOnly', () => {
element.serverConfig = {
note_db_enabled: true,
};
flushAsynchronousOperations();
let mutable = false;
assert.isTrue(element._computeHashtagReadOnly(mutable, change));
@@ -567,9 +552,6 @@ limitations under the License.
});
test('hashtag read only hides delete button', () => {
element.serverConfig = {
note_db_enabled: true,
};
flushAsynchronousOperations();
element.account = {};
element.change = change;
@@ -579,9 +561,6 @@ limitations under the License.
});
test('hashtag not read only does not hide delete button', () => {
element.serverConfig = {
note_db_enabled: true,
};
flushAsynchronousOperations();
element.account = {test: true};
change.actions.hashtags.enabled = true;
@@ -703,9 +682,6 @@ limitations under the License.
});
test('changing hashtag', () => {
element.serverConfig = {
note_db_enabled: true,
};
flushAsynchronousOperations();
element._newHashtag = 'new hashtag';
const newHashtag = ['new hashtag'];

View File

@@ -673,7 +673,6 @@ limitations under the License.
patch-num="[[computeLatestPatchNum(_allPatchSets)]]"
permitted-labels="[[_change.permitted_labels]]"
diff-drafts="[[_diffDrafts]]"
server-config="[[_serverConfig]]"
project-config="[[_projectConfig]]"
can-be-started="[[_canStartReview]]"
on-send="_handleReplySent"

View File

@@ -88,7 +88,6 @@ limitations under the License.
'+1',
],
};
element.serverConfig = {note_db_enabled: true};
sandbox.stub(element, 'fetchChangeUpdates')
.returns(Promise.resolve({isLatest: true}));
};

View File

@@ -171,21 +171,19 @@ limitations under the License.
on-account-text-changed="_handleAccountTextEntry">
</gr-account-list>
</div>
<template is="dom-if" if="[[serverConfig.note_db_enabled]]">
<div class="peopleList">
<div class="peopleListLabel">CC</div>
<gr-account-list
id="ccs"
accounts="{{_ccs}}"
change="[[change]]"
filter="[[filterCCSuggestion]]"
pending-confirmation="{{_ccPendingConfirmation}}"
allow-any-input
placeholder="Add CC..."
on-account-text-changed="_handleAccountTextEntry">
</gr-account-list>
</div>
</template>
<div class="peopleList">
<div class="peopleListLabel">CC</div>
<gr-account-list
id="ccs"
accounts="{{_ccs}}"
change="[[change]]"
filter="[[filterCCSuggestion]]"
pending-confirmation="{{_ccPendingConfirmation}}"
allow-any-input
placeholder="Add CC..."
on-account-text-changed="_handleAccountTextEntry">
</gr-account-list>
</div>
<gr-overlay
id="reviewerConfirmationOverlay"
on-iron-overlay-canceled="_cancelPendingReviewer">

View File

@@ -141,10 +141,6 @@
},
},
permittedLabels: Object,
/**
* @type {{ note_db_enabled: boolean }}
*/
serverConfig: Object,
/**
* @type {{ commentlinks: Array }}
*/
@@ -195,10 +191,6 @@
type: String,
computed: '_computeSendButtonLabel(canBeStarted)',
},
_ccsEnabled: {
type: Boolean,
computed: '_computeCCsEnabled(serverConfig)',
},
_savingComments: Boolean,
_reviewersMutated: {
type: Boolean,
@@ -245,7 +237,7 @@
},
observers: [
'_changeUpdated(change.reviewers.*, change.owner, serverConfig)',
'_changeUpdated(change.reviewers.*, change.owner)',
'_ccsChanged(_ccs.splices)',
'_reviewersChanged(_reviewers.splices)',
],
@@ -629,14 +621,14 @@
'Say something nice...';
},
_changeUpdated(changeRecord, owner, serverConfig) {
this._rebuildReviewerArrays(changeRecord.base, owner, serverConfig);
_changeUpdated(changeRecord, owner) {
this._rebuildReviewerArrays(changeRecord.base, owner);
},
_rebuildReviewerArrays(change, owner, serverConfig) {
_rebuildReviewerArrays(change, owner) {
this._owner = owner;
let reviewers = [];
const reviewers = [];
const ccs = [];
for (const key in change) {
@@ -661,12 +653,7 @@
}
}
if (this._ccsEnabled) {
this._ccs = ccs;
} else {
this._ccs = [];
reviewers = reviewers.concat(ccs);
}
this._ccs = ccs;
this._reviewers = reviewers;
},
@@ -719,13 +706,12 @@
this.fire('cancel', null, {bubbles: false});
this.$.textarea.closeDropdown();
this._purgeReviewersPendingRemove(true);
this._rebuildReviewerArrays(this.change.reviewers, this._owner,
this.serverConfig);
this._rebuildReviewerArrays(this.change.reviewers, this._owner);
},
_saveTapHandler(e) {
e.preventDefault();
if (this._ccsEnabled && !this.$$('#ccs').submitEntryText()) {
if (!this.$$('#ccs').submitEntryText()) {
// Do not proceed with the save if there is an invalid email entry in
// the text field of the CC entry.
return;
@@ -741,7 +727,7 @@
},
_submit() {
if (this._ccsEnabled && !this.$$('#ccs').submitEntryText()) {
if (!this.$$('#ccs').submitEntryText()) {
// Do not proceed with the send if there is an invalid email entry in
// the text field of the CC entry.
return;
@@ -863,10 +849,6 @@
return canBeStarted ? ButtonTooltips.START_REVIEW : ButtonTooltips.SEND;
},
_computeCCsEnabled(serverConfig) {
return serverConfig && serverConfig.note_db_enabled;
},
_computeSavingLabelClass(savingComments) {
return savingComments ? 'saving' : '';
},

View File

@@ -99,7 +99,6 @@ limitations under the License.
'+1',
],
};
element.serverConfig = {};
getDraftCommentStub = sandbox.stub(element.$.storage, 'getDraftComment');
setDraftCommentStub = sandbox.stub(element.$.storage, 'setDraftComment');
@@ -298,7 +297,6 @@ limitations under the License.
const noButton =
element.$$('.reviewerConfirmationButtons gr-button:last-child');
element.serverConfig = {note_db_enabled: true};
element._ccPendingConfirmation = null;
element._reviewerPendingConfirmation = null;
flushAsynchronousOperations();
@@ -411,7 +409,6 @@ limitations under the License.
});
test('_reviewersMutated when account-text-change is fired from ccs', () => {
element.serverConfig = {note_db_enabled: true};
flushAsynchronousOperations();
assert.isFalse(element._reviewersMutated);
assert.isTrue(element.$$('#ccs').allowAnyInput);
@@ -498,19 +495,6 @@ limitations under the License.
flush(() => { element.send(); });
});
test('ccs are displayed if NoteDb is enabled', () => {
function hasCc() {
flushAsynchronousOperations();
return !!element.$$('#ccs');
}
element.serverConfig = {};
assert.isFalse(hasCc());
element.serverConfig = {note_db_enabled: true};
assert.isTrue(hasCc());
});
test('filterReviewerSuggestion', () => {
const owner = makeAccount();
const reviewer1 = makeAccount();
@@ -542,7 +526,6 @@ limitations under the License.
test('_focusOn', () => {
sandbox.spy(element, '_chooseFocusTarget');
element.serverConfig = {note_db_enabled: true};
flushAsynchronousOperations();
const textareaStub = sandbox.stub(element.$.textarea, 'async');
const reviewerEntryStub = sandbox.stub(element.$.reviewers.focusStart,
@@ -682,7 +665,6 @@ limitations under the License.
});
test('moving from cc to reviewer', () => {
element.serverConfig = {note_db_enabled: true};
element._reviewersPendingRemove = {
CC: [],
REVIEWER: [],
@@ -716,7 +698,6 @@ limitations under the License.
});
test('migrate reviewers between states', done => {
element.serverConfig = {note_db_enabled: true};
element._reviewersPendingRemove = {
CC: [],
REVIEWER: [],