1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.scm.provider.hg.command.checkout;
20
21 import java.io.File;
22 import java.io.IOException;
23 import java.util.ArrayList;
24 import java.util.List;
25
26 import org.apache.commons.lang3.StringUtils;
27 import org.apache.maven.scm.ScmException;
28 import org.apache.maven.scm.ScmFileSet;
29 import org.apache.maven.scm.ScmResult;
30 import org.apache.maven.scm.ScmVersion;
31 import org.apache.maven.scm.command.Command;
32 import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand;
33 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
34 import org.apache.maven.scm.provider.ScmProviderRepository;
35 import org.apache.maven.scm.provider.hg.HgUtils;
36 import org.apache.maven.scm.provider.hg.command.HgCommandConstants;
37 import org.apache.maven.scm.provider.hg.command.HgConsumer;
38 import org.apache.maven.scm.provider.hg.repository.HgScmProviderRepository;
39 import org.codehaus.plexus.util.FileUtils;
40
41
42
43
44
45 public class HgCheckOutCommand extends AbstractCheckOutCommand implements Command {
46
47
48
49 protected CheckOutScmResult executeCheckOutCommand(
50 ScmProviderRepository repo, ScmFileSet fileSet, ScmVersion scmVersion, boolean recursive, boolean shallow)
51 throws ScmException {
52 HgScmProviderRepository repository = (HgScmProviderRepository) repo;
53 String url = repository.getURI();
54
55 File checkoutDir = fileSet.getBasedir();
56 try {
57 if (logger.isDebugEnabled()) {
58 logger.debug("Removing " + checkoutDir);
59 }
60 FileUtils.deleteDirectory(checkoutDir);
61 } catch (IOException e) {
62 throw new ScmException("Cannot remove " + checkoutDir);
63 }
64
65
66 List<String> cmdList = new ArrayList<>();
67 if (repo.isPushChanges()) {
68 cmdList.add(HgCommandConstants.CLONE_CMD);
69 } else {
70 cmdList.add(HgCommandConstants.UPDATE_CMD);
71 }
72 if (scmVersion != null && !StringUtils.isEmpty(scmVersion.getName())) {
73 cmdList.add(HgCommandConstants.REVISION_OPTION);
74 cmdList.add(scmVersion.getName());
75 }
76 if (!repo.isPushChanges()) {
77 cmdList.add(HgCommandConstants.CLEAN_OPTION);
78 }
79 cmdList.add(url);
80 cmdList.add(checkoutDir.getAbsolutePath());
81 String[] checkoutCmd = cmdList.toArray(new String[0]);
82 HgConsumer checkoutConsumer = new HgConsumer();
83 HgUtils.execute(checkoutConsumer, checkoutDir.getParentFile(), checkoutCmd);
84
85
86 String[] inventoryCmd = new String[] {HgCommandConstants.INVENTORY_CMD};
87 HgCheckOutConsumer consumer = new HgCheckOutConsumer(checkoutDir);
88 ScmResult result = HgUtils.execute(consumer, checkoutDir, inventoryCmd);
89
90 return new CheckOutScmResult(consumer.getCheckedOutFiles(), result);
91 }
92 }