Merge "Revert "Add mechanism for plugins to modify rest api calls""
This commit is contained in:
@@ -185,30 +185,6 @@ See list of supported link:pg-plugin-endpoints.html[endpoints].
|
|||||||
|
|
||||||
Note: TODO
|
Note: TODO
|
||||||
|
|
||||||
=== registerApiHook
|
|
||||||
`plugin.registerApiHook(apiEndpointName, addParameterFunction)`
|
|
||||||
|
|
||||||
Registers a rest api hook to add plugin params to core rest api calls.
|
|
||||||
The addParameterFunction only needs to return plugin specific params, not the
|
|
||||||
entire params object.
|
|
||||||
|
|
||||||
Supported endpoints are `changes` and `change`.
|
|
||||||
|
|
||||||
```
|
|
||||||
Gerrit.install('my-plugin-name', plugin => {
|
|
||||||
plugin.restApiHooks().registerRestApiParams('changes', params => {
|
|
||||||
return 'my-plugin-option';
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// will update the changes query params to be:
|
|
||||||
|
|
||||||
{
|
|
||||||
// existing changes params
|
|
||||||
'my-plugin-name': 'my-plugin-option',
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
=== registerStyleModule
|
=== registerStyleModule
|
||||||
`plugin.registerStyleModule(endpointName, moduleName)`
|
`plugin.registerStyleModule(endpointName, moduleName)`
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,5 @@ limitations under the License.
|
|||||||
<script src="gr-plugin-endpoints.js"></script>
|
<script src="gr-plugin-endpoints.js"></script>
|
||||||
<script src="gr-plugin-action-context.js"></script>
|
<script src="gr-plugin-action-context.js"></script>
|
||||||
<script src="gr-plugin-rest-api.js"></script>
|
<script src="gr-plugin-rest-api.js"></script>
|
||||||
<script src="gr-rest-api-hooks.js"></script>
|
|
||||||
<script src="gr-public-js-api.js"></script>
|
<script src="gr-public-js-api.js"></script>
|
||||||
</dom-module>
|
</dom-module>
|
||||||
|
|||||||
@@ -319,10 +319,6 @@
|
|||||||
return new GrSettingsApi(this);
|
return new GrSettingsApi(this);
|
||||||
};
|
};
|
||||||
|
|
||||||
Plugin.prototype.restApiHooks = function() {
|
|
||||||
return new GrRestApiHooks(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To make REST requests for plugin-provided endpoints, use
|
* To make REST requests for plugin-provided endpoints, use
|
||||||
* @example
|
* @example
|
||||||
@@ -630,12 +626,6 @@
|
|||||||
return _allPluginsPromise;
|
return _allPluginsPromise;
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: Remove this. This is a hack to get the tests to pass.
|
|
||||||
// It would be much better to call GrRestApiHooks.pluginParams directly.
|
|
||||||
Gerrit._pluginParams = function(endpointName, initialParams) {
|
|
||||||
return GrRestApiHooks.pluginParams(endpointName, initialParams);
|
|
||||||
};
|
|
||||||
|
|
||||||
Gerrit._pluginLoadingTimeout = function() {
|
Gerrit._pluginLoadingTimeout = function() {
|
||||||
console.error(`Failed to load plugins: ${Object.keys(_pluginsPending)}`);
|
console.error(`Failed to load plugins: ${Object.keys(_pluginsPending)}`);
|
||||||
Gerrit._setPluginsPending([]);
|
Gerrit._setPluginsPending([]);
|
||||||
|
|||||||
@@ -1,92 +0,0 @@
|
|||||||
/**
|
|
||||||
* @license
|
|
||||||
* Copyright (C) 2019 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.
|
|
||||||
*/
|
|
||||||
(function() {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
// Prevent redefinition.
|
|
||||||
if (window.GrRestApiHooks) { return; }
|
|
||||||
|
|
||||||
// Stores a map of endpointNames and api instances to add parameters to
|
|
||||||
// REST API calls.
|
|
||||||
const _apiInstances = {};
|
|
||||||
|
|
||||||
function GrRestApiHooks(plugin) {
|
|
||||||
this.plugin = plugin;
|
|
||||||
// Stores a map of endpointNames and functions to add parameters to REST API
|
|
||||||
// calls.
|
|
||||||
this._addParameterFunctions = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers an api hook for a particular api endpoint.
|
|
||||||
* This is called by a plugin.
|
|
||||||
*
|
|
||||||
* @param {string} endpointName the name of the endpoint.
|
|
||||||
* @param {Function} addParameterFunction the function that returns params
|
|
||||||
* for the plugin. Takes in current params.
|
|
||||||
*/
|
|
||||||
GrRestApiHooks.prototype.registerRestApiParams = function(endpointName,
|
|
||||||
addParameterFunction) {
|
|
||||||
if (this._addParameterFunctions[endpointName]) {
|
|
||||||
console.warn(`Rewriting rest api parameter function for
|
|
||||||
${this.plugin.getPluginName()}`);
|
|
||||||
}
|
|
||||||
this._addParameterFunctions[endpointName] = addParameterFunction;
|
|
||||||
if (!_apiInstances[endpointName]) {
|
|
||||||
_apiInstances[endpointName] = [];
|
|
||||||
}
|
|
||||||
_apiInstances[endpointName].push(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns params for a registered api hook for a particular api endpoint or
|
|
||||||
* null.
|
|
||||||
* This is called by the application, not the plugin.
|
|
||||||
* It will either return params or null if there are no params.
|
|
||||||
* @param {string} endpointName the name of the endpoint.
|
|
||||||
* @param {!Object} initialParams the params of the rest api call.
|
|
||||||
*/
|
|
||||||
GrRestApiHooks.prototype._getRestApiParams = function(endpointName,
|
|
||||||
initialParams) {
|
|
||||||
const addParameterFunction = this._addParameterFunctions[endpointName];
|
|
||||||
if (!addParameterFunction) return null;
|
|
||||||
return addParameterFunction(initialParams);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the params for a particular mutation endpoint.
|
|
||||||
*
|
|
||||||
* This is called by the application and should not be called by plugins.
|
|
||||||
*
|
|
||||||
* @param {string} endpointName the name of the endpoint.
|
|
||||||
* @param {!Object} initialParams the params of the rest api call.
|
|
||||||
* @return new parameters to add to a REST API call.
|
|
||||||
*/
|
|
||||||
GrRestApiHooks.pluginParams = function(endpointName, initialParams) {
|
|
||||||
return (_apiInstances[endpointName] || []).reduce((accum, apiInstance) => {
|
|
||||||
const pluginParams = apiInstance._getRestApiParams(
|
|
||||||
endpointName, initialParams);
|
|
||||||
if (pluginParams) {
|
|
||||||
accum[apiInstance.plugin.getPluginName()] =
|
|
||||||
JSON.stringify(pluginParams);
|
|
||||||
}
|
|
||||||
return accum;
|
|
||||||
}, {});
|
|
||||||
};
|
|
||||||
|
|
||||||
window.GrRestApiHooks = GrRestApiHooks;
|
|
||||||
})(window);
|
|
||||||
@@ -30,8 +30,5 @@ limitations under the License.
|
|||||||
<!-- NB: Order is important, because of namespaced classes. -->
|
<!-- NB: Order is important, because of namespaced classes. -->
|
||||||
<script src="gr-auth.js"></script>
|
<script src="gr-auth.js"></script>
|
||||||
<script src="gr-reviewer-updates-parser.js"></script>
|
<script src="gr-reviewer-updates-parser.js"></script>
|
||||||
<script src="../gr-js-api-interface/gr-plugin-endpoints.js"></script>
|
|
||||||
<script src="../gr-js-api-interface/gr-rest-api-hooks.js"></script>
|
|
||||||
<script src="../gr-js-api-interface/gr-public-js-api.js"></script>
|
|
||||||
<script src="gr-rest-api-interface.js"></script>
|
<script src="gr-rest-api-interface.js"></script>
|
||||||
</dom-module>
|
</dom-module>
|
||||||
|
|||||||
@@ -1246,7 +1246,6 @@
|
|||||||
* changeInfos.
|
* changeInfos.
|
||||||
*/
|
*/
|
||||||
getChanges(opt_changesPerPage, opt_query, opt_offset, opt_options) {
|
getChanges(opt_changesPerPage, opt_query, opt_offset, opt_options) {
|
||||||
return Gerrit.awaitPluginsLoaded().then(() => {
|
|
||||||
const options = opt_options || this.listChangesOptionsToHex(
|
const options = opt_options || this.listChangesOptionsToHex(
|
||||||
this.ListChangesOption.LABELS,
|
this.ListChangesOption.LABELS,
|
||||||
this.ListChangesOption.DETAILED_ACCOUNTS
|
this.ListChangesOption.DETAILED_ACCOUNTS
|
||||||
@@ -1268,7 +1267,6 @@
|
|||||||
this._maybeInsertInLookup(change);
|
this._maybeInsertInLookup(change);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Object.assign(params, Gerrit._pluginParams('changes', params));
|
|
||||||
const req = {
|
const req = {
|
||||||
url: '/changes/',
|
url: '/changes/',
|
||||||
params,
|
params,
|
||||||
@@ -1291,7 +1289,6 @@
|
|||||||
}
|
}
|
||||||
return response;
|
return response;
|
||||||
});
|
});
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1371,15 +1368,9 @@
|
|||||||
* @param {function()=} opt_cancelCondition
|
* @param {function()=} opt_cancelCondition
|
||||||
*/
|
*/
|
||||||
_getChangeDetail(changeNum, optionsHex, opt_errFn, opt_cancelCondition) {
|
_getChangeDetail(changeNum, optionsHex, opt_errFn, opt_cancelCondition) {
|
||||||
return Promise.all([
|
return this.getChangeActionURL(changeNum, null, '/detail').then(url => {
|
||||||
Gerrit.awaitPluginsLoaded(),
|
|
||||||
this.getChangeActionURL(changeNum, null, '/detail'),
|
|
||||||
]).then(([_, url]) => {
|
|
||||||
const urlWithParams = this._urlWithParams(url, optionsHex);
|
const urlWithParams = this._urlWithParams(url, optionsHex);
|
||||||
|
|
||||||
const params = {O: optionsHex};
|
const params = {O: optionsHex};
|
||||||
Object.assign(params, Gerrit._pluginParams('change', params));
|
|
||||||
|
|
||||||
const req = {
|
const req = {
|
||||||
url,
|
url,
|
||||||
errFn: opt_errFn,
|
errFn: opt_errFn,
|
||||||
|
|||||||
@@ -55,8 +55,6 @@ limitations under the License.
|
|||||||
return Promise.resolve(testJSON);
|
return Promise.resolve(testJSON);
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
sandbox.stub(Gerrit, 'awaitPluginsLoaded').returns(
|
|
||||||
Promise.resolve(true));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
teardown(() => {
|
teardown(() => {
|
||||||
@@ -524,13 +522,11 @@ limitations under the License.
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('legacy n,z key in change url is replaced', done => {
|
test('legacy n,z key in change url is replaced', () => {
|
||||||
const stub = sandbox.stub(element, '_fetchJSON')
|
const stub = sandbox.stub(element, '_fetchJSON')
|
||||||
.returns(Promise.resolve([]));
|
.returns(Promise.resolve([]));
|
||||||
element.getChanges(1, null, 'n,z').then(() => {
|
element.getChanges(1, null, 'n,z');
|
||||||
assert.equal(stub.lastCall.args[0].params.S, 0);
|
assert.equal(stub.lastCall.args[0].params.S, 0);
|
||||||
done();
|
|
||||||
}, done);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('saveDiffPreferences invalidates cache line', () => {
|
test('saveDiffPreferences invalidates cache line', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user