blob: 59eb805e700ebf2eda77f4f02a5ca1a1cdb0373b [file] [log] [blame]
/**
* @license
* Copyright (C) 2018 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';
const COMMIT_COMMAND = 'git add . && git commit --amend --no-edit';
const PUSH_COMMAND_PREFIX = 'git push origin HEAD:refs/for/';
// Command names correspond to download plugin definitions.
const PREFERRED_FETCH_COMMAND_ORDER = [
'checkout',
'cherry pick',
'pull',
];
Polymer({
is: 'gr-upload-help-dialog',
_legacyUndefinedCheck: true,
/**
* Fired when the user presses the close button.
*
* @event close
*/
properties: {
revision: Object,
targetBranch: String,
_commitCommand: {
type: String,
value: COMMIT_COMMAND,
readOnly: true,
},
_fetchCommand: {
type: String,
computed: '_computeFetchCommand(revision, ' +
'_preferredDownloadCommand, _preferredDownloadScheme)',
},
_preferredDownloadCommand: String,
_preferredDownloadScheme: String,
_pushCommand: {
type: String,
computed: '_computePushCommand(targetBranch)',
},
},
behaviors: [
Gerrit.FireBehavior,
],
attached() {
this.$.restAPI.getLoggedIn().then(loggedIn => {
if (loggedIn) {
return this.$.restAPI.getPreferences();
}
}).then(prefs => {
if (prefs) {
this._preferredDownloadCommand = prefs.download_command;
this._preferredDownloadScheme = prefs.download_scheme;
}
});
},
_handleCloseTap(e) {
e.preventDefault();
e.stopPropagation();
this.fire('close', null, {bubbles: false});
},
_computeFetchCommand(revision, preferredDownloadCommand,
preferredDownloadScheme) {
// Polymer 2: check for undefined
if ([
revision,
preferredDownloadCommand,
preferredDownloadScheme,
].some(arg => arg === undefined)) {
return undefined;
}
if (!revision) { return; }
if (!revision || !revision.fetch) { return; }
let scheme = preferredDownloadScheme;
if (!scheme) {
const keys = Object.keys(revision.fetch).sort();
if (keys.length === 0) {
return;
}
scheme = keys[0];
}
if (!revision.fetch[scheme] || !revision.fetch[scheme].commands) {
return;
}
const cmds = {};
Object.entries(revision.fetch[scheme].commands).forEach(([key, cmd]) => {
cmds[key.toLowerCase()] = cmd;
});
if (preferredDownloadCommand &&
cmds[preferredDownloadCommand.toLowerCase()]) {
return cmds[preferredDownloadCommand.toLowerCase()];
}
// If no supported command preference is given, look for known commands
// from the downloads plugin in order of preference.
for (let i = 0; i < PREFERRED_FETCH_COMMAND_ORDER.length; i++) {
if (cmds[PREFERRED_FETCH_COMMAND_ORDER[i]]) {
return cmds[PREFERRED_FETCH_COMMAND_ORDER[i]];
}
}
return undefined;
},
_computePushCommand(targetBranch) {
return PUSH_COMMAND_PREFIX + targetBranch;
},
});
})();