View Javadoc

1   /*
2    *  LICENSE
3    *
4    * "THE BEER-WARE LICENSE" (Revision 43):
5    * "Sven Strittmatter" <weltraumschaf@googlemail.com> wrote this file.
6    * As long as you retain this notice you can do whatever you want with
7    * this stuff. If we meet some day, and you think this stuff is worth it,
8    * you can buy me a non alcohol-free beer in return.
9    *
10   * Copyright (C) 2012 "Sven Strittmatter" <weltraumschaf@googlemail.com>
11   */
12  package org.jenkinsci.plugins.darcs.cmd;
13  
14  import hudson.Launcher;
15  import hudson.util.ArgumentListBuilder;
16  import java.io.ByteArrayOutputStream;
17  import java.io.IOException;
18  import java.io.OutputStream;
19  
20  /**
21   * Abstracts Darcs command.
22   *
23   * @author Sven Strittmatter <weltraumschaf@googlemail.com>
24   */
25  public class DarcsCommand {
26  
27      /**
28       * Argument list representing the command.
29       */
30      private final ArgumentListBuilder args;
31      /**
32       * Records STDOUT of command.
33       */
34      private final OutputStream out = new ByteArrayOutputStream();
35      /**
36       * Records STDERR of command.
37       */
38      private final OutputStream err = new ByteArrayOutputStream();
39  
40      /**
41       * Default constructor.
42       *
43       * Not instantiated outside of the builders.
44       *
45       * @param args generated argument list from a builder
46       */
47      DarcsCommand(final ArgumentListBuilder args) {
48          this.args = args;
49      }
50  
51      /**
52       * Main entry point to obtain a command builder.
53       *
54       * @param darcsExe name of Darcs executable, e.g. "darcs" or "/usr/local/bin/darcs"
55       * @return always new instance
56       */
57      public static DarcsCommandBuilder builder(final String darcsExe) {
58          return new DarcsCommandBuilder(darcsExe);
59      }
60  
61      /**
62       * Executes the command by joining the passed in process starter.
63       *
64       * @param proc used to join the command
65       * @return the return code of the executed command
66       * @throws IOException if there's an error launching/joining a process
67       * @throws InterruptedException if a thread is waiting, sleeping, or otherwise occupied, and the thread is
68       * interrupted, either before or during the activity
69       */
70      public int execute(final Launcher.ProcStarter proc) throws IOException, InterruptedException {
71          proc.cmds(args);
72          proc.stdout(out);
73          proc.stderr(err);
74          return proc.join();
75      }
76  
77      /**
78       * Get output stream which records STDOUT.
79       *
80       * @return reference to the output stream
81       */
82      public OutputStream getOut() {
83          return out;
84      }
85  
86      /**
87       * Get output stream which records STDOUT.
88       *
89       * @return reference to the output stream
90       */
91      public OutputStream getErr() {
92          return err;
93      }
94  
95      /**
96       * Get the arguments.
97       *
98       * @return reference of internal argument list object
99       */
100     ArgumentListBuilder getArgs() {
101         return args;
102     }
103 
104 }