comparison src/org/tmatesoft/hg/internal/PhasesHelper.java @ 652:cd77bf51b562

Push: tests. Commit respects phases.new-commit setting. Fix outgoing when changes are not children of common (Issue 47)
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Tue, 02 Jul 2013 23:21:16 +0200
parents 3b275cc2d2aa
children 12a4f60ea972
comparison
equal deleted inserted replaced
651:6e98d34eaca8 652:cd77bf51b562
34 import org.tmatesoft.hg.core.HgChangeset; 34 import org.tmatesoft.hg.core.HgChangeset;
35 import org.tmatesoft.hg.core.HgIOException; 35 import org.tmatesoft.hg.core.HgIOException;
36 import org.tmatesoft.hg.core.Nodeid; 36 import org.tmatesoft.hg.core.Nodeid;
37 import org.tmatesoft.hg.repo.HgChangelog; 37 import org.tmatesoft.hg.repo.HgChangelog;
38 import org.tmatesoft.hg.repo.HgInvalidControlFileException; 38 import org.tmatesoft.hg.repo.HgInvalidControlFileException;
39 import org.tmatesoft.hg.repo.HgInvalidStateException;
39 import org.tmatesoft.hg.repo.HgParentChildMap; 40 import org.tmatesoft.hg.repo.HgParentChildMap;
40 import org.tmatesoft.hg.repo.HgPhase; 41 import org.tmatesoft.hg.repo.HgPhase;
41 import org.tmatesoft.hg.repo.HgRepository; 42 import org.tmatesoft.hg.repo.HgRepository;
42 import org.tmatesoft.hg.repo.HgRuntimeException; 43 import org.tmatesoft.hg.repo.HgRuntimeException;
43 44
172 } finally { 173 } finally {
173 new FileUtils(repo.getLog()).closeQuietly(fw); 174 new FileUtils(repo.getLog()).closeQuietly(fw);
174 } 175 }
175 } 176 }
176 177
178 public void newCommitNode(Nodeid newChangeset, HgPhase newCommitPhase) throws HgRuntimeException {
179 final int riCset = repo.getRepo().getChangelog().getRevisionIndex(newChangeset);
180 HgPhase ph = getPhase(riCset, newChangeset);
181 if (ph.compareTo(newCommitPhase) >= 0) {
182 // present phase is more secret than the desired one
183 return;
184 }
185 // newCommitPhase can't be public here, condition above would be satisfied
186 assert newCommitPhase != HgPhase.Public;
187 // ph is e.g public when newCommitPhase is draft
188 // or is draft when desired phase is secret
189 final RevisionSet rs = allOf(newCommitPhase).union(new RevisionSet(Collections.singleton(newChangeset)));
190 final RevisionSet newRoots;
191 if (parentHelper != null) {
192 newRoots = rs.roots(parentHelper);
193 } else {
194 newRoots = rs.roots(repo.getRepo());
195 }
196 if (newCommitPhase == HgPhase.Draft) {
197 updateRoots(newRoots.asList(), secretPhaseRoots);
198 } else if (newCommitPhase == HgPhase.Secret) {
199 updateRoots(draftPhaseRoots, newRoots.asList());
200 } else {
201 throw new HgInvalidStateException(String.format("Unexpected phase %s for new commits", newCommitPhase));
202 }
203 }
204
177 /** 205 /**
178 * For a given phase, collect all revisions with phase that is the same or more private (i.e. for Draft, returns Draft+Secret) 206 * For a given phase, collect all revisions with phase that is the same or more private (i.e. for Draft, returns Draft+Secret)
179 * The reason is not a nice API intention (which is awful, indeed), but an ease of implementation 207 * The reason is not a nice API intention (which is awful, indeed), but an ease of implementation
180 */ 208 */
181 private RevisionSet allOf(HgPhase phase) { 209 private RevisionSet allOf(HgPhase phase) {