Mercurial > hg4j
comparison src/org/tmatesoft/hg/core/HgIncomingCommand.java @ 366:189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Fri, 16 Dec 2011 04:43:18 +0100 |
| parents | d68dcb3b5f49 |
| children | 9517df1ef7ec |
comparison
equal
deleted
inserted
replaced
| 365:3572fcb06473 | 366:189dc6dc1c3e |
|---|---|
| 98 * Lightweight check for incoming changes, gives only list of revisions to pull. | 98 * Lightweight check for incoming changes, gives only list of revisions to pull. |
| 99 * Reported changes are from any branch (limits set by {@link #branch(String)} are not taken into account. | 99 * Reported changes are from any branch (limits set by {@link #branch(String)} are not taken into account. |
| 100 * | 100 * |
| 101 * @return list of nodes present at remote and missing locally | 101 * @return list of nodes present at remote and missing locally |
| 102 * @throws HgRemoteConnectionException when failed to communicate with remote repository | 102 * @throws HgRemoteConnectionException when failed to communicate with remote repository |
| 103 * @throws HgInvalidControlFileException FIXME | |
| 103 * @throws CancelledException | 104 * @throws CancelledException |
| 104 */ | 105 */ |
| 105 public List<Nodeid> executeLite() throws HgRemoteConnectionException, CancelledException { | 106 public List<Nodeid> executeLite() throws HgRemoteConnectionException, HgInvalidControlFileException, CancelledException { |
| 106 LinkedHashSet<Nodeid> result = new LinkedHashSet<Nodeid>(); | 107 LinkedHashSet<Nodeid> result = new LinkedHashSet<Nodeid>(); |
| 107 RepositoryComparator repoCompare = getComparator(); | 108 RepositoryComparator repoCompare = getComparator(); |
| 108 for (BranchChain bc : getMissingBranches()) { | 109 for (BranchChain bc : getMissingBranches()) { |
| 109 List<Nodeid> missing = repoCompare.visitBranches(bc); | 110 List<Nodeid> missing = repoCompare.visitBranches(bc); |
| 110 HashSet<Nodeid> common = new HashSet<Nodeid>(); // ordering is irrelevant | 111 HashSet<Nodeid> common = new HashSet<Nodeid>(); // ordering is irrelevant |
| 119 | 120 |
| 120 /** | 121 /** |
| 121 * Full information about incoming changes | 122 * Full information about incoming changes |
| 122 * | 123 * |
| 123 * @throws HgRemoteConnectionException when failed to communicate with remote repository | 124 * @throws HgRemoteConnectionException when failed to communicate with remote repository |
| 125 * @throws HgInvalidControlFileException FIXME | |
| 124 * @throws HgInvalidFileException to indicate failure working with locally downloaded changes in a bundle file | 126 * @throws HgInvalidFileException to indicate failure working with locally downloaded changes in a bundle file |
| 125 * @throws HgCallbackTargetException to re-throw exception from the handler | 127 * @throws HgCallbackTargetException to re-throw exception from the handler |
| 126 * @throws CancelledException | 128 * @throws CancelledException |
| 127 */ | 129 */ |
| 128 public void executeFull(final HgChangesetHandler handler) throws HgRemoteConnectionException, HgInvalidFileException, HgCallbackTargetException, CancelledException { | 130 public void executeFull(final HgChangesetHandler handler) throws HgRemoteConnectionException, HgInvalidControlFileException, HgInvalidFileException, HgCallbackTargetException, CancelledException { |
| 129 if (handler == null) { | 131 if (handler == null) { |
| 130 throw new IllegalArgumentException("Delegate can't be null"); | 132 throw new IllegalArgumentException("Delegate can't be null"); |
| 131 } | 133 } |
| 132 final List<Nodeid> common = getCommon(); | 134 final List<Nodeid> common = getCommon(); |
| 133 HgBundle changegroup = remoteRepo.getChanges(common); | 135 HgBundle changegroup = remoteRepo.getChanges(common); |
| 159 } finally { | 161 } finally { |
| 160 ps.done(); | 162 ps.done(); |
| 161 } | 163 } |
| 162 } | 164 } |
| 163 | 165 |
| 164 private RepositoryComparator getComparator() throws CancelledException { | 166 private RepositoryComparator getComparator() throws HgInvalidControlFileException, CancelledException { |
| 165 if (remoteRepo == null) { | 167 if (remoteRepo == null) { |
| 166 throw new IllegalArgumentException("Shall specify remote repository to compare against", null); | 168 throw new IllegalArgumentException("Shall specify remote repository to compare against", null); |
| 167 } | 169 } |
| 168 if (comparator == null) { | 170 if (comparator == null) { |
| 169 comparator = new RepositoryComparator(getParentHelper(), remoteRepo); | 171 comparator = new RepositoryComparator(getParentHelper(), remoteRepo); |
| 170 // comparator.compare(context); // XXX meanwhile we use distinct path to calculate common | 172 // comparator.compare(context); // XXX meanwhile we use distinct path to calculate common |
| 171 } | 173 } |
| 172 return comparator; | 174 return comparator; |
| 173 } | 175 } |
| 174 | 176 |
| 175 private HgChangelog.ParentWalker getParentHelper() { | 177 private HgChangelog.ParentWalker getParentHelper() throws HgInvalidControlFileException { |
| 176 if (parentHelper == null) { | 178 if (parentHelper == null) { |
| 177 parentHelper = localRepo.getChangelog().new ParentWalker(); | 179 parentHelper = localRepo.getChangelog().new ParentWalker(); |
| 178 parentHelper.init(); | 180 parentHelper.init(); |
| 179 } | 181 } |
| 180 return parentHelper; | 182 return parentHelper; |
| 181 } | 183 } |
| 182 | 184 |
| 183 private List<BranchChain> getMissingBranches() throws HgRemoteConnectionException, CancelledException { | 185 private List<BranchChain> getMissingBranches() throws HgRemoteConnectionException, HgInvalidControlFileException, CancelledException { |
| 184 if (missingBranches == null) { | 186 if (missingBranches == null) { |
| 185 missingBranches = getComparator().calculateMissingBranches(); | 187 missingBranches = getComparator().calculateMissingBranches(); |
| 186 } | 188 } |
| 187 return missingBranches; | 189 return missingBranches; |
| 188 } | 190 } |
| 189 | 191 |
| 190 private List<Nodeid> getCommon() throws HgRemoteConnectionException, CancelledException { | 192 private List<Nodeid> getCommon() throws HgRemoteConnectionException, HgInvalidControlFileException, CancelledException { |
| 191 // return getComparator(context).getCommon(); | 193 // return getComparator(context).getCommon(); |
| 192 final LinkedHashSet<Nodeid> common = new LinkedHashSet<Nodeid>(); | 194 final LinkedHashSet<Nodeid> common = new LinkedHashSet<Nodeid>(); |
| 193 // XXX common can be obtained from repoCompare, but at the moment it would almost duplicate work of calculateMissingBranches | 195 // XXX common can be obtained from repoCompare, but at the moment it would almost duplicate work of calculateMissingBranches |
| 194 // once I refactor latter, common shall be taken from repoCompare. | 196 // once I refactor latter, common shall be taken from repoCompare. |
| 195 RepositoryComparator repoCompare = getComparator(); | 197 RepositoryComparator repoCompare = getComparator(); |
