Mercurial > hg4j
comparison src/org/tmatesoft/hg/repo/HgRepository.java @ 318:c3d2233ba842
Shall propagate errors to clients, not work around them silently
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 29 Sep 2011 03:35:59 +0200 |
parents | 981f9f50bb6c |
children | a37ce7145c3f |
comparison
equal
deleted
inserted
replaced
317:09628675bcee | 318:c3d2233ba842 |
---|---|
24 import java.util.Collections; | 24 import java.util.Collections; |
25 import java.util.HashMap; | 25 import java.util.HashMap; |
26 import java.util.List; | 26 import java.util.List; |
27 | 27 |
28 import org.tmatesoft.hg.core.HgDataStreamException; | 28 import org.tmatesoft.hg.core.HgDataStreamException; |
29 import org.tmatesoft.hg.core.HgInvalidControlFileException; | |
29 import org.tmatesoft.hg.core.Nodeid; | 30 import org.tmatesoft.hg.core.Nodeid; |
30 import org.tmatesoft.hg.core.SessionContext; | 31 import org.tmatesoft.hg.core.SessionContext; |
31 import org.tmatesoft.hg.internal.ByteArrayChannel; | 32 import org.tmatesoft.hg.internal.ByteArrayChannel; |
32 import org.tmatesoft.hg.internal.ConfigFile; | 33 import org.tmatesoft.hg.internal.ConfigFile; |
33 import org.tmatesoft.hg.internal.DataAccessProvider; | 34 import org.tmatesoft.hg.internal.DataAccessProvider; |
164 this.manifest = new HgManifest(this, content); | 165 this.manifest = new HgManifest(this, content); |
165 } | 166 } |
166 return this.manifest; | 167 return this.manifest; |
167 } | 168 } |
168 | 169 |
169 public HgTags getTags() { | 170 public HgTags getTags() throws HgInvalidControlFileException { |
170 if (tags == null) { | 171 if (tags == null) { |
171 tags = new HgTags(this); | 172 tags = new HgTags(this); |
172 try { | 173 HgDataFile hgTags = getFileNode(".hgtags"); |
173 HgDataFile hgTags = getFileNode(".hgtags"); | 174 if (hgTags.exists()) { |
174 if (hgTags.exists()) { | 175 for (int i = 0; i <= hgTags.getLastRevision(); i++) { // FIXME in fact, would be handy to have walk(start,end) |
175 for (int i = 0; i <= hgTags.getLastRevision(); i++) { // FIXME in fact, would be handy to have walk(start,end) | 176 // method for data files as well, though it looks odd. |
176 // method for data files as well, though it looks odd. | 177 try { |
177 try { | 178 ByteArrayChannel sink = new ByteArrayChannel(); |
178 ByteArrayChannel sink = new ByteArrayChannel(); | 179 hgTags.content(i, sink); |
179 hgTags.content(i, sink); | 180 final String content = new String(sink.toArray(), "UTF8"); |
180 final String content = new String(sink.toArray(), "UTF8"); | 181 tags.readGlobal(new StringReader(content)); |
181 tags.readGlobal(new StringReader(content)); | 182 } catch (CancelledException ex) { |
182 } catch (CancelledException ex) { | 183 // IGNORE, can't happen, we did not configure cancellation |
183 // IGNORE, can't happen, we did not configure cancellation | 184 getContext().getLog().debug(getClass(), ex, null); |
184 getContext().getLog().debug(getClass(), ex, null); | 185 } catch (HgDataStreamException ex) { |
185 } catch (HgDataStreamException ex) { | 186 getContext().getLog().error(getClass(), ex, null); |
186 getContext().getLog().error(getClass(), ex, null); | 187 // FIXME need to react |
187 // FIXME need to react | 188 } catch (IOException ex) { |
188 } catch (IOException ex) { | 189 // UnsupportedEncodingException can't happen (UTF8) |
189 // UnsupportedEncodingException can't happen (UTF8) | 190 // only from readGlobal. Need to reconsider exceptions thrown from there: |
190 // only from readGlobal. Need to reconsider exceptions thrown from there | 191 // BufferedReader wraps String and unlikely to throw IOException, perhaps, log is enough? |
191 getContext().getLog().error(getClass(), ex, null); | 192 getContext().getLog().error(getClass(), ex, null); |
192 // XXX need to decide what to do this. failure to read single revision shall not break complete cycle | 193 // XXX need to decide what to do this. failure to read single revision shall not break complete cycle |
193 } | |
194 } | 194 } |
195 } | 195 } |
196 tags.readGlobal(new File(getWorkingDir(), ".hgtags")); // XXX replace with HgDataFile.workingCopy | 196 } |
197 tags.readLocal(new File(repoDir, "localtags")); | 197 File file2read = null; |
198 try { | |
199 file2read = new File(getWorkingDir(), ".hgtags"); | |
200 tags.readGlobal(file2read); // XXX replace with HgDataFile.workingCopy | |
201 file2read = new File(repoDir, "localtags"); | |
202 tags.readLocal(file2read); | |
198 } catch (IOException ex) { | 203 } catch (IOException ex) { |
199 getContext().getLog().error(getClass(), ex, null); | 204 getContext().getLog().error(getClass(), ex, null); |
205 throw new HgInvalidControlFileException("Failed to read tags", ex, file2read); | |
200 } | 206 } |
201 } | 207 } |
202 return tags; | 208 return tags; |
203 } | 209 } |
204 | 210 |