Mercurial > hg4j
diff src/org/tmatesoft/hg/repo/HgRepository.java @ 295:981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 16 Sep 2011 05:35:32 +0200 |
parents | a415fe296a50 |
children | c3d2233ba842 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/repo/HgRepository.java Wed Sep 14 04:41:57 2011 +0200 +++ b/src/org/tmatesoft/hg/repo/HgRepository.java Fri Sep 16 05:35:32 2011 +0200 @@ -27,13 +27,13 @@ import org.tmatesoft.hg.core.HgDataStreamException; import org.tmatesoft.hg.core.Nodeid; +import org.tmatesoft.hg.core.SessionContext; import org.tmatesoft.hg.internal.ByteArrayChannel; import org.tmatesoft.hg.internal.ConfigFile; import org.tmatesoft.hg.internal.DataAccessProvider; import org.tmatesoft.hg.internal.Experimental; import org.tmatesoft.hg.internal.Filter; import org.tmatesoft.hg.internal.Internals; -import org.tmatesoft.hg.internal.RequiresFile; import org.tmatesoft.hg.internal.RevlogStream; import org.tmatesoft.hg.internal.SubrepoManager; import org.tmatesoft.hg.util.CancelledException; @@ -73,6 +73,7 @@ private final PathRewrite dataPathHelper; private final PathRewrite repoPathHelper; private final boolean isCaseSensitiveFileSystem; + private final SessionContext sessionContext; private HgChangelog changelog; private HgManifest manifest; @@ -95,20 +96,23 @@ dataAccess = null; dataPathHelper = repoPathHelper = null; normalizePath = null; + sessionContext = null; isCaseSensitiveFileSystem = !Internals.runningOnWindows(); } - HgRepository(String repositoryPath, File repositoryRoot) { + HgRepository(SessionContext ctx, String repositoryPath, File repositoryRoot) { assert ".hg".equals(repositoryRoot.getName()) && repositoryRoot.isDirectory(); assert repositoryPath != null; assert repositoryRoot != null; + assert ctx != null; repoDir = repositoryRoot; workingDir = repoDir.getParentFile(); if (workingDir == null) { throw new IllegalArgumentException(repoDir.toString()); } repoLocation = repositoryPath; - dataAccess = new DataAccessProvider(); + sessionContext = ctx; + dataAccess = new DataAccessProvider(ctx); final boolean runningOnWindows = Internals.runningOnWindows(); isCaseSensitiveFileSystem = !runningOnWindows; if (runningOnWindows) { @@ -127,7 +131,7 @@ } else { normalizePath = new PathRewrite.Empty(); // or strip leading slash, perhaps? } - parseRequires(); + impl.parseRequires(this, new File(repoDir, "requires")); dataPathHelper = impl.buildDataFilesHelper(); repoPathHelper = impl.buildRepositoryFilesHelper(); } @@ -176,20 +180,23 @@ final String content = new String(sink.toArray(), "UTF8"); tags.readGlobal(new StringReader(content)); } catch (CancelledException ex) { - ex.printStackTrace(); // IGNORE, can't happen, we did not configure cancellation + // IGNORE, can't happen, we did not configure cancellation + getContext().getLog().debug(getClass(), ex, null); } catch (HgDataStreamException ex) { - ex.printStackTrace(); // FIXME need to react + getContext().getLog().error(getClass(), ex, null); + // FIXME need to react } catch (IOException ex) { // UnsupportedEncodingException can't happen (UTF8) // only from readGlobal. Need to reconsider exceptions thrown from there - ex.printStackTrace(); // XXX need to decide what to do this. failure to read single revision shall not break complete cycle + getContext().getLog().error(getClass(), ex, null); + // XXX need to decide what to do this. failure to read single revision shall not break complete cycle } } } tags.readGlobal(new File(getWorkingDir(), ".hgtags")); // XXX replace with HgDataFile.workingCopy tags.readLocal(new File(repoDir, "localtags")); } catch (IOException ex) { - ex.printStackTrace(); // FIXME log or othewise report + getContext().getLog().error(getClass(), ex, null); } } return tags; @@ -302,7 +309,7 @@ File ignoreFile = new File(getWorkingDir(), ".hgignore"); ignore.read(ignoreFile); } catch (IOException ex) { - ex.printStackTrace(); // log warn + getContext().getLog().warn(getClass(), ex, null); } } return ignore; @@ -334,7 +341,7 @@ fake.deleteOnExit(); return new RevlogStream(dataAccess, fake); } catch (IOException ex) { - ex.printStackTrace(); // FIXME report in debug + getContext().getLog().info(getClass(), ex, null); } } } @@ -344,11 +351,15 @@ // can't expose internal class, otherwise seems reasonable to have it in API /*package-local*/ ConfigFile getConfigFile() { if (configFile == null) { - configFile = impl.newConfigFile(); - configFile.addLocation(new File(System.getProperty("user.home"), ".hgrc")); - // last one, overrides anything else - // <repo>/.hg/hgrc - configFile.addLocation(new File(getRepositoryRoot(), "hgrc")); + configFile = new ConfigFile(); + try { + configFile.addLocation(new File(System.getProperty("user.home"), ".hgrc")); + // last one, overrides anything else + // <repo>/.hg/hgrc + configFile.addLocation(new File(getRepositoryRoot(), "hgrc")); + } catch (IOException ex) { + getContext().getLog().warn(getClass(), ex, "Errors while reading user configuration file"); + } } return configFile; } @@ -364,6 +375,10 @@ /*package-local*/ File getFile(HgDataFile dataFile) { return new File(getWorkingDir(), dataFile.getPath().toString()); } + + /*package-local*/ SessionContext getContext() { + return sessionContext; + } private List<Filter> instantiateFilters(Path p, Filter.Options opts) { List<Filter.Factory> factories = impl.getFilters(this, getConfigFile()); @@ -379,9 +394,4 @@ } return rv; } - - private void parseRequires() { - new RequiresFile().parse(impl, new File(repoDir, "requires")); - } - }