Line data Source code
1 : // Copyright (C) 2014 The Android Open Source Project 2 : // 3 : // Licensed under the Apache License, Version 2.0 (the "License"); 4 : // you may not use this file except in compliance with the License. 5 : // You may obtain a copy of the License at 6 : // 7 : // http://www.apache.org/licenses/LICENSE-2.0 8 : // 9 : // Unless required by applicable law or agreed to in writing, software 10 : // distributed under the License is distributed on an "AS IS" BASIS, 11 : // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 : // See the License for the specific language governing permissions and 13 : // limitations under the License. 14 : 15 : package com.google.gerrit.server.edit; 16 : 17 : import com.google.gerrit.extensions.common.CommitInfo; 18 : import com.google.gerrit.extensions.common.EditInfo; 19 : import com.google.gerrit.extensions.common.FetchInfo; 20 : import com.google.gerrit.extensions.config.DownloadCommand; 21 : import com.google.gerrit.extensions.config.DownloadScheme; 22 : import com.google.gerrit.extensions.registration.DynamicMap; 23 : import com.google.gerrit.extensions.registration.Extension; 24 : import com.google.gerrit.server.CommonConverters; 25 : import com.google.gerrit.server.CurrentUser; 26 : import com.google.gerrit.server.change.DownloadCommandsJson; 27 : import com.google.inject.Inject; 28 : import com.google.inject.Provider; 29 : import com.google.inject.Singleton; 30 : import java.util.ArrayList; 31 : import java.util.LinkedHashMap; 32 : import java.util.Map; 33 : import org.eclipse.jgit.revwalk.RevCommit; 34 : 35 : @Singleton 36 : public class ChangeEditJson { 37 : private final DynamicMap<DownloadCommand> downloadCommands; 38 : private final DynamicMap<DownloadScheme> downloadSchemes; 39 : private final Provider<CurrentUser> userProvider; 40 : 41 : @Inject 42 : ChangeEditJson( 43 : DynamicMap<DownloadCommand> downloadCommand, 44 : DynamicMap<DownloadScheme> downloadSchemes, 45 145 : Provider<CurrentUser> userProvider) { 46 145 : this.downloadCommands = downloadCommand; 47 145 : this.downloadSchemes = downloadSchemes; 48 145 : this.userProvider = userProvider; 49 145 : } 50 : 51 : public EditInfo toEditInfo(ChangeEdit edit, boolean downloadCommands) { 52 9 : EditInfo out = new EditInfo(); 53 9 : out.commit = fillCommit(edit.getEditCommit()); 54 9 : out.baseRevision = edit.getBasePatchSet().commitId().name(); 55 9 : out.basePatchSetNumber = edit.getBasePatchSet().number(); 56 9 : out.ref = edit.getRefName(); 57 9 : if (downloadCommands) { 58 0 : out.fetch = fillFetchMap(edit); 59 : } 60 9 : return out; 61 : } 62 : 63 : private static CommitInfo fillCommit(RevCommit editCommit) { 64 9 : CommitInfo commit = new CommitInfo(); 65 9 : commit.commit = editCommit.toObjectId().getName(); 66 9 : commit.author = CommonConverters.toGitPerson(editCommit.getAuthorIdent()); 67 9 : commit.committer = CommonConverters.toGitPerson(editCommit.getCommitterIdent()); 68 9 : commit.subject = editCommit.getShortMessage(); 69 9 : commit.message = editCommit.getFullMessage(); 70 : 71 9 : commit.parents = new ArrayList<>(editCommit.getParentCount()); 72 9 : for (RevCommit p : editCommit.getParents()) { 73 9 : CommitInfo i = new CommitInfo(); 74 9 : i.commit = p.name(); 75 9 : commit.parents.add(i); 76 : } 77 : 78 9 : return commit; 79 : } 80 : 81 : private Map<String, FetchInfo> fillFetchMap(ChangeEdit edit) { 82 0 : Map<String, FetchInfo> r = new LinkedHashMap<>(); 83 0 : for (Extension<DownloadScheme> e : downloadSchemes) { 84 0 : String schemeName = e.getExportName(); 85 0 : DownloadScheme scheme = e.getProvider().get(); 86 0 : if (!scheme.isEnabled() 87 0 : || (scheme.isAuthRequired() && !userProvider.get().isIdentifiedUser())) { 88 0 : continue; 89 : } 90 : 91 : // No fluff, just stuff 92 0 : if (!scheme.isAuthSupported()) { 93 0 : continue; 94 : } 95 : 96 0 : String projectName = edit.getChange().getProject().get(); 97 0 : String refName = edit.getRefName(); 98 0 : FetchInfo fetchInfo = new FetchInfo(scheme.getUrl(projectName), refName); 99 0 : r.put(schemeName, fetchInfo); 100 : 101 0 : DownloadCommandsJson.populateFetchMap( 102 : scheme, downloadCommands, projectName, refName, fetchInfo); 103 0 : } 104 : 105 0 : return r; 106 : } 107 : }