001package org.apache.maven.scm.provider.accurev; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022import java.io.File; 023import java.text.DateFormat; 024import java.util.Collection; 025import java.util.List; 026import java.util.Map; 027 028import org.apache.maven.scm.command.blame.BlameLine; 029import org.apache.maven.scm.util.ThreadSafeDateFormat; 030 031/** 032 * Represents the AccuRev CLI interface 033 * 034 * @author ggardner 035 */ 036public interface AccuRev 037{ 038 039 String DEFAULT_ACCUREV_EXECUTABLE = "accurev"; 040 041 int DEFAULT_PORT = 5050; 042 043 String ACCUREV_TIME_FORMAT_STRING = "yyyy/MM/dd HH:mm:ss"; 044 045 DateFormat ACCUREV_TIME_SPEC = new ThreadSafeDateFormat( ACCUREV_TIME_FORMAT_STRING ); 046 047 String DEFAULT_REMOVE_MESSAGE = "removed (maven-scm)"; 048 049 String DEFAULT_ADD_MESSAGE = "initial version (maven-scm)"; 050 051 String DEFAULT_PROMOTE_MESSAGE = "promote (maven-scm)"; 052 053 /** 054 * Reset command process, clear command output accumulators 055 */ 056 void reset(); 057 058 /** 059 * Populate external to a workspace a (stream) and transactionId/time, to a specific location. 060 * 061 * <p> 062 * You must check {@link AccuRevCapability#POPULATE_TO_TRANSACTION} before passing a tranid/time 063 * to this method. If not supported should pass "now","highest" or null for tranSpec 064 * 065 * @param basedir 066 * @param stream stream to update to 067 * @param tranSpec transaction to update to or "now" if not supported. 068 * @param elements (must be depot relative. if null "/./" root is used) 069 * @return 070 * @throws AccuRevException 071 */ 072 List<File> popExternal( File basedir, String stream, String tranSpec, Collection<File> elements ) 073 throws AccuRevException; 074 075 /** 076 * Re populate missing files to existing workspace. 077 * 078 * @param basedir 079 * @param elements 080 * @return 081 * @throws AccuRevException 082 */ 083 List<File> pop( File basedir, Collection<File> elements ) 084 throws AccuRevException; 085 086 /** 087 * Make workspace 088 * 089 * @param basisStream 090 * @param workspaceName 091 * @param basedir 092 * @return 093 * @throws AccuRevException 094 */ 095 boolean mkws( String basisStream, String workspaceName, File basedir ) 096 throws AccuRevException; 097 098 /** 099 * Update a workspace or reftree, to a particular transaction id 100 * 101 * @param basedir 102 * @param transactionId 103 * @return 104 * @throws AccuRevException 105 */ 106 List<File> update( File basedir, String transactionId ) 107 throws AccuRevException; 108 109 /** 110 * Get info about the current logged in user for the current workspace. 111 * 112 * @param basedir 113 * @return 114 */ 115 AccuRevInfo info( File basedir ) 116 throws AccuRevException; 117 118 /** 119 * Deactivate a workspace 120 * 121 * @param workSpaceName full name of the workspace, including the user suffix 122 * @return 123 */ 124 boolean rmws( String workSpaceName ) 125 throws AccuRevException; 126 127 /** 128 * Reactivate a workspace 129 * 130 * @param workSpaceName full name of the workspace, including the user suffix 131 * @return 132 */ 133 boolean reactivate( String workSpaceName ) 134 throws AccuRevException; 135 136 /** 137 * The accurev command line strings since last reset(), separated by ";" 138 * 139 * @return 140 */ 141 String getCommandLines(); 142 143 /** 144 * Full output of accurev command line invocations since reset 145 * 146 * @return 147 */ 148 String getErrorOutput(); 149 150 /** 151 * Add the file to the repository. File must be within a workspace 152 * 153 * @param basedir base directory of the workspace 154 * @param files to add (relative to basedir, or absolute) 155 * @param message the commit message 156 */ 157 List<File> add( File basedir, List<File> files, String message ) 158 throws AccuRevException; 159 160 /** 161 * Remove the file from the repository. Files must be within a workspace 162 * 163 * @param basedir 164 * @param files 165 * @param message 166 * @return 167 * @throws AccuRevException 168 */ 169 List<File> defunct( File basedir, List<File> files, String message ) 170 throws AccuRevException; 171 172 /** 173 * Any elements that have been kept previously or are currently modified will be promoted. 174 * 175 * @param basedir - location of the workspace to act on 176 * @param message 177 * @return 178 * @throws AccuRevException 179 */ 180 List<File> promoteAll( File basedir, String message ) 181 throws AccuRevException; 182 183 List<File> promote( File basedir, List<File> files, String message ) 184 throws AccuRevException; 185 186 /** 187 * Relocate/reparent a workspace 188 * 189 * @param basedir 190 * @param workSpaceName (full workspacename including user) 191 * @param newBasisStream 192 * @return 193 * @throws AccuRevException 194 */ 195 boolean chws( File basedir, String workSpaceName, String newBasisStream ) 196 throws AccuRevException; 197 198 boolean mksnap( String snapShotName, String basisStream ) 199 throws AccuRevException; 200 201 List<File> statTag( String streamName ) 202 throws AccuRevException; 203 204 /** 205 * Sorts list of elements by whether they exist in the backing stream or not. 206 * 207 * @param basedir 208 * @param elements 209 * @return 210 * @throws AccuRevException 211 */ 212 CategorisedElements statBackingStream( File basedir, Collection<File> elements ) 213 throws AccuRevException; 214 215 /** 216 * @param basedir 217 * @param elements list of elements to stat, relative to basedir 218 * @param statType 219 * @return 220 * @throws AccuRevException 221 */ 222 List<File> stat( File basedir, Collection<File> elements, AccuRevStat statType ) 223 throws AccuRevException; 224 225 /** 226 * Accurev status of an element 227 * 228 * @param element 229 * @return null if ignored or not in workspace 230 */ 231 String stat( File element ) 232 throws AccuRevException; 233 234 List<Transaction> history( String baseStream, String fromTimeSpec, String toTimeSpec, int count, 235 boolean depotHistory, boolean transactionsOnly ) 236 throws AccuRevException; 237 238 /** 239 * AccuRev differences of a stream between to timespecs 240 * 241 * @param baseStream 242 * @param fromTimeSpec 243 * @param toTimeSpec 244 * @return 245 * @throws AccuRevException 246 */ 247 List<FileDifference> diff( String baseStream, String fromTimeSpec, String toTimeSpec ) 248 throws AccuRevException; 249 250 /** 251 * AccuRev annotate an element 252 * 253 * @param file 254 * @return 255 * @throws AccuRevException 256 */ 257 List<BlameLine> annotate( File baseDir, File file ) 258 throws AccuRevException; 259 260 /** 261 * Logins in as the given user, retains authtoken for use with subsequent commands. 262 * 263 * @param user 264 * @param password 265 * @return 266 * @throws AccuRevException 267 */ 268 boolean login( String user, String password ) 269 throws AccuRevException; 270 271 Map<String, WorkSpace> showWorkSpaces() 272 throws AccuRevException; 273 274 Map<String, WorkSpace> showRefTrees() 275 throws AccuRevException; 276 277 Stream showStream( String stream ) 278 throws AccuRevException; 279 280 String getExecutable(); 281 282 String getClientVersion() 283 throws AccuRevException; 284 285 boolean syncReplica() 286 throws AccuRevException; 287 288}