]> source.dussan.org Git - jgit.git/commitdiff
Show notes in Log CLI command - Part 2 97/2597/2
authorSasa Zivkov <sasa.zivkov@sap.com>
Thu, 24 Feb 2011 10:12:06 +0000 (11:12 +0100)
committerSasa Zivkov <sasa.zivkov@sap.com>
Tue, 1 Mar 2011 08:29:35 +0000 (09:29 +0100)
This change fixes issues identified in the commit
5f3d577e5a1e8f23a2b6ea6a2bf24516806e01b8.

Change-Id: Idbd935f5f60ad043faa0d4982b3e101ef7c07d60
Signed-off-by: Sasa Zivkov <sasa.zivkov@sap.com>
org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/CLIText.properties
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CLIText.java
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevWalkTextBuiltin.java

index b117cf04cd9962ef74a2d20eee12ad735e30dfe4..01b3fba9cc5b0ab86e15bbcecc30a381e35e7cfe 100644 (file)
@@ -110,6 +110,7 @@ notAValidRefName={0} is not a valid ref name
 notAnIndexFile={0} is not an index file
 notAnObject={0} is not an object
 notFound=!! NOT FOUND !!
+noteObjectTooLargeToPrint=Note object {0} too large to print
 onlyOneMetaVarExpectedIn=Only one {0} expected in {1}.
 pushTo=To {0}
 remoteMessage=remote: {0}
index dd0f6dbea647c2e2babb03b8033307ab01c4fc85..1c7e93634311317b5157da7e7905ab4c5e89d793 100644 (file)
@@ -130,6 +130,7 @@ public class CLIText extends TranslationBundle {
        /***/ public String notAnIndexFile;
        /***/ public String notAnObject;
        /***/ public String notFound;
+       /***/ public String noteObjectTooLargeToPrint;
        /***/ public String onlyOneMetaVarExpectedIn;
        /***/ public String pushTo;
        /***/ public String remoteMessage;
index d27793c5beae25d9b222730a6fbabfa838ce83d9..4a92ea624fd88fadb28b4a9e4e514e8a2dcb9afc 100644 (file)
@@ -64,16 +64,15 @@ import org.eclipse.jgit.diff.DiffFormatter;
 import org.eclipse.jgit.diff.RawText;
 import org.eclipse.jgit.diff.RawTextComparator;
 import org.eclipse.jgit.diff.RenameDetector;
+import org.eclipse.jgit.errors.LargeObjectException;
 import org.eclipse.jgit.lib.AnyObjectId;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
-import org.eclipse.jgit.lib.ObjectReader;
 import org.eclipse.jgit.lib.PersonIdent;
 import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.notes.NoteMap;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevTree;
-import org.eclipse.jgit.revwalk.RevWalk;
 import org.kohsuke.args4j.Option;
 
 @Command(common = true, usage = "usage_viewCommitHistory")
@@ -89,10 +88,6 @@ class Log extends RevWalkTextBuiltin {
 
        private Map<String, NoteMap> noteMaps;
 
-       private ObjectReader reader;
-
-       private RevWalk revWalk;
-
        @Option(name="--decorate", usage="usage_showRefNamesMatchingCommits")
        private boolean decorate;
 
@@ -182,14 +177,6 @@ class Log extends RevWalkTextBuiltin {
                fmt = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy ZZZZZ", Locale.US);
        }
 
-       @Override
-       protected RevWalk createWalk() {
-               RevWalk ret = super.createWalk();
-               if (decorate)
-                       allRefsByPeeledObjectId = getRepository().getAllRefsByPeeledObjectId();
-               return ret;
-       }
-
        @Override
        protected void run() throws Exception {
                diffFmt.setRepository(db);
@@ -202,40 +189,39 @@ class Log extends RevWalkTextBuiltin {
                                rd.setRenameLimit(renameLimit.intValue());
                        }
 
-                       if (!noStandardNotes || additionalNoteRefs != null) {
-                               reader = db.newObjectReader();
-                               revWalk = new RevWalk(db);
+                       if (!noStandardNotes || !additionalNoteRefs.isEmpty()) {
+                               createWalk();
                                noteMaps = new LinkedHashMap<String, NoteMap>();
                                if (!noStandardNotes) {
-                                       noteMaps.put(Constants.R_NOTES_COMMITS,
-                                                       getNoteMap(Constants.R_NOTES_COMMITS));
+                                       addNoteMap(Constants.R_NOTES_COMMITS);
                                }
-                               if (additionalNoteRefs != null) {
+                               if (!additionalNoteRefs.isEmpty()) {
                                        for (String notesRef : additionalNoteRefs) {
                                                if (!notesRef.startsWith(Constants.R_NOTES)) {
                                                        notesRef = Constants.R_NOTES + notesRef;
                                                }
-                                               noteMaps.put(notesRef, getNoteMap(notesRef));
+                                               addNoteMap(notesRef);
                                        }
                                }
                        }
 
+                       if (decorate)
+                               allRefsByPeeledObjectId = getRepository()
+                                               .getAllRefsByPeeledObjectId();
+
                        super.run();
                } finally {
                        diffFmt.release();
-                       if (reader != null)
-                               reader.release();
-                       if (revWalk != null)
-                               revWalk.release();
                }
        }
 
-       private NoteMap getNoteMap(String notesRef) throws IOException {
+       private void addNoteMap(String notesRef) throws IOException {
                Ref notes = db.getRef(notesRef);
                if (notes == null)
-                       return null;
-               RevCommit notesCommit = revWalk.parseCommit(notes.getObjectId());
-               return NoteMap.read(reader, notesCommit);
+                       return;
+               RevCommit notesCommit = argWalk.parseCommit(notes.getObjectId());
+               noteMaps.put(notesRef,
+                               NoteMap.read(argWalk.getObjectReader(), notesCommit));
        }
 
        @Override
@@ -304,7 +290,7 @@ class Log extends RevWalkTextBuiltin {
                        }
                        boolean printedNote = showNotes(c, e.getValue(), label,
                                        printEmptyLine);
-                       atLeastOnePrinted = atLeastOnePrinted || printedNote;
+                       atLeastOnePrinted |= printedNote;
                        printEmptyLine = printedNote;
                }
                return atLeastOnePrinted;
@@ -334,12 +320,16 @@ class Log extends RevWalkTextBuiltin {
                        out.print(")");
                }
                out.println(":");
-               RawText rawText = new RawText(reader.open(blobId).getBytes());
-               String s = rawText.getString(0, rawText.size(), false);
-               final String[] lines = s.split("\n");
-               for (final String l : lines) {
-                       out.print("    ");
-                       out.println(l);
+               try {
+                       RawText rawText = new RawText(argWalk.getObjectReader()
+                                       .open(blobId).getCachedBytes(Integer.MAX_VALUE));
+                       for (int i = 0; i < rawText.size(); i++) {
+                               out.print("    ");
+                               out.println(rawText.getString(i));
+                       }
+               } catch (LargeObjectException e) {
+                       out.println(MessageFormat.format(
+                                       CLIText.get().noteObjectTooLargeToPrint, blobId.name()));
                }
                return true;
        }
index 768890c85cedd5470244bea36f26590cf4f08290..474e974cd1e84a62c8e1131405066f406f234e1c 100644 (file)
@@ -199,10 +199,8 @@ abstract class RevWalkTextBuiltin extends TextBuiltin {
        }
 
        protected RevWalk createWalk() {
-               if (objects)
-                       return new ObjectWalk(db);
                if (argWalk == null)
-                       argWalk = new RevWalk(db);
+                       argWalk = objects ? new ObjectWalk(db) : new RevWalk(db);
                return argWalk;
        }