Mercurial > hg4j
comparison src/org/tmatesoft/hg/core/HgRevertCommand.java @ 565:78a9e26e670d
Refactor common code to initialize changelog revision for a command into standalone class
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Tue, 09 Apr 2013 17:15:30 +0200 |
| parents | 2f9ed6bcefa2 |
| children | 0890628ed51e |
comparison
equal
deleted
inserted
replaced
| 564:e6407313bab7 | 565:78a9e26e670d |
|---|---|
| 19 import java.io.File; | 19 import java.io.File; |
| 20 import java.util.Arrays; | 20 import java.util.Arrays; |
| 21 import java.util.LinkedHashSet; | 21 import java.util.LinkedHashSet; |
| 22 import java.util.Set; | 22 import java.util.Set; |
| 23 | 23 |
| 24 import org.tmatesoft.hg.internal.CsetParamKeeper; | |
| 24 import org.tmatesoft.hg.internal.DirstateBuilder; | 25 import org.tmatesoft.hg.internal.DirstateBuilder; |
| 25 import org.tmatesoft.hg.internal.DirstateReader; | 26 import org.tmatesoft.hg.internal.DirstateReader; |
| 26 import org.tmatesoft.hg.internal.Experimental; | 27 import org.tmatesoft.hg.internal.Experimental; |
| 27 import org.tmatesoft.hg.internal.Internals; | 28 import org.tmatesoft.hg.internal.Internals; |
| 28 import org.tmatesoft.hg.repo.HgInvalidRevisionException; | |
| 29 import org.tmatesoft.hg.repo.HgManifest; | 29 import org.tmatesoft.hg.repo.HgManifest; |
| 30 import org.tmatesoft.hg.repo.HgManifest.Flags; | |
| 30 import org.tmatesoft.hg.repo.HgRepository; | 31 import org.tmatesoft.hg.repo.HgRepository; |
| 31 import org.tmatesoft.hg.repo.HgRuntimeException; | 32 import org.tmatesoft.hg.repo.HgRuntimeException; |
| 32 import org.tmatesoft.hg.repo.HgManifest.Flags; | |
| 33 import org.tmatesoft.hg.util.CancelledException; | 33 import org.tmatesoft.hg.util.CancelledException; |
| 34 import org.tmatesoft.hg.util.Path; | 34 import org.tmatesoft.hg.util.Path; |
| 35 | 35 |
| 36 /** | 36 /** |
| 37 * WORK IN PROGRESS. | 37 * WORK IN PROGRESS. |
| 44 @Experimental(reason="Work in progress") | 44 @Experimental(reason="Work in progress") |
| 45 public class HgRevertCommand extends HgAbstractCommand<HgRevertCommand> { | 45 public class HgRevertCommand extends HgAbstractCommand<HgRevertCommand> { |
| 46 | 46 |
| 47 private final HgRepository repo; | 47 private final HgRepository repo; |
| 48 private final Set<Path> files = new LinkedHashSet<Path>(); | 48 private final Set<Path> files = new LinkedHashSet<Path>(); |
| 49 private int changesetToCheckout = HgRepository.WORKING_COPY; // XXX WORKING_COPY_PARENT, in fact | 49 private CsetParamKeeper changesetToCheckout; |
| 50 private boolean keepOriginal = true; | 50 private boolean keepOriginal = true; |
| 51 | 51 |
| 52 public HgRevertCommand(HgRepository hgRepo) { | 52 public HgRevertCommand(HgRepository hgRepo) { |
| 53 repo = hgRepo; | 53 repo = hgRepo; |
| 54 changesetToCheckout = new CsetParamKeeper(hgRepo); | |
| 55 changesetToCheckout.doSet(HgRepository.WORKING_COPY); // XXX WORKING_COPY_PARENT, in fact | |
| 54 } | 56 } |
| 55 | 57 |
| 56 /** | 58 /** |
| 57 * Additive | 59 * Additive |
| 58 * | 60 * |
| 70 * @param changesetRevIndex | 72 * @param changesetRevIndex |
| 71 * @return <code>this</code> for convenience | 73 * @return <code>this</code> for convenience |
| 72 * @throws HgBadArgumentException | 74 * @throws HgBadArgumentException |
| 73 */ | 75 */ |
| 74 public HgRevertCommand changeset(int changesetRevIndex) throws HgBadArgumentException { | 76 public HgRevertCommand changeset(int changesetRevIndex) throws HgBadArgumentException { |
| 75 int lastCsetIndex = repo.getChangelog().getLastRevision(); | 77 changesetToCheckout.set(changesetRevIndex); |
| 76 if (changesetRevIndex < 0 || changesetRevIndex > lastCsetIndex) { | |
| 77 throw new HgBadArgumentException(String.format("Bad revision index %d, value from [0..%d] expected", changesetRevIndex, lastCsetIndex), null).setRevisionIndex(changesetRevIndex); | |
| 78 } | |
| 79 changesetToCheckout = changesetRevIndex; | |
| 80 return this; | 78 return this; |
| 81 } | 79 } |
| 82 | 80 |
| 83 /** | 81 /** |
| 84 * Handy supplement to {@link #changeset(int)} | 82 * Handy supplement to {@link #changeset(int)} |
| 86 * @param revision | 84 * @param revision |
| 87 * @return <code>this</code> for convenience | 85 * @return <code>this</code> for convenience |
| 88 * @throws HgBadArgumentException | 86 * @throws HgBadArgumentException |
| 89 */ | 87 */ |
| 90 public HgRevertCommand changeset(Nodeid revision) throws HgBadArgumentException { | 88 public HgRevertCommand changeset(Nodeid revision) throws HgBadArgumentException { |
| 91 try { | 89 changesetToCheckout.set(revision); |
| 92 return changeset(repo.getChangelog().getRevisionIndex(revision)); | 90 return this; |
| 93 } catch (HgInvalidRevisionException ex) { | |
| 94 throw new HgBadArgumentException("Can't find revision", ex).setRevision(revision); | |
| 95 } | |
| 96 } | 91 } |
| 97 | 92 |
| 98 // TODO keepOriginal() to save .orig | 93 // TODO keepOriginal() to save .orig (with tests!) |
| 99 | 94 |
| 100 /** | 95 /** |
| 101 * Perform the back out for the given files | 96 * Perform the back out for the given files |
| 102 * | 97 * |
| 103 * @throws HgIOException | 98 * @throws HgIOException |
| 105 * @throws CancelledException | 100 * @throws CancelledException |
| 106 */ | 101 */ |
| 107 public void execute() throws HgException, CancelledException { | 102 public void execute() throws HgException, CancelledException { |
| 108 try { | 103 try { |
| 109 final int csetRevision; | 104 final int csetRevision; |
| 110 if (changesetToCheckout == HgRepository.WORKING_COPY) { | 105 if (changesetToCheckout.get() == HgRepository.WORKING_COPY) { |
| 111 csetRevision = repo.getChangelog().getRevisionIndex(repo.getWorkingCopyParents().first()); | 106 csetRevision = repo.getChangelog().getRevisionIndex(repo.getWorkingCopyParents().first()); |
| 112 } else { | 107 } else { |
| 113 csetRevision = changesetToCheckout; | 108 csetRevision = changesetToCheckout.get(); |
| 114 } | 109 } |
| 115 Internals implRepo = Internals.getInstance(repo); | 110 Internals implRepo = Internals.getInstance(repo); |
| 116 final DirstateBuilder dirstateBuilder = new DirstateBuilder(implRepo); | 111 final DirstateBuilder dirstateBuilder = new DirstateBuilder(implRepo); |
| 117 dirstateBuilder.fillFrom(new DirstateReader(implRepo, new Path.SimpleSource())); | 112 dirstateBuilder.fillFrom(new DirstateReader(implRepo, new Path.SimpleSource())); |
| 118 final HgCheckoutCommand.CheckoutWorker worker = new HgCheckoutCommand.CheckoutWorker(implRepo); | 113 final HgCheckoutCommand.CheckoutWorker worker = new HgCheckoutCommand.CheckoutWorker(implRepo); |
