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 }