Mercurial > hg4j
comparison cmdline/org/tmatesoft/hg/console/Incoming.java @ 184:ec1820f64d2b
Complete incoming cmdline client, with both lite (revisions) and complete (full changeset) information dump
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Wed, 13 Apr 2011 19:09:10 +0200 |
parents | f26ffe04ced0 |
children | 44a34baabea0 |
comparison
equal
deleted
inserted
replaced
183:9807bf8f3a9c | 184:ec1820f64d2b |
---|---|
21 import java.util.Collections; | 21 import java.util.Collections; |
22 import java.util.Comparator; | 22 import java.util.Comparator; |
23 import java.util.HashSet; | 23 import java.util.HashSet; |
24 import java.util.Iterator; | 24 import java.util.Iterator; |
25 import java.util.LinkedHashMap; | 25 import java.util.LinkedHashMap; |
26 import java.util.LinkedHashSet; | |
26 import java.util.LinkedList; | 27 import java.util.LinkedList; |
27 import java.util.List; | 28 import java.util.List; |
28 import java.util.ListIterator; | 29 import java.util.ListIterator; |
29 import java.util.Map.Entry; | 30 import java.util.Map.Entry; |
30 | 31 |
32 import org.tmatesoft.hg.core.HgBadStateException; | |
31 import org.tmatesoft.hg.core.HgException; | 33 import org.tmatesoft.hg.core.HgException; |
32 import org.tmatesoft.hg.core.Nodeid; | 34 import org.tmatesoft.hg.core.Nodeid; |
33 import org.tmatesoft.hg.internal.RepositoryComparator; | 35 import org.tmatesoft.hg.internal.RepositoryComparator; |
34 import org.tmatesoft.hg.internal.RepositoryComparator.BranchChain; | 36 import org.tmatesoft.hg.internal.RepositoryComparator.BranchChain; |
37 import org.tmatesoft.hg.repo.HgBundle; | |
35 import org.tmatesoft.hg.repo.HgChangelog; | 38 import org.tmatesoft.hg.repo.HgChangelog; |
36 import org.tmatesoft.hg.repo.HgLookup; | 39 import org.tmatesoft.hg.repo.HgLookup; |
37 import org.tmatesoft.hg.repo.HgRemoteRepository; | 40 import org.tmatesoft.hg.repo.HgRemoteRepository; |
38 import org.tmatesoft.hg.repo.HgRepository; | 41 import org.tmatesoft.hg.repo.HgRepository; |
42 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; | |
39 | 43 |
40 | 44 |
41 /** | 45 /** |
42 * WORK IN PROGRESS, DO NOT USE | 46 * WORK IN PROGRESS, DO NOT USE |
43 * hg incoming counterpart | 47 * hg incoming counterpart |
51 if (Boolean.FALSE.booleanValue()) { | 55 if (Boolean.FALSE.booleanValue()) { |
52 new SequenceConstructor().test(); | 56 new SequenceConstructor().test(); |
53 return; | 57 return; |
54 } | 58 } |
55 Options cmdLineOpts = Options.parse(args); | 59 Options cmdLineOpts = Options.parse(args); |
56 HgRepository hgRepo = cmdLineOpts.findRepository(); | 60 final HgRepository hgRepo = cmdLineOpts.findRepository(); |
57 if (hgRepo.isInvalid()) { | 61 if (hgRepo.isInvalid()) { |
58 System.err.printf("Can't find repository in: %s\n", hgRepo.getLocation()); | 62 System.err.printf("Can't find repository in: %s\n", hgRepo.getLocation()); |
59 return; | 63 return; |
60 } | 64 } |
61 HgRemoteRepository hgRemote = new HgLookup().detectRemote("svnkit", hgRepo); | 65 HgRemoteRepository hgRemote = new HgLookup().detectRemote(cmdLineOpts.getSingle(""), hgRepo); |
62 if (hgRemote.isInvalid()) { | 66 if (hgRemote.isInvalid()) { |
63 System.err.printf("Remote repository %s is not valid", hgRemote.getLocation()); | 67 System.err.printf("Remote repository %s is not valid", hgRemote.getLocation()); |
64 return; | 68 return; |
65 } | 69 } |
66 // | 70 // |
70 pw.init(); | 74 pw.init(); |
71 // | 75 // |
72 RepositoryComparator repoCompare = new RepositoryComparator(pw, hgRemote); | 76 RepositoryComparator repoCompare = new RepositoryComparator(pw, hgRemote); |
73 repoCompare.compare(null); | 77 repoCompare.compare(null); |
74 List<BranchChain> missingBranches0 = repoCompare.calculateMissingBranches(); | 78 List<BranchChain> missingBranches0 = repoCompare.calculateMissingBranches(); |
79 final LinkedHashSet<Nodeid> common = new LinkedHashSet<Nodeid>(); | |
80 // XXX common can be obtained from repoCompare, but at the moment it would almost duplicate work of calculateMissingBranches | |
81 // once I refactor latter, common shall be taken from repoCompare. | |
75 for (BranchChain bc : missingBranches0) { | 82 for (BranchChain bc : missingBranches0) { |
76 bc.dump(); | 83 bc.dump(); |
77 | 84 common.add(bc.branchRoot); // common known node |
78 List<Nodeid> missing = visitBranches(repoCompare, bc); | 85 List<Nodeid> missing = visitBranches(repoCompare, bc); |
79 // Collections.reverse(missing); // useful to test output, from newer to older | 86 assert bc.branchRoot.equals(missing.get(0)); |
87 missing.remove(0); | |
88 Collections.reverse(missing); // useful to test output, from newer to older | |
89 System.out.println("Nodes to fetch in this branch:"); | |
80 for (Nodeid n : missing) { | 90 for (Nodeid n : missing) { |
81 if (pw.knownNode(n)) { | 91 if (pw.knownNode(n)) { |
82 System.out.println("Erroneous to fetch:" + n); | 92 System.out.println("Erroneous to fetch:" + n); |
83 } else { | 93 } else { |
84 System.out.println(n); | 94 System.out.println(n); |
85 } | 95 } |
86 } | 96 } |
87 System.out.println("Branch done"); | 97 System.out.println("Branch done"); |
88 } | 98 } |
89 | 99 // |
100 // Complete | |
101 HgBundle changegroup = hgRemote.getChanges(new LinkedList<Nodeid>(common)); | |
102 changegroup.changes(hgRepo, new HgChangelog.Inspector() { | |
103 private int localIndex; | |
104 | |
105 public void next(int revisionNumber, Nodeid nodeid, RawChangeset cset) { | |
106 if (pw.knownNode(nodeid)) { | |
107 if (!common.contains(nodeid)) { | |
108 throw new HgBadStateException("Bundle shall not report known nodes other than roots we've supplied"); | |
109 } | |
110 localIndex = hgRepo.getChangelog().getLocalRevision(nodeid); | |
111 return; | |
112 } | |
113 System.out.printf("changeset: %d:%s\n", ++localIndex, nodeid.toString()); | |
114 System.out.printf("user: %s\n", cset.user()); | |
115 System.out.printf("date: %s\n", cset.dateString()); | |
116 System.out.printf("comment: %s\n\n", cset.comment()); | |
117 | |
118 } | |
119 }); | |
90 } | 120 } |
91 | 121 |
92 | 122 // returns in order from branch root to head |
123 // for a non-empty BranchChain, shall return modifiable list | |
93 private static List<Nodeid> visitBranches(RepositoryComparator repoCompare, BranchChain bc) throws HgException { | 124 private static List<Nodeid> visitBranches(RepositoryComparator repoCompare, BranchChain bc) throws HgException { |
94 if (bc == null) { | 125 if (bc == null) { |
95 return Collections.emptyList(); | 126 return Collections.emptyList(); |
96 } | 127 } |
97 List<Nodeid> mine = repoCompare.completeBranch(bc.branchRoot, bc.branchHead); | 128 List<Nodeid> mine = repoCompare.completeBranch(bc.branchRoot, bc.branchHead); |