Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgBranches.java @ 354:5f9073eabf06
Propagate errors with exceptions up to a end client
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Thu, 01 Dec 2011 05:21:40 +0100 |
| parents | a0864b2892cd |
| children | 189dc6dc1c3e |
comparison
equal
deleted
inserted
replaced
| 353:0f3687e79f5a | 354:5f9073eabf06 |
|---|---|
| 32 import java.util.List; | 32 import java.util.List; |
| 33 import java.util.Map; | 33 import java.util.Map; |
| 34 import java.util.TreeMap; | 34 import java.util.TreeMap; |
| 35 import java.util.regex.Pattern; | 35 import java.util.regex.Pattern; |
| 36 | 36 |
| 37 import org.tmatesoft.hg.core.HgException; | |
| 38 import org.tmatesoft.hg.core.HgInvalidControlFileException; | |
| 39 import org.tmatesoft.hg.core.HgInvalidRevisionException; | |
| 37 import org.tmatesoft.hg.core.Nodeid; | 40 import org.tmatesoft.hg.core.Nodeid; |
| 38 import org.tmatesoft.hg.internal.Experimental; | 41 import org.tmatesoft.hg.internal.Experimental; |
| 39 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; | 42 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; |
| 40 import org.tmatesoft.hg.util.ProgressSupport; | 43 import org.tmatesoft.hg.util.ProgressSupport; |
| 41 | 44 |
| 100 // log error, but otherwise do nothing | 103 // log error, but otherwise do nothing |
| 101 repo.getContext().getLog().warn(getClass(), ex, null); | 104 repo.getContext().getLog().warn(getClass(), ex, null); |
| 102 // FALL THROUGH to return -1 indicating no cache information | 105 // FALL THROUGH to return -1 indicating no cache information |
| 103 } catch (NumberFormatException ex) { | 106 } catch (NumberFormatException ex) { |
| 104 repo.getContext().getLog().warn(getClass(), ex, null); | 107 repo.getContext().getLog().warn(getClass(), ex, null); |
| 108 // FALL THROUGH | |
| 109 } catch (HgInvalidControlFileException ex) { | |
| 110 // shall not happen, thus log as error | |
| 111 repo.getContext().getLog().error(getClass(), ex, null); | |
| 112 // FALL THROUGH | |
| 113 } catch (HgInvalidRevisionException ex) { | |
| 114 repo.getContext().getLog().error(getClass(), ex, null); | |
| 105 // FALL THROUGH | 115 // FALL THROUGH |
| 106 } finally { | 116 } finally { |
| 107 if (br != null) { | 117 if (br != null) { |
| 108 try { | 118 try { |
| 109 br.close(); | 119 br.close(); |
| 227 } | 237 } |
| 228 | 238 |
| 229 /** | 239 /** |
| 230 * Writes down information about repository branches in a format Mercurial native client can understand. | 240 * Writes down information about repository branches in a format Mercurial native client can understand. |
| 231 * Cache file gets overwritten only if it is out of date (i.e. misses some branch information) | 241 * Cache file gets overwritten only if it is out of date (i.e. misses some branch information) |
| 242 * @throws IOException if write to cache file failed | |
| 243 * @throws HgException subclass of {@link HgException} in case of repository access issue | |
| 232 */ | 244 */ |
| 233 @Experimental(reason="Usage of cache isn't supposed to be public knowledge") | 245 @Experimental(reason="Usage of cache isn't supposed to be public knowledge") |
| 234 public void writeCache() { | 246 public void writeCache() throws IOException, HgException { |
| 235 if (isCacheActual) { | 247 if (isCacheActual) { |
| 236 return; | 248 return; |
| 237 } | 249 } |
| 238 try { | 250 File branchheadsCache = getCacheFile(); |
| 239 File branchheadsCache = getCacheFile(); | 251 if (!branchheadsCache.exists()) { |
| 240 if (!branchheadsCache.exists()) { | 252 branchheadsCache.getParentFile().mkdirs(); // just in case cache/ doesn't exist jet |
| 241 branchheadsCache.getParentFile().mkdirs(); // just in case cache/ doesn't exist jet | 253 branchheadsCache.createNewFile(); |
| 242 branchheadsCache.createNewFile(); | 254 } |
| 243 } | 255 if (!branchheadsCache.canWrite()) { |
| 244 if (!branchheadsCache.canWrite()) { | 256 return; |
| 245 return; | 257 } |
| 246 } | 258 final int lastRev = repo.getChangelog().getLastRevision(); |
| 247 final int lastRev = repo.getChangelog().getLastRevision(); | 259 final Nodeid lastNid = repo.getChangelog().getRevision(lastRev); |
| 248 final Nodeid lastNid = repo.getChangelog().getRevision(lastRev); | 260 BufferedWriter bw = new BufferedWriter(new FileWriter(branchheadsCache)); |
| 249 BufferedWriter bw = new BufferedWriter(new FileWriter(branchheadsCache)); | 261 bw.write(lastNid.toString()); |
| 250 bw.write(lastNid.toString()); | 262 bw.write((int) ' '); |
| 251 bw.write((int) ' '); | 263 bw.write(Integer.toString(lastRev)); |
| 252 bw.write(Integer.toString(lastRev)); | 264 bw.write("\n"); |
| 253 bw.write("\n"); | 265 for (BranchInfo bi : branches.values()) { |
| 254 for (BranchInfo bi : branches.values()) { | 266 for (Nodeid nid : bi.getHeads()) { |
| 255 for (Nodeid nid : bi.getHeads()) { | 267 bw.write(nid.toString()); |
| 256 bw.write(nid.toString()); | 268 bw.write((int) ' '); |
| 257 bw.write((int) ' '); | 269 bw.write(bi.getName()); |
| 258 bw.write(bi.getName()); | 270 bw.write("\n"); |
| 259 bw.write("\n"); | 271 } |
| 260 } | 272 } |
| 261 } | 273 bw.close(); |
| 262 bw.close(); | |
| 263 } catch (IOException ex) { | |
| 264 repo.getContext().getLog().error(getClass(), ex, "Error writing branch cache file"); | |
| 265 } | |
| 266 } | 274 } |
| 267 | 275 |
| 268 private File getCacheFile() { | 276 private File getCacheFile() { |
| 269 // prior to 1.8 used to be .hg/branchheads.cache | 277 // prior to 1.8 used to be .hg/branchheads.cache |
| 270 return new File(repo.getRepositoryRoot(), "cache/branchheads"); | 278 return new File(repo.getRepositoryRoot(), "cache/branchheads"); |
