Added functionality to show notes Feature: Issue 45 Change-Id: Idf290212e5447987330a2741bfe57e297c50a93a
diff --git a/java/com/google/gitiles/CommitData.java b/java/com/google/gitiles/CommitData.java index 705240e..23f03e8 100644 --- a/java/com/google/gitiles/CommitData.java +++ b/java/com/google/gitiles/CommitData.java
@@ -41,6 +41,7 @@ import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.notes.NoteMap; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.AbstractTreeIterator; @@ -60,6 +61,7 @@ DIFF_TREE, LOG_URL, MESSAGE, + NOTES, PARENTS, PARENT_BLAME_URL, SHA, @@ -83,6 +85,7 @@ static class Builder { private ArchiveFormat archiveFormat; private Map<AnyObjectId, Set<Ref>> refsById; + private static final int MAX_NOTE_SIZE = 524288; Builder setArchiveFormat(@Nullable ArchiveFormat archiveFormat) { this.archiveFormat = archiveFormat; @@ -145,6 +148,19 @@ if (fs.contains(Field.TAGS)) { result.tags = getRefsById(repo, c, Constants.R_TAGS); } + if (fs.contains(Field.NOTES)) { + Ref notesRef = repo.getRefDatabase().exactRef(Constants.R_NOTES_COMMITS); + if (notesRef != null) { + try { + byte[] data = + NoteMap.read(walk.getObjectReader(), walk.parseCommit(notesRef.getObjectId())) + .getCachedBytes(c, MAX_NOTE_SIZE); + result.notes = new String(data, "utf-8"); + } catch (Exception e) { + result.notes = ""; + } + } + } if (fs.contains(Field.MESSAGE)) { walk.parseBody(c); result.message = c.getFullMessage(); @@ -167,7 +183,6 @@ if (fs.contains(Field.DIFF_TREE)) { result.diffEntries = computeDiffEntries(repo, view, walk, c); } - return result; } @@ -251,6 +266,7 @@ List<RevCommit> parents; String shortMessage; String message; + String notes; List<Ref> branches; List<Ref> tags;
diff --git a/java/com/google/gitiles/CommitJsonData.java b/java/com/google/gitiles/CommitJsonData.java index 953c19c..5f94a70 100644 --- a/java/com/google/gitiles/CommitJsonData.java +++ b/java/com/google/gitiles/CommitJsonData.java
@@ -32,7 +32,13 @@ public class CommitJsonData { static final ImmutableSet<Field> DEFAULT_FIELDS = Sets.immutableEnumSet( - Field.SHA, Field.TREE, Field.PARENTS, Field.AUTHOR, Field.COMMITTER, Field.MESSAGE); + Field.SHA, + Field.TREE, + Field.PARENTS, + Field.AUTHOR, + Field.COMMITTER, + Field.MESSAGE, + Field.NOTES); public static class Log { public List<Commit> log; @@ -53,6 +59,7 @@ Ident author; Ident committer; String message; + String notes; List<Diff> treeDiff; } @@ -101,6 +108,9 @@ if (cd.message != null) { result.message = cd.message; } + if (cd.notes != null && !cd.notes.isEmpty()){ + result.notes = cd.notes; + } if (cd.diffEntries != null) { result.treeDiff = toJsonData(cd.diffEntries); }
diff --git a/java/com/google/gitiles/CommitSoyData.java b/java/com/google/gitiles/CommitSoyData.java index c4087a6..ac81f80 100644 --- a/java/com/google/gitiles/CommitSoyData.java +++ b/java/com/google/gitiles/CommitSoyData.java
@@ -53,6 +53,7 @@ Field.TREE_URL, Field.PARENTS, Field.MESSAGE, + Field.NOTES, // Optional Field Field.LOG_URL, Field.ARCHIVE_URL, Field.ARCHIVE_TYPE); @@ -137,11 +138,20 @@ if (cd.diffEntries != null) { data.put("diffTree", toSoyData(view, cd.diffEntries)); } - checkState( - Sets.difference(fs, NESTED_FIELDS).size() == data.size(), - "bad commit data fields: %s != %s", - fs, - data.keySet()); + + int diffSetSize = Sets.difference(fs, NESTED_FIELDS).size(); + + if (fs.contains( + Field.NOTES)) { // Since NOTES is optional this is required for checkState to pass + diffSetSize -= 1; + } + + checkState(diffSetSize == data.size(), "bad commit data fields: %s != %s", fs, data.keySet()); + + if (cd.notes != null && !cd.notes.isEmpty()) { + data.put("notes", cd.notes); + } + return data; }
diff --git a/resources/com/google/gitiles/templates/ObjectDetail.soy b/resources/com/google/gitiles/templates/ObjectDetail.soy index f755720..ac1a1b4 100644 --- a/resources/com/google/gitiles/templates/ObjectDetail.soy +++ b/resources/com/google/gitiles/templates/ObjectDetail.soy
@@ -32,6 +32,7 @@ text: raw text of the part. url: optional URL that should be linked to from the part. */ + {@param notes: ?} /** the notes for the corresponding commit */ {@param diffTree: ?} /** list of changed tree entries with the following keys: changeType: string matching an org.eclipse.jgit.diff.DiffEntry.ChangeType constant. path: (new) path of the tree entry. @@ -91,6 +92,15 @@ {param message: $message /} {/call} +{if $notes} + <h4>Notes:</h4> + <div class="MetadataMessage"> + <span> + {msg desc="Text for the git notes"}{$notes}{/msg} + </span> + </div> +{/if} + {if $diffTree and length($diffTree)} <ul class="DiffTree"> {for $entry in $diffTree}