Mercurial > jhg
comparison cmdline/org/tmatesoft/hg/console/Outgoing.java @ 206:63c9fed4369e
Sample command line tools for incoming/outgoing to use commands
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Thu, 28 Apr 2011 02:47:44 +0200 |
| parents | e5407b5a586a |
| children | 41a778e3fd31 |
comparison
equal
deleted
inserted
replaced
| 205:ffc5f6d59f7e | 206:63c9fed4369e |
|---|---|
| 17 package org.tmatesoft.hg.console; | 17 package org.tmatesoft.hg.console; |
| 18 | 18 |
| 19 import java.util.Collection; | 19 import java.util.Collection; |
| 20 import java.util.List; | 20 import java.util.List; |
| 21 | 21 |
| 22 import org.tmatesoft.hg.core.HgOutgoingCommand; | |
| 23 import org.tmatesoft.hg.core.HgRepoFacade; | |
| 22 import org.tmatesoft.hg.core.Nodeid; | 24 import org.tmatesoft.hg.core.Nodeid; |
| 23 import org.tmatesoft.hg.internal.RepositoryComparator; | |
| 24 import org.tmatesoft.hg.repo.HgChangelog; | |
| 25 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; | |
| 26 import org.tmatesoft.hg.repo.HgLookup; | 25 import org.tmatesoft.hg.repo.HgLookup; |
| 27 import org.tmatesoft.hg.repo.HgRemoteRepository; | 26 import org.tmatesoft.hg.repo.HgRemoteRepository; |
| 28 import org.tmatesoft.hg.repo.HgRepository; | |
| 29 | 27 |
| 30 | 28 |
| 31 /** | 29 /** |
| 32 * WORK IN PROGRESS, DO NOT USE | 30 * <em>hg outgoing</em> |
| 33 * hg outgoing | |
| 34 * | 31 * |
| 35 * @author Artem Tikhomirov | 32 * @author Artem Tikhomirov |
| 36 * @author TMate Software Ltd. | 33 * @author TMate Software Ltd. |
| 37 */ | 34 */ |
| 38 public class Outgoing { | 35 public class Outgoing { |
| 39 | 36 |
| 40 public static void main(String[] args) throws Exception { | 37 public static void main(String[] args) throws Exception { |
| 41 final boolean debug = true; // perhaps, use hg4j.remote.debug or own property? | |
| 42 Options cmdLineOpts = Options.parse(args); | 38 Options cmdLineOpts = Options.parse(args); |
| 43 HgRepository hgRepo = cmdLineOpts.findRepository(); | 39 HgRepoFacade hgRepo = new HgRepoFacade(); |
| 44 if (hgRepo.isInvalid()) { | 40 if (!hgRepo.init(cmdLineOpts.findRepository())) { |
| 45 System.err.printf("Can't find repository in: %s\n", hgRepo.getLocation()); | 41 System.err.printf("Can't find repository in: %s\n", hgRepo.getRepository().getLocation()); |
| 46 return; | 42 return; |
| 47 } | 43 } |
| 48 HgRemoteRepository hgRemote = new HgLookup().detectRemote(cmdLineOpts.getSingle(""), hgRepo); | 44 // XXX perhaps, HgRepoFacade shall get detectRemote() analog (to get remote server with respect of facade's repo) |
| 45 HgRemoteRepository hgRemote = new HgLookup().detectRemote(cmdLineOpts.getSingle(""), hgRepo.getRepository()); | |
| 49 if (hgRemote.isInvalid()) { | 46 if (hgRemote.isInvalid()) { |
| 50 System.err.printf("Remote repository %s is not valid", hgRemote.getLocation()); | 47 System.err.printf("Remote repository %s is not valid", hgRemote.getLocation()); |
| 51 return; | 48 return; |
| 52 } | 49 } |
| 53 | 50 // |
| 54 HgChangelog changelog = hgRepo.getChangelog(); | 51 HgOutgoingCommand cmd = hgRepo.createOutgoingCommand(); |
| 55 HgChangelog.ParentWalker pw = changelog.new ParentWalker(); | 52 cmd.against(hgRemote); |
| 56 pw.init(); | |
| 57 | 53 |
| 58 RepositoryComparator repoCompare = new RepositoryComparator(pw, hgRemote); | |
| 59 repoCompare.compare(null); | |
| 60 if (debug) { | |
| 61 List<Nodeid> commonKnown = repoCompare.getCommon(); | |
| 62 dump("Nodes known to be both locally and at remote server", commonKnown); | |
| 63 } | |
| 64 // find all local children of commonKnown | 54 // find all local children of commonKnown |
| 65 List<Nodeid> result = repoCompare.getLocalOnlyRevisions(); | 55 List<Nodeid> result = cmd.executeLite(null); |
| 66 dump("Lite", result); | 56 dump("Lite", result); |
| 67 // | 57 // |
| 68 // | 58 // |
| 69 System.out.println("Full"); | 59 System.out.println("Full"); |
| 70 // show all, starting from next to common | 60 // show all, starting from next to common |
| 71 repoCompare.visitLocalOnlyRevisions(new HgChangelog.Inspector() { | 61 final ChangesetDumpHandler h = new ChangesetDumpHandler(hgRepo.getRepository()); |
| 72 private final ChangesetFormatter formatter = new ChangesetFormatter(); | 62 h.complete(cmdLineOpts.getBoolean("--debug")).verbose(cmdLineOpts.getBoolean("-v", "--verbose")); |
| 73 | 63 cmd.executeFull(h); |
| 74 public void next(int revisionNumber, Nodeid nodeid, RawChangeset cset) { | 64 h.done(); |
| 75 System.out.println(formatter.simple(revisionNumber, nodeid, cset)); | |
| 76 } | |
| 77 }); | |
| 78 } | 65 } |
| 79 | 66 |
| 80 public static class ChangesetFormatter { | 67 // public static class ChangesetFormatter { |
| 81 private final StringBuilder sb = new StringBuilder(1024); | 68 // private final StringBuilder sb = new StringBuilder(1024); |
| 82 | 69 // |
| 83 public CharSequence simple(int revisionNumber, Nodeid nodeid, RawChangeset cset) { | 70 // public CharSequence simple(int revisionNumber, Nodeid nodeid, RawChangeset cset) { |
| 84 sb.setLength(0); | 71 // sb.setLength(0); |
| 85 sb.append(String.format("changeset: %d:%s\n", revisionNumber, nodeid.toString())); | 72 // sb.append(String.format("changeset: %d:%s\n", revisionNumber, nodeid.toString())); |
| 86 sb.append(String.format("user: %s\n", cset.user())); | 73 // sb.append(String.format("user: %s\n", cset.user())); |
| 87 sb.append(String.format("date: %s\n", cset.dateString())); | 74 // sb.append(String.format("date: %s\n", cset.dateString())); |
| 88 sb.append(String.format("comment: %s\n\n", cset.comment())); | 75 // sb.append(String.format("comment: %s\n\n", cset.comment())); |
| 89 return sb; | 76 // return sb; |
| 90 } | 77 // } |
| 91 } | 78 // } |
| 92 | 79 |
| 93 | 80 |
| 94 private static void dump(String s, Collection<Nodeid> c) { | 81 static void dump(String s, Collection<Nodeid> c) { |
| 95 System.out.println(s); | 82 System.out.println(s); |
| 96 for (Nodeid n : c) { | 83 for (Nodeid n : c) { |
| 97 System.out.println(n); | 84 System.out.println(n); |
| 98 } | 85 } |
| 99 } | 86 } |
