Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgLookup.java @ 618:7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Thu, 16 May 2013 19:46:13 +0200 |
| parents | f97e81d13190 |
| children | 4e6179bde4fc |
comparison
equal
deleted
inserted
replaced
| 617:65c01508f002 | 618:7c0d2ce340b8 |
|---|---|
| 36 * Utility methods to find Mercurial repository at a given location | 36 * Utility methods to find Mercurial repository at a given location |
| 37 * | 37 * |
| 38 * @author Artem Tikhomirov | 38 * @author Artem Tikhomirov |
| 39 * @author TMate Software Ltd. | 39 * @author TMate Software Ltd. |
| 40 */ | 40 */ |
| 41 public class HgLookup { | 41 public class HgLookup implements SessionContext.Source { |
| 42 | 42 |
| 43 private ConfigFile globalCfg; | 43 private ConfigFile globalCfg; |
| 44 private SessionContext sessionContext; | 44 private SessionContext sessionContext; |
| 45 | 45 |
| 46 public HgLookup() { | 46 public HgLookup() { |
| 79 } while(dir != null); | 79 } while(dir != null); |
| 80 if (repository == null) { | 80 if (repository == null) { |
| 81 throw new HgRepositoryNotFoundException(String.format("Can't locate .hg/ directory of Mercurial repository in %s nor in parent dirs", location)).setLocation(location.getPath()); | 81 throw new HgRepositoryNotFoundException(String.format("Can't locate .hg/ directory of Mercurial repository in %s nor in parent dirs", location)).setLocation(location.getPath()); |
| 82 } | 82 } |
| 83 String repoPath = repository.getParentFile().getAbsolutePath(); | 83 String repoPath = repository.getParentFile().getAbsolutePath(); |
| 84 HgRepository rv = new HgRepository(getContext(), repoPath, repository); | 84 HgRepository rv = new HgRepository(getSessionContext(), repoPath, repository); |
| 85 int requiresFlags = rv.getImplHelper().getRequiresFlags(); | 85 int requiresFlags = rv.getImplHelper().getRequiresFlags(); |
| 86 if ((requiresFlags & RequiresFile.REVLOGV1) == 0) { | 86 if ((requiresFlags & RequiresFile.REVLOGV1) == 0) { |
| 87 throw new HgRepositoryNotFoundException(String.format("%s: repository version is not supported (Mercurial <0.9?)", repoPath)).setLocation(location.getPath()); | 87 throw new HgRepositoryNotFoundException(String.format("%s: repository version is not supported (Mercurial <0.9?)", repoPath)).setLocation(location.getPath()); |
| 88 } | 88 } |
| 89 return rv; | 89 return rv; |
| 91 | 91 |
| 92 public HgBundle loadBundle(File location) throws HgRepositoryNotFoundException { | 92 public HgBundle loadBundle(File location) throws HgRepositoryNotFoundException { |
| 93 if (location == null || !location.canRead()) { | 93 if (location == null || !location.canRead()) { |
| 94 throw new HgRepositoryNotFoundException(String.format("Can't read file %s", location)).setLocation(String.valueOf(location)); | 94 throw new HgRepositoryNotFoundException(String.format("Can't read file %s", location)).setLocation(String.valueOf(location)); |
| 95 } | 95 } |
| 96 return new HgBundle(getContext(), new DataAccessProvider(getContext()), location).link(); | 96 return new HgBundle(getSessionContext(), new DataAccessProvider(getSessionContext()), location).link(); |
| 97 } | 97 } |
| 98 | 98 |
| 99 /** | 99 /** |
| 100 * Try to instantiate remote server using an immediate url or an url from configuration files | 100 * Try to instantiate remote server using an immediate url or an url from configuration files |
| 101 * | 101 * |
| 132 url = new URL(server); | 132 url = new URL(server); |
| 133 } catch (MalformedURLException ex) { | 133 } catch (MalformedURLException ex) { |
| 134 throw new HgBadArgumentException(String.format("Found %s server spec in the config, but failed to initialize with it", key), ex); | 134 throw new HgBadArgumentException(String.format("Found %s server spec in the config, but failed to initialize with it", key), ex); |
| 135 } | 135 } |
| 136 } | 136 } |
| 137 return new HgRemoteRepository(getContext(), url); | 137 return new HgRemoteRepository(getSessionContext(), url); |
| 138 } | 138 } |
| 139 | 139 |
| 140 public HgRemoteRepository detect(URL url) throws HgBadArgumentException { | 140 public HgRemoteRepository detect(URL url) throws HgBadArgumentException { |
| 141 if (url == null) { | 141 if (url == null) { |
| 142 throw new IllegalArgumentException(); | 142 throw new IllegalArgumentException(); |
| 143 } | 143 } |
| 144 if (Boolean.FALSE.booleanValue()) { | 144 if (Boolean.FALSE.booleanValue()) { |
| 145 throw Internals.notImplemented(); | 145 throw Internals.notImplemented(); |
| 146 } | 146 } |
| 147 return new HgRemoteRepository(getContext(), url); | 147 return new HgRemoteRepository(getSessionContext(), url); |
| 148 } | 148 } |
| 149 | 149 |
| 150 private ConfigFile getGlobalConfig() { | 150 private ConfigFile getGlobalConfig() { |
| 151 if (globalCfg == null) { | 151 if (globalCfg == null) { |
| 152 globalCfg = new ConfigFile(getContext()); | 152 globalCfg = new ConfigFile(getSessionContext()); |
| 153 try { | 153 try { |
| 154 globalCfg.addLocation(new File(System.getProperty("user.home"), ".hgrc")); | 154 globalCfg.addLocation(new File(System.getProperty("user.home"), ".hgrc")); |
| 155 } catch (HgInvalidFileException ex) { | 155 } catch (HgInvalidFileException ex) { |
| 156 // XXX perhaps, makes sense to let caller/client know that we've failed to read global config? | 156 // XXX perhaps, makes sense to let caller/client know that we've failed to read global config? |
| 157 getContext().getLog().dump(getClass(), Warn, ex, null); | 157 getSessionContext().getLog().dump(getClass(), Warn, ex, null); |
| 158 } | 158 } |
| 159 } | 159 } |
| 160 return globalCfg; | 160 return globalCfg; |
| 161 } | 161 } |
| 162 | 162 |
| 163 private SessionContext getContext() { | 163 public SessionContext getSessionContext() { |
| 164 if (sessionContext == null) { | 164 if (sessionContext == null) { |
| 165 sessionContext = new BasicSessionContext(null); | 165 sessionContext = new BasicSessionContext(null); |
| 166 } | 166 } |
| 167 return sessionContext; | 167 return sessionContext; |
| 168 } | 168 } |
