Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgLookup.java @ 423:9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Fri, 23 Mar 2012 22:51:18 +0100 |
| parents | dfb8405d996f |
| children | 48f993aa2f41 |
comparison
equal
deleted
inserted
replaced
| 422:5d1cc7366d04 | 423:9c9c442b5f2e |
|---|---|
| 20 import java.io.IOException; | 20 import java.io.IOException; |
| 21 import java.net.MalformedURLException; | 21 import java.net.MalformedURLException; |
| 22 import java.net.URL; | 22 import java.net.URL; |
| 23 | 23 |
| 24 import org.tmatesoft.hg.core.HgBadArgumentException; | 24 import org.tmatesoft.hg.core.HgBadArgumentException; |
| 25 import org.tmatesoft.hg.core.HgInvalidFileException; | 25 import org.tmatesoft.hg.core.HgRepositoryNotFoundException; |
| 26 import org.tmatesoft.hg.core.SessionContext; | 26 import org.tmatesoft.hg.core.SessionContext; |
| 27 import org.tmatesoft.hg.internal.BasicSessionContext; | 27 import org.tmatesoft.hg.internal.BasicSessionContext; |
| 28 import org.tmatesoft.hg.internal.ConfigFile; | 28 import org.tmatesoft.hg.internal.ConfigFile; |
| 29 import org.tmatesoft.hg.internal.DataAccessProvider; | 29 import org.tmatesoft.hg.internal.DataAccessProvider; |
| 30 | 30 |
| 44 | 44 |
| 45 public HgLookup(SessionContext ctx) { | 45 public HgLookup(SessionContext ctx) { |
| 46 sessionContext = ctx; | 46 sessionContext = ctx; |
| 47 } | 47 } |
| 48 | 48 |
| 49 public HgRepository detectFromWorkingDir() throws HgInvalidFileException { | 49 public HgRepository detectFromWorkingDir() throws HgRepositoryNotFoundException { |
| 50 return detect(System.getProperty("user.dir")); | 50 return detect(System.getProperty("user.dir")); |
| 51 } | 51 } |
| 52 | 52 |
| 53 public HgRepository detect(String location) throws HgInvalidFileException { | 53 public HgRepository detect(String location) throws HgRepositoryNotFoundException { |
| 54 return detect(new File(location)); | 54 return detect(new File(location)); |
| 55 } | 55 } |
| 56 | 56 |
| 57 // look up in specified location and above | 57 // look up in specified location and above |
| 58 public HgRepository detect(File location) throws HgInvalidFileException { | 58 public HgRepository detect(File location) throws HgRepositoryNotFoundException { |
| 59 File dir = location.getAbsoluteFile(); | 59 try { |
| 60 File repository; | 60 File dir = location.getAbsoluteFile(); |
| 61 do { | 61 File repository; |
| 62 repository = new File(dir, ".hg"); | 62 do { |
| 63 if (repository.exists() && repository.isDirectory()) { | 63 repository = new File(dir, ".hg"); |
| 64 break; | 64 if (repository.exists() && repository.isDirectory()) { |
| 65 break; | |
| 66 } | |
| 67 repository = null; | |
| 68 dir = dir.getParentFile(); | |
| 69 | |
| 70 } while(dir != null); | |
| 71 if (repository == null) { | |
| 72 throw new HgRepositoryNotFoundException(String.format("Can't locate .hg/ directory of Mercurial repository in %s nor in parent dirs", location)).setLocation(location.getPath()); | |
| 65 } | 73 } |
| 66 repository = null; | |
| 67 dir = dir.getParentFile(); | |
| 68 | |
| 69 } while(dir != null); | |
| 70 if (repository == null) { | |
| 71 // return invalid repository | |
| 72 return new HgRepository(location.getPath()); | |
| 73 } | |
| 74 try { | |
| 75 String repoPath = repository.getParentFile().getCanonicalPath(); | 74 String repoPath = repository.getParentFile().getCanonicalPath(); |
| 76 return new HgRepository(getContext(), repoPath, repository); | 75 return new HgRepository(getContext(), repoPath, repository); |
| 77 } catch (IOException ex) { | 76 } catch (IOException ex) { |
| 78 throw new HgInvalidFileException(location.toString(), ex, location); | 77 HgRepositoryNotFoundException t = new HgRepositoryNotFoundException("Failed to access repository"); |
| 78 t.setLocation(location.getPath()).initCause(ex); | |
| 79 throw t; | |
| 79 } | 80 } |
| 80 } | 81 } |
| 81 | 82 |
| 82 public HgBundle loadBundle(File location) throws HgInvalidFileException { | 83 public HgBundle loadBundle(File location) throws HgRuntimeException/*FIXME need checked exception for can't find*/ { |
| 83 if (location == null || !location.canRead()) { | 84 if (location == null || !location.canRead()) { |
| 84 throw new HgInvalidFileException(String.format("Can't read file %s", location == null ? null : location.getPath()), null, location); | 85 throw new HgInvalidFileException(String.format("Can't read file %s", location == null ? null : location.getPath()), null, location); |
| 85 } | 86 } |
| 86 return new HgBundle(getContext(), new DataAccessProvider(getContext()), location).link(); | 87 return new HgBundle(getContext(), new DataAccessProvider(getContext()), location).link(); |
| 87 } | 88 } |
