
There's no guarantee that the first web_link returned by the server is meant to be used as a link to the commit. This change hard codes support for two straightforward types of web links for commits (gitweb and gitiles). Bug: Issue 4266 Change-Id: I725a10d7e8ecaa6ef7b6f19d50854b0ca46a71d6
99 lines
2.8 KiB
JavaScript
99 lines
2.8 KiB
JavaScript
// Copyright (C) 2016 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';
|
|
|
|
Polymer({
|
|
is: 'gr-commit-info',
|
|
|
|
properties: {
|
|
change: Object,
|
|
commitInfo: Object,
|
|
serverConfig: Object,
|
|
_showWebLink: {
|
|
type: Boolean,
|
|
computed: '_computeShowWebLink(change, commitInfo, serverConfig)',
|
|
},
|
|
_webLink: {
|
|
type: String,
|
|
computed: '_computeWebLink(change, commitInfo, serverConfig)',
|
|
},
|
|
},
|
|
|
|
_isWebLink: function(link) {
|
|
// This is a whitelist of web link types that provide direct links to
|
|
// the commit in the url property.
|
|
return link.name === 'gitiles' || link.name === 'gitweb';
|
|
},
|
|
|
|
_computeShowWebLink: function(change, commitInfo, serverConfig) {
|
|
if (serverConfig.gitweb && serverConfig.gitweb.url &&
|
|
serverConfig.gitweb.type && serverConfig.gitweb.type.revision) {
|
|
return true;
|
|
}
|
|
|
|
if (!commitInfo.web_links) {
|
|
return false;
|
|
}
|
|
|
|
for (var i = 0; i < commitInfo.web_links.length; i++) {
|
|
if (this._isWebLink(commitInfo.web_links[i])) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
},
|
|
|
|
_computeWebLink: function(change, commitInfo, serverConfig) {
|
|
if (!this._computeShowWebLink(change, commitInfo, serverConfig)) {
|
|
return;
|
|
}
|
|
|
|
if (serverConfig.gitweb && serverConfig.gitweb.url &&
|
|
serverConfig.gitweb.type && serverConfig.gitweb.type.revision) {
|
|
return serverConfig.gitweb.url +
|
|
serverConfig.gitweb.type.revision
|
|
.replace('${project}', change.project)
|
|
.replace('${commit}', commitInfo.commit);
|
|
}
|
|
|
|
var webLink = null;
|
|
for (var i = 0; i < commitInfo.web_links.length; i++) {
|
|
if (this._isWebLink(commitInfo.web_links[i])) {
|
|
webLink = commitInfo.web_links[i].url;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!webLink) {
|
|
return;
|
|
}
|
|
|
|
if (!/^https?\:\/\//.test(webLink)) {
|
|
webLink = '../../' + webLink;
|
|
}
|
|
|
|
return webLink;
|
|
},
|
|
|
|
_computeShortHash: function(commitInfo) {
|
|
if (!commitInfo || !commitInfo.commit) {
|
|
return;
|
|
}
|
|
return commitInfo.commit.slice(0, 7);
|
|
},
|
|
});
|
|
})();
|