comparison src/org/tmatesoft/hg/core/HgOutgoingCommand.java @ 195:c9b305df0b89

Optimization: use ParentWalker to get changeset's parents, if possible. Do not keep duplicating nodeids and strings in manifest revisions
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Fri, 15 Apr 2011 05:17:44 +0200
parents 344e8d7e4d6e
children ffc5f6d59f7e
comparison
equal deleted inserted replaced
194:344e8d7e4d6e 195:c9b305df0b89
36 36
37 private final HgRepository localRepo; 37 private final HgRepository localRepo;
38 private HgRemoteRepository remoteRepo; 38 private HgRemoteRepository remoteRepo;
39 private boolean includeSubrepo; 39 private boolean includeSubrepo;
40 private RepositoryComparator comparator; 40 private RepositoryComparator comparator;
41 private HgChangelog.ParentWalker parentHelper;
41 private Set<String> branches; 42 private Set<String> branches;
42 43
43 public HgOutgoingCommand(HgRepository hgRepo) { 44 public HgOutgoingCommand(HgRepository hgRepo) {
44 localRepo = hgRepo; 45 localRepo = hgRepo;
45 } 46 }
102 */ 103 */
103 public void executeFull(final HgLogCommand.Handler handler) throws HgException, CancelledException { 104 public void executeFull(final HgLogCommand.Handler handler) throws HgException, CancelledException {
104 if (handler == null) { 105 if (handler == null) {
105 throw new IllegalArgumentException("Delegate can't be null"); 106 throw new IllegalArgumentException("Delegate can't be null");
106 } 107 }
107 ChangesetTransformer inspector = new ChangesetTransformer(localRepo, handler); 108 ChangesetTransformer inspector = new ChangesetTransformer(localRepo, handler, getParentHelper());
108 inspector.limitBranches(branches); 109 inspector.limitBranches(branches);
109 getComparator(handler).visitLocalOnlyRevisions(inspector); 110 getComparator(handler).visitLocalOnlyRevisions(inspector);
110 } 111 }
111 112
112 private RepositoryComparator getComparator(Object context) throws HgException, CancelledException { 113 private RepositoryComparator getComparator(Object context) throws HgException, CancelledException {
113 if (remoteRepo == null) { 114 if (remoteRepo == null) {
114 throw new IllegalArgumentException("Shall specify remote repository to compare against"); 115 throw new IllegalArgumentException("Shall specify remote repository to compare against");
115 } 116 }
116 if (comparator == null) { 117 if (comparator == null) {
117 HgChangelog.ParentWalker pw = localRepo.getChangelog().new ParentWalker(); 118 comparator = new RepositoryComparator(getParentHelper(), remoteRepo);
118 pw.init();
119 comparator = new RepositoryComparator(pw, remoteRepo);
120 comparator.compare(context); 119 comparator.compare(context);
121 } 120 }
122 return comparator; 121 return comparator;
123 } 122 }
123
124 private HgChangelog.ParentWalker getParentHelper() {
125 if (parentHelper == null) {
126 parentHelper = localRepo.getChangelog().new ParentWalker();
127 parentHelper.init();
128 }
129 return parentHelper;
130 }
131
124 } 132 }