IDEA-68731 Batch process hg revert and hg resolve. Get rid of HgFile.
[idea/community.git] / plugins / hg4idea / src / org / zmlx / hg4idea / command / HgRevertCommand.java
1 // Copyright 2008-2010 Victor Iacoban
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software distributed under
10 // the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11 // either express or implied. See the License for the specific language governing permissions and
12 // limitations under the License.
13 package org.zmlx.hg4idea.command;
14
15 import com.intellij.openapi.project.Project;
16 import com.intellij.openapi.vcs.FilePath;
17 import com.intellij.openapi.vfs.VirtualFile;
18 import com.intellij.vcsUtil.VcsFileUtil;
19 import org.apache.commons.lang.StringUtils;
20 import org.zmlx.hg4idea.HgRevisionNumber;
21 import org.zmlx.hg4idea.HgVcs;
22 import org.zmlx.hg4idea.execution.HgCommandExecutor;
23
24 import java.util.Collection;
25 import java.util.LinkedList;
26 import java.util.List;
27
28 public class HgRevertCommand {
29
30   private final Project project;
31
32   public HgRevertCommand(Project project) {
33     this.project = project;
34   }
35
36   public void execute(VirtualFile repo, Collection<FilePath> files, HgRevisionNumber vcsRevisionNumber, boolean backupFile) {
37     final List<String> options = new LinkedList<String>();
38     if (vcsRevisionNumber != null) {
39       options.add("--rev");
40       if (StringUtils.isNotBlank(vcsRevisionNumber.getChangeset())) {
41         options.add(vcsRevisionNumber.getChangeset());
42       }
43       else {
44         options.add(vcsRevisionNumber.getRevision());
45       }
46     }
47     if (!backupFile) {
48       options.add("--no-backup");
49     }
50
51     for (List<String> chunk : VcsFileUtil.chunkPaths(repo, files)) {
52       List<String> args = new LinkedList<String>();
53       args.addAll(options);
54       args.addAll(chunk);
55       new HgCommandExecutor(project).execute(repo, "revert", args, null);
56     }
57     project.getMessageBus().syncPublisher(HgVcs.BRANCH_TOPIC).update(project);
58   }
59 }