Mercurial > hg4j
comparison src/org/tmatesoft/hg/internal/PhasesHelper.java @ 451:39fe00407937 smartgit3
HgBadStateException in ParentWalker.assertSortedIndex when phaseroots lists non-existent revision
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 08 Jun 2012 17:55:00 +0200 |
parents | 5787e912f60e |
children | 7bcfbc255f48 |
comparison
equal
deleted
inserted
replaced
450:03fd8d079e9c | 451:39fe00407937 |
---|---|
111 } | 111 } |
112 | 112 |
113 private Boolean readRoots() throws HgInvalidControlFileException { | 113 private Boolean readRoots() throws HgInvalidControlFileException { |
114 // FIXME shall access phaseroots through HgRepository#repoPathHelper | 114 // FIXME shall access phaseroots through HgRepository#repoPathHelper |
115 File phaseroots = new File(HgInternals.getRepositoryDir(repo), "store/phaseroots"); | 115 File phaseroots = new File(HgInternals.getRepositoryDir(repo), "store/phaseroots"); |
116 BufferedReader br = null; | |
116 try { | 117 try { |
117 if (!phaseroots.exists()) { | 118 if (!phaseroots.exists()) { |
118 return Boolean.FALSE; | 119 return Boolean.FALSE; |
119 } | 120 } |
120 HashMap<HgPhase, List<Nodeid>> phase2roots = new HashMap<HgPhase, List<Nodeid>>(); | 121 HashMap<HgPhase, List<Nodeid>> phase2roots = new HashMap<HgPhase, List<Nodeid>>(); |
121 BufferedReader br = new BufferedReader(new FileReader(phaseroots)); | 122 br = new BufferedReader(new FileReader(phaseroots)); |
122 String line; | 123 String line; |
123 while ((line = br.readLine()) != null) { | 124 while ((line = br.readLine()) != null) { |
124 String[] lc = line.trim().split("\\s+"); | 125 String[] lc = line.trim().split("\\s+"); |
125 if (lc.length == 0) { | 126 if (lc.length == 0) { |
126 continue; | 127 continue; |
129 HgInternals.getContext(repo).getLog().warn(getClass(), "Bad line in phaseroots:%s", line); | 130 HgInternals.getContext(repo).getLog().warn(getClass(), "Bad line in phaseroots:%s", line); |
130 continue; | 131 continue; |
131 } | 132 } |
132 int phaseIndex = Integer.parseInt(lc[0]); | 133 int phaseIndex = Integer.parseInt(lc[0]); |
133 Nodeid rootRev = Nodeid.fromAscii(lc[1]); | 134 Nodeid rootRev = Nodeid.fromAscii(lc[1]); |
135 if (!repo.getChangelog().isKnown(rootRev)) { | |
136 HgInternals.getContext(repo).getLog().warn(getClass(), "Phase(%d) root node %s doesn't exist in the repository, ignored.", phaseIndex, rootRev); | |
137 continue; | |
138 } | |
134 HgPhase phase = HgPhase.parse(phaseIndex); | 139 HgPhase phase = HgPhase.parse(phaseIndex); |
135 List<Nodeid> roots = phase2roots.get(phase); | 140 List<Nodeid> roots = phase2roots.get(phase); |
136 if (roots == null) { | 141 if (roots == null) { |
137 phase2roots.put(phase, roots = new LinkedList<Nodeid>()); | 142 phase2roots.put(phase, roots = new LinkedList<Nodeid>()); |
138 } | 143 } |
140 } | 145 } |
141 draftPhaseRoots = phase2roots.containsKey(Draft) ? phase2roots.get(Draft) : Collections.<Nodeid>emptyList(); | 146 draftPhaseRoots = phase2roots.containsKey(Draft) ? phase2roots.get(Draft) : Collections.<Nodeid>emptyList(); |
142 secretPhaseRoots = phase2roots.containsKey(Secret) ? phase2roots.get(Secret) : Collections.<Nodeid>emptyList(); | 147 secretPhaseRoots = phase2roots.containsKey(Secret) ? phase2roots.get(Secret) : Collections.<Nodeid>emptyList(); |
143 } catch (IOException ex) { | 148 } catch (IOException ex) { |
144 throw new HgInvalidControlFileException(ex.toString(), ex, phaseroots); | 149 throw new HgInvalidControlFileException(ex.toString(), ex, phaseroots); |
150 } finally { | |
151 if (br != null) { | |
152 try { | |
153 br.close(); | |
154 } catch (IOException ex) { | |
155 HgInternals.getContext(repo).getLog().info(getClass(), ex, null); | |
156 // ignore the exception otherwise | |
157 } | |
158 } | |
145 } | 159 } |
146 return Boolean.TRUE; | 160 return Boolean.TRUE; |
147 } | 161 } |
148 | 162 |
149 private List<Nodeid> getPhaseRoots(HgPhase phase) { | 163 private List<Nodeid> getPhaseRoots(HgPhase phase) { |