Mercurial > jhg
comparison src/org/tmatesoft/hg/core/HgRevertCommand.java @ 581:0890628ed51e
Progress/cancel support in new commands
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Mon, 22 Apr 2013 16:02:17 +0200 |
parents | 78a9e26e670d |
children | f41dd9a3b8af |
comparison
equal
deleted
inserted
replaced
580:bd5926e24aa3 | 581:0890628ed51e |
---|---|
28 import org.tmatesoft.hg.internal.Internals; | 28 import org.tmatesoft.hg.internal.Internals; |
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.HgManifest.Flags; |
31 import org.tmatesoft.hg.repo.HgRepository; | 31 import org.tmatesoft.hg.repo.HgRepository; |
32 import org.tmatesoft.hg.repo.HgRuntimeException; | 32 import org.tmatesoft.hg.repo.HgRuntimeException; |
33 import org.tmatesoft.hg.util.CancelSupport; | |
33 import org.tmatesoft.hg.util.CancelledException; | 34 import org.tmatesoft.hg.util.CancelledException; |
34 import org.tmatesoft.hg.util.Path; | 35 import org.tmatesoft.hg.util.Path; |
36 import org.tmatesoft.hg.util.ProgressSupport; | |
35 | 37 |
36 /** | 38 /** |
37 * WORK IN PROGRESS. | 39 * WORK IN PROGRESS. |
38 * | 40 * |
39 * Restore files to their checkout state, 'hg revert' counterpart. | 41 * Restore files to their checkout state, 'hg revert' counterpart. |
93 // TODO keepOriginal() to save .orig (with tests!) | 95 // TODO keepOriginal() to save .orig (with tests!) |
94 | 96 |
95 /** | 97 /** |
96 * Perform the back out for the given files | 98 * Perform the back out for the given files |
97 * | 99 * |
98 * @throws HgIOException | 100 * @throws HgIOException to indicate troubles updating files in working copy |
99 * @throws HgException | 101 * @throws HgException subclass thereof to indicate specific issue with the command arguments or repository state |
100 * @throws CancelledException | 102 * @throws CancelledException if execution of the command was cancelled |
101 */ | 103 */ |
102 public void execute() throws HgException, CancelledException { | 104 public void execute() throws HgException, CancelledException { |
103 try { | 105 try { |
106 final ProgressSupport progress = getProgressSupport(null); | |
107 final CancelSupport cancellation = getCancelSupport(null, true); | |
108 cancellation.checkCancelled(); | |
109 progress.start(files.size() + 2); | |
104 final int csetRevision; | 110 final int csetRevision; |
105 if (changesetToCheckout.get() == HgRepository.WORKING_COPY) { | 111 if (changesetToCheckout.get() == HgRepository.WORKING_COPY) { |
106 csetRevision = repo.getChangelog().getRevisionIndex(repo.getWorkingCopyParents().first()); | 112 csetRevision = repo.getChangelog().getRevisionIndex(repo.getWorkingCopyParents().first()); |
107 } else { | 113 } else { |
108 csetRevision = changesetToCheckout.get(); | 114 csetRevision = changesetToCheckout.get(); |
109 } | 115 } |
110 Internals implRepo = Internals.getInstance(repo); | 116 Internals implRepo = Internals.getInstance(repo); |
111 final DirstateBuilder dirstateBuilder = new DirstateBuilder(implRepo); | 117 final DirstateBuilder dirstateBuilder = new DirstateBuilder(implRepo); |
112 dirstateBuilder.fillFrom(new DirstateReader(implRepo, new Path.SimpleSource())); | 118 dirstateBuilder.fillFrom(new DirstateReader(implRepo, new Path.SimpleSource())); |
119 progress.worked(1); | |
120 cancellation.checkCancelled(); | |
121 | |
113 final HgCheckoutCommand.CheckoutWorker worker = new HgCheckoutCommand.CheckoutWorker(implRepo); | 122 final HgCheckoutCommand.CheckoutWorker worker = new HgCheckoutCommand.CheckoutWorker(implRepo); |
114 | 123 |
115 HgManifest.Inspector insp = new HgManifest.Inspector() { | 124 HgManifest.Inspector insp = new HgManifest.Inspector() { |
116 | 125 |
117 public boolean next(Nodeid nid, Path fname, Flags flags) { | 126 public boolean next(Nodeid nid, Path fname, Flags flags) { |
144 f.delete(); | 153 f.delete(); |
145 } | 154 } |
146 } | 155 } |
147 repo.getManifest().walkFileRevisions(file, insp, csetRevision); | 156 repo.getManifest().walkFileRevisions(file, insp, csetRevision); |
148 worker.checkFailed(); | 157 worker.checkFailed(); |
158 progress.worked(1); | |
159 cancellation.checkCancelled(); | |
149 } | 160 } |
150 dirstateBuilder.serialize(); | 161 dirstateBuilder.serialize(); |
162 progress.worked(1); | |
163 progress.done(); | |
151 } catch (HgRuntimeException ex) { | 164 } catch (HgRuntimeException ex) { |
152 throw new HgLibraryFailureException(ex); | 165 throw new HgLibraryFailureException(ex); |
153 } | 166 } |
154 } | 167 } |
155 } | 168 } |