com.atlassian.bamboo.repository.perforce
Class PerforceManager

java.lang.Object
  extended by com.atlassian.bamboo.repository.perforce.PerforceManager

public class PerforceManager
extends java.lang.Object

This class is designed to be the interface between the perforce library and the repository. TODO Please note that there have been some issues with the legacy perforce api so please only use the tek42 api.


Field Summary
protected static org.apache.commons.lang.time.FastDateFormat dateFormat
           
 
Constructor Summary
PerforceManager()
           
 
Method Summary
 CapabilitySet addDefaultPerforceExe(CapabilitySet capabilitySet)
          Extracts the default perforce executable from the system properties and creates a capability
 void clearCache()
           
 java.util.List<Commit> getChangeLogEntries(com.tek42.perforce.Depot perforceDepot, java.util.List<java.lang.Integer> changeNumbers)
          Retrieves a list of Bamboo Commit including Commit Files based on list of change numbers
 java.util.List<java.lang.Integer> getChangeNumbersFromRevision(com.tek42.perforce.Depot perforceDepot, java.lang.String clientViewDepot, int lastRevisionInBamboo, boolean useClientMapping)
           
 java.util.List<java.lang.Integer> getChangeNumsBetweenRevisions(com.tek42.perforce.Depot perforceDepot, java.lang.String depot, int firstRevision, int secondRevision, boolean useClientMapping)
          Retrieves a list of change log numbers after the first number and up to (and including) the second number for the depot.
 java.lang.String getClientRoot(com.tek42.perforce.Depot perforceDepot)
          Retrieves the workspace root as defined in the client configuration
protected  java.lang.String getDepotFromView(com.tek42.perforce.Depot perforceDepot, java.lang.String depotView, boolean useClientMapping)
          Takes in the client view of a depot (right hand side of the view map) and returns the actual depot (left hand side of the view map) If it fails it will return the client view, chances are what you are doing will still work with this.
 java.util.Map<java.lang.String,java.lang.String> getDepotViewCache()
           
 java.lang.String getFileNameForUrl(java.lang.String fileName, java.lang.String depot, java.lang.String clientName)
           
 java.lang.String getHostFromInfo(com.tek42.perforce.Depot perforceDepot)
          parses output of perforce indo command to extract out the address of the perforce server
 int getLatestChangeNumber(com.tek42.perforce.Depot perforceDepot, java.lang.String depot, int latestRevisionInBamboo, boolean useClientMapping)
          retrieves the latest change list number on the perforce server for comparison to the one stored in Bamboo
 java.lang.String getWorkingDir(java.lang.String client, java.lang.String clientRoot, java.lang.String depot)
          Extracts the directory from the depot(client view) and source code directory which will contain the build files
 void setupSync(com.tek42.perforce.Depot perforceDepot, java.io.File sourceDirectory)
          Sets the directory for perforce to check the code out to.
 void syncToHead(com.tek42.perforce.Depot perforceDepot, java.lang.String depot, boolean forceSync)
          Syncs the source code to head
 void syncToRevision(com.tek42.perforce.Depot perforceDepot, java.lang.String depot, int revisionNumber, boolean forceSync)
          Syncs the source code to a specific revision number
 void validateClient(ErrorCollection errorCollection, com.tek42.perforce.Depot depot, java.lang.String client)
          Validates the existence of the specified client of the perforce depot.
 void validateConnection(ErrorCollection errorCollection, com.tek42.perforce.Depot depot)
          Validates the connection to the perforce depot.
 void validateDepot(ErrorCollection errorCollection, com.tek42.perforce.Depot validationDepot, java.lang.String depot)
          Validates that the depot string specified is correct.
 void validateLogin(ErrorCollection errorCollection, com.tek42.perforce.Depot depot)
          Validates that the login credential supplied (ie user/password combination) is correct.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

dateFormat

protected static final org.apache.commons.lang.time.FastDateFormat dateFormat
Constructor Detail

PerforceManager

public PerforceManager()
Method Detail

syncToRevision

public void syncToRevision(@NotNull
                           com.tek42.perforce.Depot perforceDepot,
                           @NotNull
                           java.lang.String depot,
                           int revisionNumber,
                           boolean forceSync)
                    throws RepositoryException
Syncs the source code to a specific revision number

Parameters:
perforceDepot - containing all connection information except client workspace mapping
depot - client workspace mapping
revisionNumber - to sync to
forceSync - whether or not to force a full clean checkout
Throws:
RepositoryException - if perforce failed to sync the workspace

syncToHead

public void syncToHead(@NotNull
                       com.tek42.perforce.Depot perforceDepot,
                       @NotNull
                       java.lang.String depot,
                       boolean forceSync)
                throws RepositoryException
Syncs the source code to head

Parameters:
perforceDepot - containing all connection information except client workspace mapping
depot - client workspace mapping
forceSync - whether or not to force a full clean checkout
Throws:
RepositoryException - if perforce failed to sync the workspace

setupSync

public void setupSync(@NotNull
                      com.tek42.perforce.Depot perforceDepot,
                      @NotNull
                      java.io.File sourceDirectory)
               throws RepositoryException
Sets the directory for perforce to check the code out to. To do this it alters the client definition in particular the client root. It also ensures that there are no machine restrictions in place. Please use sparingly

Parameters:
perforceDepot - containing connection information
sourceDirectory - where you want the sync to occur
Throws:
RepositoryException - if it fails to connect to the repository

getClientRoot

@NotNull
public java.lang.String getClientRoot(com.tek42.perforce.Depot perforceDepot)
                               throws RepositoryException
Retrieves the workspace root as defined in the client configuration

Parameters:
perforceDepot - the client to extract the workspace root for
Returns:
String client root, Null if it couldn't find it.
Throws:
RepositoryException - if it fails to connect to the repository

getFileNameForUrl

@Nullable
public java.lang.String getFileNameForUrl(java.lang.String fileName,
                                                   java.lang.String depot,
                                                   java.lang.String clientName)

getLatestChangeNumber

public int getLatestChangeNumber(@NotNull
                                 com.tek42.perforce.Depot perforceDepot,
                                 @Nullable
                                 java.lang.String depot,
                                 int latestRevisionInBamboo,
                                 boolean useClientMapping)
                          throws RepositoryException
retrieves the latest change list number on the perforce server for comparison to the one stored in Bamboo

Parameters:
perforceDepot - containing all connection information except the client workspace mapping
depot - the client workspace mapping
latestRevisionInBamboo - the last change list number stored in bamboo
useClientMapping - will use the client side mapping rather than the depot mapping for this command
Returns:
long Number of latest change list from perforce, If it can not find it, the latestRevisionInBamboo is returned
Throws:
RepositoryException - if it fails to connect to the repository

getChangeNumsBetweenRevisions

@NotNull
public java.util.List<java.lang.Integer> getChangeNumsBetweenRevisions(@NotNull
                                                                               com.tek42.perforce.Depot perforceDepot,
                                                                               @Nullable
                                                                               java.lang.String depot,
                                                                               int firstRevision,
                                                                               int secondRevision,
                                                                               boolean useClientMapping)
                                                                throws RepositoryException
Retrieves a list of change log numbers after the first number and up to (and including) the second number for the depot. This can then be used To extract the change logs.

Parameters:
perforceDepot - containing all connection information except the client workspace mapping
depot - the client workspace mapping
firstRevision - change logs will be found which occur after this number
secondRevision - change logs will be found up to and including this number
useClientMapping - will use the client side mapping rather than the depot mapping for this command
Returns:
List of change list numbers matching the given criteria.
Throws:
RepositoryException - on failure to connect to the repository

getChangeNumbersFromRevision

public java.util.List<java.lang.Integer> getChangeNumbersFromRevision(@NotNull
                                                                      com.tek42.perforce.Depot perforceDepot,
                                                                      java.lang.String clientViewDepot,
                                                                      int lastRevisionInBamboo,
                                                                      boolean useClientMapping)
                                                               throws RepositoryException
Throws:
RepositoryException

getChangeLogEntries

@NotNull
public java.util.List<Commit> getChangeLogEntries(@NotNull
                                                          com.tek42.perforce.Depot perforceDepot,
                                                          @NotNull
                                                          java.util.List<java.lang.Integer> changeNumbers)
                                           throws RepositoryException
Retrieves a list of Bamboo Commit including Commit Files based on list of change numbers

Parameters:
perforceDepot - containing all connection information
changeNumbers - to retrieve changeLog entries for
Returns:
the list of Commits
Throws:
RepositoryException - if it fails to connect to the repository

getHostFromInfo

@Nullable
public java.lang.String getHostFromInfo(@NotNull
                                                 com.tek42.perforce.Depot perforceDepot)
parses output of perforce indo command to extract out the address of the perforce server

Parameters:
perforceDepot - containing connection information
Returns:
address of the perforce server

validateConnection

public void validateConnection(@NotNull
                               ErrorCollection errorCollection,
                               @NotNull
                               com.tek42.perforce.Depot depot)
Validates the connection to the perforce depot. Uses the legacy perforce api

Parameters:
errorCollection - to add validation errors to
depot - containing connection info to validate

validateLogin

public void validateLogin(@NotNull
                          ErrorCollection errorCollection,
                          @NotNull
                          com.tek42.perforce.Depot depot)
Validates that the login credential supplied (ie user/password combination) is correct. Uses the legacy perforce api

Parameters:
errorCollection - to add validation errors to
depot - connection information to test

validateClient

public void validateClient(@NotNull
                           ErrorCollection errorCollection,
                           @NotNull
                           com.tek42.perforce.Depot depot,
                           @NotNull
                           java.lang.String client)
Validates the existence of the specified client of the perforce depot. Uses the legacy perforce api

Parameters:
errorCollection - to add any validation errors to
depot - connection information to use to validate client.
client - to check for

validateDepot

public void validateDepot(@NotNull
                          ErrorCollection errorCollection,
                          @NotNull
                          com.tek42.perforce.Depot validationDepot,
                          @NotNull
                          java.lang.String depot)
Validates that the depot string specified is correct. This still uses a direct perforce command call.

Parameters:
errorCollection - to add any validation errors to
validationDepot - connection information to use to validate
depot - client workspace to validate

getWorkingDir

@Nullable
public java.lang.String getWorkingDir(@Nullable
                                               java.lang.String client,
                                               @Nullable
                                               java.lang.String clientRoot,
                                               @Nullable
                                               java.lang.String depot)
Extracts the directory from the depot(client view) and source code directory which will contain the build files

Parameters:
client - - name of the client
clientRoot - - the location the source will be checked out to
depot - - the depot(client view) as specified by the user
Returns:
the working directory for the given client.

addDefaultPerforceExe

@NotNull
public CapabilitySet addDefaultPerforceExe(@NotNull
                                                   CapabilitySet capabilitySet)
Extracts the default perforce executable from the system properties and creates a capability

Parameters:
capabilitySet - to add the capability to
Returns:
the supplied capabilitySet with the new capability included if found, else the given capabilitySet

getDepotFromView

protected java.lang.String getDepotFromView(@NotNull
                                            com.tek42.perforce.Depot perforceDepot,
                                            @Nullable
                                            java.lang.String depotView,
                                            boolean useClientMapping)
Takes in the client view of a depot (right hand side of the view map) and returns the actual depot (left hand side of the view map) If it fails it will return the client view, chances are what you are doing will still work with this. Perforce views are in the format //myDepot/src... //myClient/view/... with any amount of whitespace around it (also known to get \t on occassion)

Parameters:
perforceDepot - containing all connection information except the client mapping
depotView - - the client mapping you want to match
Returns:
returns the actual depot (left hand side of the view map)

getDepotViewCache

public java.util.Map<java.lang.String,java.lang.String> getDepotViewCache()

clearCache

public void clearCache()


Copyright © 2012 Atlassian. All Rights Reserved.