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 @Deprecated
35 private boolean persistCheckout = false;
36
37 /**
38 * @since 1.4
39 */
40 private boolean pushChanges = true;
41
42 /**
43 * Some SCMs have the concept of a work item (or task) which may need to be
44 * specified to allow changes to be pushed or delivered to a target.
45 * This allows you to answer the question: For this workItem, what changed?
46 * Auditors have been known to love this... :)
47 * SCMs known to implement this are:
48 * <ul>
49 * <li>IBM Rational Team Concert (workItem)
50 * <li>Microsoft Team Foundation Server (workItem)
51 * <li>IBM Rational ClearQuest Enabled UCM ClearCase (task)
52 * </ul>
53 * There may be others that support this feature.
54 * <P>
55 * These SCMs can be configured to reject a push/deliver unless additional
56 * information (by way of a workItem/task) is supplied.
57 * <P>
58 * This field is only relevant when pushChanges = true.
59 * <P>
60 * It should be noted however, when pushChanges = true, a workItem does not
61 * need to be set, as the need for a workItem may be optional.
62 *
63 * @since 1.9.5
64 */
65 @Deprecated
66 private String workItem;
67
68 /**
69 * @return The user.
70 */
71 public String getUser()
72 {
73 return user;
74 }
75
76 /**
77 * Set the user.
78 *
79 * @param user The user
80 */
81 public void setUser( String user )
82 {
83 this.user = user;
84 }
85
86 /**
87 * @return The password.
88 */
89 public String getPassword()
90 {
91 return password;
92 }
93
94 /**
95 * Set the password.
96 *
97 * @param password The user password
98 */
99 public void setPassword( String password )
100 {
101 this.password = password;
102 }
103
104 /**
105 * Should distributed changes be pushed to the central repository?
106 * For many distributed SCMs like Git, a change like a commit
107 * is only stored in your local copy of the repository. Pushing
108 * the change allows your to more easily share it with other users.
109 * @return TODO
110 * @since 1.4
111 */
112 public boolean isPushChanges()
113 {
114 return pushChanges;
115 }
116
117 /**
118 * @since 1.4
119 * @param pushChanges TODO
120 */
121 public void setPushChanges( boolean pushChanges )
122 {
123 this.pushChanges = pushChanges;
124 }
125
126 /**
127 * @return The workItem.
128 * @since 1.9.5
129 */
130 @Deprecated
131 public String getWorkItem()
132 {
133 return workItem;
134 }
135
136 /**
137 * Set the workItem.
138 *
139 * @param workItem The workItem.
140 * @since 1.9.5
141 */
142 @Deprecated
143 public void setWorkItem( String workItem )
144 {
145 this.workItem = workItem;
146 }
147
148 /**
149 * Will checkouts using this repository be persisted so they can
150 * be refreshed in the future? This property is of concern to SCMs
151 * like Perforce and Clearcase where the server must track where a
152 * user checks out to. If false, the server entry (clientspec in Perforce
153 * terminology) will be deleted after the checkout is complete so the
154 * files will not be able to be updated.
155 * <p>
156 * This setting can be overriden by using the system property
157 * "maven.scm.persistcheckout" to true.
158 * <p>
159 * The default is false. See SCM-113 for more detail.
160 * @return TODO
161 */
162 @Deprecated
163 public boolean isPersistCheckout()
164 {
165 String persist = System.getProperty( "maven.scm.persistcheckout" );
166 if ( persist != null )
167 {
168 return Boolean.valueOf( persist ).booleanValue();
169 }
170 return persistCheckout;
171 }
172
173 @Deprecated
174 public void setPersistCheckout( boolean persistCheckout )
175 {
176 this.persistCheckout = persistCheckout;
177 }
178
179 /**
180 * Get a {@link ScmProviderRepository} that represents the parent folder in the repository.
181 * Useful when the repository does not exist yet and we need to create it from the parent.
182 *
183 * @return the parent repository
184 * @throws UnsupportedOperationException unless overridden by subclass
185 */
186 public ScmProviderRepository getParent()
187 {
188 throw new UnsupportedOperationException();
189 }
190
191 /**
192 * Get the relative path between the repository provided as argument and the current repository.
193 *
194 * @param ancestor another repository that should be ancestor of this one
195 * @return the relative path or <code>null</code> if it can't be resolved
196 * @throws UnsupportedOperationException unless overridden by subclass
197 */
198 public String getRelativePath( ScmProviderRepository ancestor )
199 {
200 throw new UnsupportedOperationException();
201 }
202 }