Mercurial > jhg
comparison src/org/tmatesoft/hg/core/HgIncomingCommand.java @ 427:31a89587eb04
FIXMEs: consistent names, throws for commands and their handlers. Use of checked exceptions in hi-level api
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 29 Mar 2012 17:14:35 +0200 |
parents | 9c9c442b5f2e |
children | 1fc0da631200 |
comparison
equal
deleted
inserted
replaced
426:063b0663495a | 427:31a89587eb04 |
---|---|
27 | 27 |
28 import org.tmatesoft.hg.internal.RepositoryComparator; | 28 import org.tmatesoft.hg.internal.RepositoryComparator; |
29 import org.tmatesoft.hg.internal.RepositoryComparator.BranchChain; | 29 import org.tmatesoft.hg.internal.RepositoryComparator.BranchChain; |
30 import org.tmatesoft.hg.repo.HgBundle; | 30 import org.tmatesoft.hg.repo.HgBundle; |
31 import org.tmatesoft.hg.repo.HgChangelog; | 31 import org.tmatesoft.hg.repo.HgChangelog; |
32 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; | |
32 import org.tmatesoft.hg.repo.HgInvalidControlFileException; | 33 import org.tmatesoft.hg.repo.HgInvalidControlFileException; |
33 import org.tmatesoft.hg.repo.HgInvalidFileException; | |
34 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; | |
35 import org.tmatesoft.hg.repo.HgInvalidStateException; | 34 import org.tmatesoft.hg.repo.HgInvalidStateException; |
36 import org.tmatesoft.hg.repo.HgRemoteRepository; | 35 import org.tmatesoft.hg.repo.HgRemoteRepository; |
37 import org.tmatesoft.hg.repo.HgRepository; | 36 import org.tmatesoft.hg.repo.HgRepository; |
37 import org.tmatesoft.hg.repo.HgRuntimeException; | |
38 import org.tmatesoft.hg.util.CancelledException; | 38 import org.tmatesoft.hg.util.CancelledException; |
39 import org.tmatesoft.hg.util.ProgressSupport; | 39 import org.tmatesoft.hg.util.ProgressSupport; |
40 | 40 |
41 /** | 41 /** |
42 * Command to find out changes available in a remote repository, missing locally. | 42 * Command to find out changes available in a remote repository, missing locally. |
101 * Lightweight check for incoming changes, gives only list of revisions to pull. | 101 * Lightweight check for incoming changes, gives only list of revisions to pull. |
102 * Reported changes are from any branch (limits set by {@link #branch(String)} are not taken into account. | 102 * Reported changes are from any branch (limits set by {@link #branch(String)} are not taken into account. |
103 * | 103 * |
104 * @return list of nodes present at remote and missing locally | 104 * @return list of nodes present at remote and missing locally |
105 * @throws HgRemoteConnectionException when failed to communicate with remote repository | 105 * @throws HgRemoteConnectionException when failed to communicate with remote repository |
106 * @throws HgInvalidControlFileException if access to revlog index/data entry failed | 106 * @throws HgException subclass thereof to indicate specific issue with the command arguments or repository state |
107 * @throws CancelledException if execution of the command was cancelled | 107 * @throws CancelledException if execution of the command was cancelled |
108 */ | 108 */ |
109 public List<Nodeid> executeLite() throws HgRemoteConnectionException, HgInvalidControlFileException, CancelledException { | 109 public List<Nodeid> executeLite() throws HgException, CancelledException { |
110 LinkedHashSet<Nodeid> result = new LinkedHashSet<Nodeid>(); | 110 try { |
111 RepositoryComparator repoCompare = getComparator(); | 111 LinkedHashSet<Nodeid> result = new LinkedHashSet<Nodeid>(); |
112 for (BranchChain bc : getMissingBranches()) { | 112 RepositoryComparator repoCompare = getComparator(); |
113 List<Nodeid> missing = repoCompare.visitBranches(bc); | 113 for (BranchChain bc : getMissingBranches()) { |
114 HashSet<Nodeid> common = new HashSet<Nodeid>(); // ordering is irrelevant | 114 List<Nodeid> missing = repoCompare.visitBranches(bc); |
115 repoCompare.collectKnownRoots(bc, common); | 115 HashSet<Nodeid> common = new HashSet<Nodeid>(); // ordering is irrelevant |
116 // missing could only start with common elements. Once non-common, rest is just distinct branch revision trails. | 116 repoCompare.collectKnownRoots(bc, common); |
117 for (Iterator<Nodeid> it = missing.iterator(); it.hasNext() && common.contains(it.next()); it.remove()) ; | 117 // missing could only start with common elements. Once non-common, rest is just distinct branch revision trails. |
118 result.addAll(missing); | 118 for (Iterator<Nodeid> it = missing.iterator(); it.hasNext() && common.contains(it.next()); it.remove()) ; |
119 } | 119 result.addAll(missing); |
120 ArrayList<Nodeid> rv = new ArrayList<Nodeid>(result); | 120 } |
121 return rv; | 121 ArrayList<Nodeid> rv = new ArrayList<Nodeid>(result); |
122 return rv; | |
123 } catch (HgRuntimeException ex) { | |
124 throw new HgLibraryFailureException(ex); | |
125 } | |
122 } | 126 } |
123 | 127 |
124 /** | 128 /** |
125 * Full information about incoming changes | 129 * Full information about incoming changes |
126 * | 130 * |
127 * @throws HgRemoteConnectionException when failed to communicate with remote repository | |
128 * @throws HgInvalidControlFileException if access to revlog index/data entry failed | |
129 * @throws HgInvalidFileException to indicate failure working with locally downloaded changes in a bundle file | |
130 * @throws HgCallbackTargetException to re-throw exception from the handler | 131 * @throws HgCallbackTargetException to re-throw exception from the handler |
132 * @throws HgException subclass thereof to indicate specific issue with the command arguments or repository state | |
131 * @throws CancelledException if execution of the command was cancelled | 133 * @throws CancelledException if execution of the command was cancelled |
132 */ | 134 */ |
133 public void executeFull(final HgChangesetHandler handler) throws HgRemoteConnectionException, HgInvalidControlFileException, HgInvalidFileException, HgCallbackTargetException, CancelledException { | 135 public void executeFull(final HgChangesetHandler handler) throws HgCallbackTargetException, HgException, CancelledException { |
134 if (handler == null) { | 136 if (handler == null) { |
135 throw new IllegalArgumentException("Delegate can't be null"); | 137 throw new IllegalArgumentException("Delegate can't be null"); |
136 } | 138 } |
137 final List<Nodeid> common = getCommon(); | 139 final List<Nodeid> common = getCommon(); |
138 HgBundle changegroup = remoteRepo.getChanges(common); | 140 HgBundle changegroup = remoteRepo.getChanges(common); |
159 } | 161 } |
160 transformer.next(localIndex++, nodeid, cset); | 162 transformer.next(localIndex++, nodeid, cset); |
161 } | 163 } |
162 }); | 164 }); |
163 transformer.checkFailure(); | 165 transformer.checkFailure(); |
166 } catch (HgRuntimeException ex) { | |
167 throw new HgLibraryFailureException(ex); | |
164 } finally { | 168 } finally { |
165 ps.done(); | 169 ps.done(); |
166 } | 170 } |
167 } | 171 } |
168 | 172 |