Add author and size information to output of query.
Add author information to output of query options:
'--patch-sets'.
'--current-patch-set'.
Add size information to output of query options:
'--patch-sets'.
'--current-patch-set'.
'--files'.
This information can now be retrieved by both SSH and
the HTTP REST API.
Change-Id: I7ef0f2dce6a4d2bd2dd2532e4bb48a22522b659a
Signed-off-by: Bruce Zu <bruce.zu@sonymobile.com>
diff --git a/Documentation/cmd-query.txt b/Documentation/cmd-query.txt
index 2feea11..963d788 100644
--- a/Documentation/cmd-query.txt
+++ b/Documentation/cmd-query.txt
@@ -65,7 +65,8 @@
--files::
Support for listing files with patch sets and their
- attributes (ADDED, MODIFIED, DELETED, RENAMED, COPIED).
+ attributes (ADDED, MODIFIED, DELETED, RENAMED, COPIED)
+ and size information (number of insertions and deletions).
Note that this option requires either the --current-patch-set
or the --patch-sets option in order to give any file information.
diff --git a/Documentation/json.txt b/Documentation/json.txt
index aea9bac..4f86a9d 100644
--- a/Documentation/json.txt
+++ b/Documentation/json.txt
@@ -107,6 +107,8 @@
uploader:: Uploader of the patch set in <<account,account attribute>>.
+author:: Author of this patchset in <<account,account attribute>>.
+
createdOn:: Time in seconds since the UNIX epoch when this patchset
was created.
@@ -116,6 +118,10 @@
files:: All changed files in this patchset in <<patch,patch attributes>>.
+sizeInsertions:: Size information of insertions of this patchset.
+
+sizeDeletions:: Size information of deletions of this patchset.
+
[[approval]]
approval
--------
@@ -257,6 +263,9 @@
REWRITE;; Sufficient amount of content changed to claim the file was rewritten.
+insertions:: number of insertions of this patch.
+
+deletions:: number of deletions of this patch.
SEE ALSO
--------
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/change/DeprecatedChangeQueryServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/change/DeprecatedChangeQueryServlet.java
index cf443e7..da21c51 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/change/DeprecatedChangeQueryServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/change/DeprecatedChangeQueryServlet.java
@@ -73,6 +73,7 @@
p.setIncludeCurrentPatchSet(get(req, "current-patch-set", false));
p.setIncludePatchSets(get(req, "patch-sets", false));
p.setIncludeApprovals(get(req, "all-approvals", false));
+ p.setIncludeFiles(get(req, "files", false));
p.setOutput(rsp.getOutputStream(), format);
p.query(get(req, "q", "status:open"));
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java
index ab3ca56..fe367cb 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java
@@ -21,6 +21,7 @@
import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.ChangeMessage;
+import com.google.gerrit.reviewdb.client.Patch;
import com.google.gerrit.reviewdb.client.PatchLineComment;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.PatchSetAncestor;
@@ -34,6 +35,8 @@
import com.google.gerrit.server.patch.PatchListCache;
import com.google.gerrit.server.patch.PatchListEntry;
import com.google.gerrit.server.patch.PatchListNotAvailableException;
+import com.google.gerrit.server.patch.PatchSetInfoFactory;
+import com.google.gerrit.server.patch.PatchSetInfoNotAvailableException;
import com.google.gwtorm.server.OrmException;
import com.google.gwtorm.server.SchemaFactory;
import com.google.inject.Inject;
@@ -46,8 +49,8 @@
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Map;
import java.util.List;
+import java.util.Map;
import javax.annotation.Nullable;
@@ -59,17 +62,20 @@
private final ApprovalTypes approvalTypes;
private final PatchListCache patchListCache;
private final SchemaFactory<ReviewDb> schema;
+ private final PatchSetInfoFactory psInfoFactory;
@Inject
EventFactory(AccountCache accountCache,
@CanonicalWebUrl @Nullable Provider<String> urlProvider,
ApprovalTypes approvalTypes,
+ final PatchSetInfoFactory psif,
PatchListCache patchListCache, SchemaFactory<ReviewDb> schema) {
this.accountCache = accountCache;
this.urlProvider = urlProvider;
this.approvalTypes = approvalTypes;
this.patchListCache = patchListCache;
this.schema = schema;
+ this.psInfoFactory = psif;
}
/**
@@ -286,6 +292,8 @@
PatchAttribute p = new PatchAttribute();
p.file = patch.getNewName();
p.type = patch.getChangeType();
+ p.deletions -= patch.getDeletions();
+ p.insertions = patch.getInsertions();
patchSetAttribute.files.add(p);
}
} catch (PatchListNotAvailableException e) {
@@ -323,6 +331,7 @@
p.ref = patchSet.getRefName();
p.uploader = asAccountAttribute(patchSet.getUploader());
p.createdOn = patchSet.getCreatedOn().getTime() / 1000L;
+ final PatchSet.Id pId = patchSet.getId();
try {
final ReviewDb db = schema.open();
try {
@@ -331,11 +340,28 @@
patchSet.getId())) {
p.parents.add(a.getAncestorRevision().get());
}
+
+ p.author = asAccountAttribute(//
+ psInfoFactory.get(db, pId).getAuthor().getAccount());
+
+ Change change = db.changes().get(pId.getParentKey());
+ List<Patch> list =
+ patchListCache.get(change, patchSet).toPatchList(pId);
+ for (Patch pe : list) {
+ if (!Patch.COMMIT_MSG.equals(pe.getFileName())) {
+ p.sizeDeletions -= pe.getDeletions();
+ p.sizeInsertions += pe.getInsertions();
+ }
+ }
} finally {
db.close();
}
} catch (OrmException e) {
log.error("Cannot load patch set data for " + patchSet.getId(), e);
+ } catch (PatchSetInfoNotAvailableException e) {
+ log.error(String.format("Cannot get authorEmail for %s.", pId), e);
+ } catch (PatchListNotAvailableException e) {
+ log.error(String.format("Cannot get size information for %s.", pId), e);
}
return p;
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchAttribute.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchAttribute.java
index 3802fdd..0d2b054 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchAttribute.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchAttribute.java
@@ -19,4 +19,6 @@
public class PatchAttribute {
public String file;
public ChangeType type;
+ public int insertions;
+ public int deletions;
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetAttribute.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetAttribute.java
index f726ce3..1123e5f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetAttribute.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetAttribute.java
@@ -23,8 +23,11 @@
public String ref;
public AccountAttribute uploader;
public Long createdOn;
+ public AccountAttribute author;
public List<ApprovalAttribute> approvals;
public List<PatchSetCommentAttribute> comments;
public List<PatchAttribute> files;
+ public int sizeInsertions;
+ public int sizeDeletions;
}