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