Output full commit message in query results
If the user adds a flag to the query parameters, include the full commit message in the result data. This is helpful when verifying commit messages and with similar tasks. Change-Id: Iff93bfebfa0c5e2209be29fe60ae12809a76479a
This commit is contained in:
@@ -14,6 +14,7 @@ SYNOPSIS
|
||||
[--patch-sets | --all-approvals]
|
||||
[--files]
|
||||
[--comments]
|
||||
[--commit-message]
|
||||
[--]
|
||||
<query>
|
||||
[limit:<n>]
|
||||
@@ -69,6 +70,9 @@ OPTIONS
|
||||
--patch-sets flag then all in-line comments are included for
|
||||
each patch set.
|
||||
|
||||
--commit-message::
|
||||
Include the full commit message in the change description.
|
||||
|
||||
limit:<n>::
|
||||
Maximum number of results to return. This is actually a
|
||||
query operator, and not a command line option. If more
|
||||
|
@@ -28,6 +28,8 @@ owner:: Owner in <<account,account attribute>>
|
||||
|
||||
url:: Canonical URL to reach this change
|
||||
|
||||
commitMessage:: The full commit message for the change.
|
||||
|
||||
lastUpdated:: Time in seconds since the UNIX epoch when this change
|
||||
was last updated.
|
||||
|
||||
|
@@ -27,6 +27,7 @@ public class ChangeAttribute {
|
||||
public String subject;
|
||||
public AccountAttribute owner;
|
||||
public String url;
|
||||
public String commitMessage;
|
||||
|
||||
public Long createdOn;
|
||||
public Long lastUpdated;
|
||||
|
@@ -119,6 +119,10 @@ public class EventFactory {
|
||||
}
|
||||
}
|
||||
|
||||
public void addCommitMessage(ChangeAttribute a, String commitMessage) {
|
||||
a.commitMessage = commitMessage;
|
||||
}
|
||||
|
||||
public void addPatchSets(ChangeAttribute a, Collection<PatchSet> ps) {
|
||||
addPatchSets(a, ps, null, false, null);
|
||||
}
|
||||
|
@@ -20,15 +20,23 @@ import com.google.gerrit.reviewdb.Patch;
|
||||
import com.google.gerrit.reviewdb.PatchLineComment;
|
||||
import com.google.gerrit.reviewdb.PatchSet;
|
||||
import com.google.gerrit.reviewdb.PatchSetApproval;
|
||||
import com.google.gerrit.reviewdb.Project;
|
||||
import com.google.gerrit.reviewdb.ReviewDb;
|
||||
import com.google.gerrit.reviewdb.TrackingId;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||
import com.google.gerrit.server.patch.PatchList;
|
||||
import com.google.gerrit.server.patch.PatchListCache;
|
||||
import com.google.gerrit.server.patch.PatchListEntry;
|
||||
import com.google.gwtorm.client.OrmException;
|
||||
import com.google.inject.Provider;
|
||||
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.eclipse.jgit.revwalk.RevWalk;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
@@ -40,6 +48,7 @@ import java.util.Map;
|
||||
public class ChangeData {
|
||||
private final Change.Id legacyId;
|
||||
private Change change;
|
||||
private String commitMessage;
|
||||
private Collection<PatchSet> patches;
|
||||
private Collection<PatchSetApproval> approvals;
|
||||
private Map<PatchSet.Id,Collection<PatchSetApproval>> approvalsMap;
|
||||
@@ -164,6 +173,28 @@ public class ChangeData {
|
||||
return r;
|
||||
}
|
||||
|
||||
public String commitMessage(GitRepositoryManager repoManager,
|
||||
Provider<ReviewDb> db) throws IOException, OrmException {
|
||||
if (commitMessage == null) {
|
||||
PatchSet.Id psId = change(db).currentPatchSetId();
|
||||
String sha1 = db.get().patchSets().get(psId).getRevision().get();
|
||||
Project.NameKey name = change.getProject();
|
||||
Repository repo = repoManager.openRepository(name);
|
||||
try {
|
||||
RevWalk walk = new RevWalk(repo);
|
||||
try {
|
||||
RevCommit c = walk.parseCommit(ObjectId.fromString(sha1));
|
||||
commitMessage = c.getFullMessage();
|
||||
} finally {
|
||||
walk.release();
|
||||
}
|
||||
} finally {
|
||||
repo.close();
|
||||
}
|
||||
}
|
||||
return commitMessage;
|
||||
}
|
||||
|
||||
public Collection<PatchSet> patches(Provider<ReviewDb> db)
|
||||
throws OrmException {
|
||||
if (patches == null) {
|
||||
|
@@ -23,6 +23,7 @@ import com.google.gerrit.server.events.ChangeAttribute;
|
||||
import com.google.gerrit.server.events.EventFactory;
|
||||
import com.google.gerrit.server.events.PatchSetAttribute;
|
||||
import com.google.gerrit.server.events.QueryStats;
|
||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||
import com.google.gerrit.server.query.Predicate;
|
||||
import com.google.gerrit.server.query.QueryParseException;
|
||||
import com.google.gson.Gson;
|
||||
@@ -66,6 +67,7 @@ public class QueryProcessor {
|
||||
private final ChangeQueryBuilder queryBuilder;
|
||||
private final ChangeQueryRewriter queryRewriter;
|
||||
private final Provider<ReviewDb> db;
|
||||
private final GitRepositoryManager repoManager;
|
||||
private final int maxLimit;
|
||||
|
||||
private OutputFormat outputFormat = OutputFormat.TEXT;
|
||||
@@ -74,6 +76,7 @@ public class QueryProcessor {
|
||||
private boolean includeApprovals;
|
||||
private boolean includeComments;
|
||||
private boolean includeFiles;
|
||||
private boolean includeCommitMessage;
|
||||
|
||||
private OutputStream outputStream = DisabledOutputStream.INSTANCE;
|
||||
private PrintWriter out;
|
||||
@@ -81,11 +84,13 @@ public class QueryProcessor {
|
||||
@Inject
|
||||
QueryProcessor(EventFactory eventFactory,
|
||||
ChangeQueryBuilder.Factory queryBuilder, CurrentUser currentUser,
|
||||
ChangeQueryRewriter queryRewriter, Provider<ReviewDb> db) {
|
||||
ChangeQueryRewriter queryRewriter, Provider<ReviewDb> db,
|
||||
GitRepositoryManager repoManager) {
|
||||
this.eventFactory = eventFactory;
|
||||
this.queryBuilder = queryBuilder.create(currentUser);
|
||||
this.queryRewriter = queryRewriter;
|
||||
this.db = db;
|
||||
this.repoManager = repoManager;
|
||||
this.maxLimit = currentUser.getCapabilities()
|
||||
.getRange(GlobalCapability.QUERY_LIMIT)
|
||||
.getMax();
|
||||
@@ -111,6 +116,10 @@ public class QueryProcessor {
|
||||
includeFiles = on;
|
||||
}
|
||||
|
||||
public void setIncludeCommitMessage(boolean on) {
|
||||
includeCommitMessage = on;
|
||||
}
|
||||
|
||||
public void setOutput(OutputStream out, OutputFormat fmt) {
|
||||
this.outputStream = out;
|
||||
this.outputFormat = fmt;
|
||||
@@ -177,6 +186,10 @@ public class QueryProcessor {
|
||||
eventFactory.extend(c, d.getChange());
|
||||
eventFactory.addTrackingIds(c, d.trackingIds(db));
|
||||
|
||||
if (includeCommitMessage) {
|
||||
eventFactory.addCommitMessage(c, d.commitMessage(repoManager, db));
|
||||
}
|
||||
|
||||
if (includePatchSets) {
|
||||
if (includeFiles) {
|
||||
eventFactory.addPatchSets(c, d.patches(db),
|
||||
|
@@ -61,6 +61,11 @@ class Query extends BaseCommand {
|
||||
processor.setIncludeFiles(on);
|
||||
}
|
||||
|
||||
@Option(name = "--commit-message", usage = "Include the full commit message for a change")
|
||||
void setCommitMessage(boolean on) {
|
||||
processor.setIncludeCommitMessage(on);
|
||||
}
|
||||
|
||||
@Argument(index = 0, required = true, multiValued = true, metaVar = "QUERY", usage = "Query to execute")
|
||||
private List<String> query;
|
||||
|
||||
|
Reference in New Issue
Block a user