01: /********************************************************************************
02: * CruiseControl, a Continuous Integration Toolkit
03: * Copyright (c) 2004, ThoughtWorks, Inc.
04: * 200 E. Randolph, 25th Floor
05: * Chicago, IL 60601 USA
06: * All rights reserved.
07: *
08: * Redistribution and use in source and binary forms, with or without
09: * modification, are permitted provided that the following conditions
10: * are met:
11: *
12: * + Redistributions of source code must retain the above copyright
13: * notice, this list of conditions and the following disclaimer.
14: *
15: * + Redistributions in binary form must reproduce the above
16: * copyright notice, this list of conditions and the following
17: * disclaimer in the documentation and/or other materials provided
18: * with the distribution.
19: *
20: * + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
21: * names of its contributors may be used to endorse or promote
22: * products derived from this software without specific prior
23: * written permission.
24: *
25: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
29: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36: ********************************************************************************/package net.sourceforge.cruisecontrol.bootstrappers;
37:
38: import net.sourceforge.cruisecontrol.Bootstrapper;
39: import net.sourceforge.cruisecontrol.CruiseControlException;
40: import net.sourceforge.cruisecontrol.util.Commandline;
41:
42: import org.apache.log4j.Logger;
43:
44: /**
45: * Since we rely on our build.xml to handle updating our source code, there has always been a problem with what happens
46: * when the build.xml file itself changes. Previous workarounds have included writing a wrapper build.xml that will
47: * check out the "real" build.xml. This class is a substitute for that practice.
48: *
49: * The SnapshotCMBootstrapper will handle updating a single file from SnapshotCM before the build begins.
50: *
51: * Usage:
52: *
53: * <snapshotcmbootstrapper file="" />
54: *
55: * @author patrick.conant@hp.com
56: */
57: public class SnapshotCMBootstrapper implements Bootstrapper {
58:
59: /** enable logging for this class */
60: private static final Logger LOG = Logger
61: .getLogger(SnapshotCMBootstrapper.class);
62:
63: /**
64: * Reference to the file to bootstrap.
65: */
66: private String filename;
67:
68: public void setFile(String name) {
69: filename = name;
70: }
71:
72: /**
73: * Update the specified file.
74: *
75: * @throws CruiseControlException
76: */
77: public void bootstrap() throws CruiseControlException {
78: buildUpdateCommand().executeAndWait(LOG);
79: }
80:
81: public void validate() throws CruiseControlException {
82: if (filename == null) {
83: throw new CruiseControlException(
84: "'file' is required for SnapshotCMBootstrapper");
85: }
86: }
87:
88: protected Commandline buildUpdateCommand() {
89: Commandline commandLine = new Commandline();
90: commandLine.setExecutable("wco");
91:
92: commandLine.createArguments("-fR", filename);
93:
94: return commandLine;
95: }
96:
97: }
|