1 package org.apache.maven.scm.provider;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 /**
23 * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
24 * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
25 * @author <a href="mailto:ChrisGWarp@gmail.com">Chris Graham</a>
26 *
27 */
28 public abstract class ScmProviderRepository
29 {
30 private String user;
31
32 private String password;
33
34 private boolean persistCheckout = false;
35
36 /**
37 * @since 1.4
38 */
39 private boolean pushChanges = true;
40
41 /**
42 * Some SCMs have the concept of a work item (or task) which may need to be
43 * specified to allow changes to be pushed or delivered to a target.
44 * This allows you to answer the question: For this workItem, what changed?
45 * Auditors have been known to love this... :)
46 * SCMs known to implement this are:
47 * <ul>
48 * <li>IBM Rational Team Concert (workItem)
49 * <li>Microsoft Team Foundation Server (workItem)
50 * <li>IBM Rational ClearQuest Enabled UCM ClearCase (task)
51 * </ul>
52 * There may be others that support this feature.
53 * <P>
54 * These SCMs can be configured to reject a push/deliver unless additional
55 * information (by way of a workItem/task) is supplied.
56 * <P>
57 * This field is only relevant when pushChanges = true.
58 * <P>
59 * It should be noted however, when pushChanges = true, a workItem does not
60 * need to be set, as the need for a workItem may be optional.
61 *
62 * @since 1.9.5
63 */
64 private String workItem;
65
66 /**
67 * @return The user.
68 */
69 public String getUser()
70 {
71 return user;
72 }
73
74 /**
75 * Set the user.
76 *
77 * @param user The user
78 */
79 public void setUser( String user )
80 {
81 this.user = user;
82 }
83
84 /**
85 * @return The password.
86 */
87 public String getPassword()
88 {
89 return password;
90 }
91
92 /**
93 * Set the password.
94 *
95 * @param password The user password
96 */
97 public void setPassword( String password )
98 {
99 this.password = password;
100 }
101
102 /**
103 * Should distributed changes be pushed to the central repository?
104 * For many distributed SCMs like Git, a change like a commit
105 * is only stored in your local copy of the repository. Pushing
106 * the change allows your to more easily share it with other users.
107 * @since 1.4
108 */
109 public boolean isPushChanges()
110 {
111 return pushChanges;
112 }
113
114 /**
115 * @since 1.4
116 * @param pushChanges
117 */
118 public void setPushChanges( boolean pushChanges )
119 {
120 this.pushChanges = pushChanges;
121 }
122
123 /**
124 * @return The workItem.
125 * @since 1.9.5
126 */
127 public String getWorkItem()
128 {
129 return workItem;
130 }
131
132 /**
133 * Set the workItem.
134 *
135 * @param user The workItem.
136 * @since 1.9.5
137 */
138 public void setWorkItem( String workItem )
139 {
140 this.workItem = workItem;
141 }
142
143 /**
144 * Will checkouts using this repository be persisted so they can
145 * be refreshed in the future? This property is of concern to SCMs
146 * like Perforce and Clearcase where the server must track where a
147 * user checks out to. If false, the server entry (clientspec in Perforce
148 * terminology) will be deleted after the checkout is complete so the
149 * files will not be able to be updated.
150 * <p/>
151 * This setting can be overriden by using the system property
152 * "maven.scm.persistcheckout" to true.
153 * <p/>
154 * The default is false. See SCM-113 for more detail.
155 */
156 public boolean isPersistCheckout()
157 {
158 String persist = System.getProperty( "maven.scm.persistcheckout" );
159 if ( persist != null )
160 {
161 return Boolean.valueOf( persist ).booleanValue();
162 }
163 return persistCheckout;
164 }
165
166 public void setPersistCheckout( boolean persistCheckout )
167 {
168 this.persistCheckout = persistCheckout;
169 }
170
171 /**
172 * Get a {@link ScmProviderRepository} that represents the parent folder in the repository.
173 * Useful when the repository does not exist yet and we need to create it from the parent.
174 *
175 * @return the parent repository
176 * @throws UnsupportedOperationException unless overridden by subclass
177 */
178 public ScmProviderRepository getParent()
179 {
180 throw new UnsupportedOperationException();
181 }
182
183 /**
184 * Get the relative path between the repository provided as argument and the current repository.
185 *
186 * @param ancestor another repository that should be ancestor of this one
187 * @return the relative path or <code>null</code> if it can't be resolved
188 * @throws UnsupportedOperationException unless overridden by subclass
189 */
190 public String getRelativePath( ScmProviderRepository ancestor )
191 {
192 throw new UnsupportedOperationException();
193 }
194 }