Mercurial > jhg
comparison src/com/tmate/hgkit/console/Log.java @ 47:b01500fe2604
Log command output to match 'hg log'
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Fri, 14 Jan 2011 20:03:14 +0100 |
| parents | a78c980749e3 |
| children | e34f90b9ded1 |
comparison
equal
deleted
inserted
replaced
| 46:4022c34a4804 | 47:b01500fe2604 |
|---|---|
| 1 /** | 1 /* |
| 2 * Copyright (c) 2010 Artem Tikhomirov | 2 * Copyright (c) 2010, 2011 Artem Tikhomirov |
| 3 */ | 3 */ |
| 4 package com.tmate.hgkit.console; | 4 package com.tmate.hgkit.console; |
| 5 | |
| 6 import java.util.Formatter; | |
| 7 import java.util.LinkedList; | |
| 8 import java.util.List; | |
| 5 | 9 |
| 6 import com.tmate.hgkit.fs.RepositoryLookup; | 10 import com.tmate.hgkit.fs.RepositoryLookup; |
| 7 import com.tmate.hgkit.ll.Changeset; | 11 import com.tmate.hgkit.ll.Changeset; |
| 8 import com.tmate.hgkit.ll.HgDataFile; | 12 import com.tmate.hgkit.ll.HgDataFile; |
| 9 import com.tmate.hgkit.ll.HgRepository; | 13 import com.tmate.hgkit.ll.HgRepository; |
| 14 import com.tmate.hgkit.ll.Nodeid; | |
| 10 | 15 |
| 11 /** | 16 /** |
| 12 * @author artem | 17 * @author artem |
| 13 */ | 18 */ |
| 14 public class Log { | 19 public class Log { |
| 20 if (hgRepo.isInvalid()) { | 25 if (hgRepo.isInvalid()) { |
| 21 System.err.printf("Can't find repository in: %s\n", hgRepo.getLocation()); | 26 System.err.printf("Can't find repository in: %s\n", hgRepo.getLocation()); |
| 22 return; | 27 return; |
| 23 } | 28 } |
| 24 System.out.println(hgRepo.getLocation()); | 29 System.out.println(hgRepo.getLocation()); |
| 25 final Changeset.Inspector callback = new Changeset.Inspector() { | 30 final Dump dump = new Dump(hgRepo); |
| 26 | 31 dump.complete = false; //cmdLineOpts; |
| 27 public void next(Changeset cset) { | 32 dump.reverseOrder = true; |
| 28 System.out.println("==>"); | |
| 29 cset.dump(); | |
| 30 } | |
| 31 }; | |
| 32 if (cmdLineOpts.files.isEmpty()) { | 33 if (cmdLineOpts.files.isEmpty()) { |
| 33 System.out.println("Complete history of the repo:"); | 34 // no revisions and no limit |
| 34 hgRepo.getChangelog().all(callback); | 35 hgRepo.getChangelog().all(dump); |
| 36 dump.complete(); | |
| 35 } else { | 37 } else { |
| 36 for (String fname : cmdLineOpts.files) { | 38 for (String fname : cmdLineOpts.files) { |
| 37 HgDataFile f1 = hgRepo.getFileNode(fname); | 39 HgDataFile f1 = hgRepo.getFileNode(fname); |
| 38 System.out.println("History of the file: " + f1.getPath()); | 40 System.out.println("History of the file: " + f1.getPath()); |
| 39 f1.history(callback); | 41 f1.history(dump); |
| 42 dump.complete(); | |
| 40 } | 43 } |
| 41 } | 44 } |
| 42 // | 45 // |
| 43 // System.out.println("\n\n========================="); | 46 // System.out.println("\n\n========================="); |
| 44 // System.out.println("Range 1-3:"); | 47 // System.out.println("Range 1-3:"); |
| 45 // f1.history(1,3, callback); | 48 // f1.history(1,3, callback); |
| 46 // | 49 // |
| 47 //new ChangelogWalker().setFile("hello.c").setRevisionRange(1, 4).accept(new Visitor); | 50 //new ChangelogWalker().setFile("hello.c").setRevisionRange(1, 4).accept(new Visitor); |
| 48 } | 51 } |
| 52 | |
| 53 private static final class Dump implements Changeset.Inspector { | |
| 54 // params | |
| 55 boolean complete = false; | |
| 56 boolean reverseOrder = false; | |
| 57 // own | |
| 58 private LinkedList<String> l = new LinkedList<String>(); | |
| 59 private final HgRepository repo; | |
| 60 | |
| 61 public Dump(HgRepository hgRepo) { | |
| 62 this.repo = hgRepo; | |
| 63 } | |
| 64 | |
| 65 public void next(int revisionNumber, Nodeid nodeid, Changeset cset) { | |
| 66 final String s = print(revisionNumber, nodeid, cset); | |
| 67 if (reverseOrder) { | |
| 68 l.addFirst(s); | |
| 69 } else { | |
| 70 System.out.print(s); | |
| 71 } | |
| 72 } | |
| 73 | |
| 74 public void complete() { | |
| 75 if (!reverseOrder) { | |
| 76 return; | |
| 77 } | |
| 78 for (String s : l) { | |
| 79 System.out.print(s); | |
| 80 } | |
| 81 l.clear(); | |
| 82 } | |
| 83 | |
| 84 private String print(int revNumber, Nodeid csetNodeid, Changeset cset) { | |
| 85 StringBuilder sb = new StringBuilder(); | |
| 86 Formatter f = new Formatter(sb); | |
| 87 f.format("changeset: %d:%s\n", revNumber, complete ? csetNodeid : csetNodeid.shortNotation()); | |
| 88 if (complete) { | |
| 89 f.format("parent: %s\nparent: %s\nmanifest: %s", "-1", "-1", cset.manifest()); | |
| 90 } | |
| 91 f.format("user: %s\ndate: %s\n", cset.user(), cset.dateString()); | |
| 92 if (complete) { | |
| 93 final List<String> files = cset.files(); | |
| 94 sb.append("files: "); | |
| 95 for (String s : files) { | |
| 96 sb.append(' '); | |
| 97 sb.append(s); | |
| 98 } | |
| 99 f.format("description:\n%s\n\n", cset.comment()); | |
| 100 } else { | |
| 101 f.format("summary: %s\n\n", cset.comment()); | |
| 102 } | |
| 103 if (cset.extras() != null) { | |
| 104 f.format("extra: " + cset.extras()); // TODO | |
| 105 } | |
| 106 return sb.toString(); | |
| 107 } | |
| 108 } | |
| 49 } | 109 } |
