SCM Implementation: CM/Synergy

SCM Url

For all URLs below, we use a colon (:) as separator. If you use a colon for one of the variables (e.g. a windows path), then use a pipe (|) as separator.

scm:synergy<delimiter>project_name<delimiter>database_delimiter<delimiter>project_version<delimiter>release<delimiter>purpose<delimiter>instance

project_name: This is the name of the project from which the checkout is done.

project_version: This is the version of the project from which the checkout is done (usually a prep project).

release: This is the release.

purpose: This is the purpose.

instance: This is the (optional) instance of the project from which the checkout is done (usually a prep project). Default is 1.

Examples

scm:synergy:MyProject:~:int_1.0:MyProject/2.0:Devel:1
scm|synergy|MyProject|-|int_1.0|MyProject/2.0|Devel:db1#1

Extra Information ** General

ccm start command shall use -rc in addition to below options for remote linux clients.

Checkout

Checkout purpose is to get sources from a working Work Area to a given folder. First, it checks if a work area already exists with the given version. If yes, it only synchronizes and reconfigures the existing one, and then copies file to the expecting folder. If no Work Area exists, then a checkout is done.

To specify the version of the checkout working project, use tag parameter.

When a 'checkout' happens, the following scm commands are generated

ccm start -m -q -nogui -n <username> -pw <password>
ccm query -u -f %objectname "owner='<username>' and status='working' and type='project' and has_predecessor('<project_spec>')" //Check for existing checkout
ccm synchronize -p <working_project_spec>
ccm reconfigure -p <working_project_spec>
ccm checkout -subprojects -rel [-t <tag>] -purpose <purpose> -release <release> -p <project_spec> // If no existing working project exists
ccm stop

Update

Reconfigure project with default reconfigure template, and copy file from work area to expected folder.

ccm start -m -q -nogui -n <username> -pw <password>
ccm query -u -f %objectname "owner='<username>' and status='working' and type='project' and has_predecessor('<project_spec>')" //Check for existing checkout
ccm reconfigure -r -p <working_project_spec>
ccm stop

Add

Create a default task, add new file(s) to the repository and checkin the task. message You can change the synopsis of the task by setting this parameter

ccm start -m -q -nogui -n <username> -pw <password>
ccm task -create -def -release <release> -synopsis <message>
ccm create -c <message> <filename>
ccm task -checkin <task_spec> -comment <message>
ccm stop

Remove

Remove a file from repository.

ccm start -m -q -nogui -n <username> -pw <password>
ccm delete <filename>
ccm stop

Changelog

Get modified files history. In order to parse output of Synergy command, we need to know different parameters:

  • maven.scm.synergy.ccmDateFormat (default value is EEE MMM dd HH:mm:ss yyyy)
  • maven.scm.synergy.language (default value is en)
  • maven.scm.synergy.country (default value is US)
ccm start -m -q -nogui -n <username> -pw <password>
ccm query -u is_task_in_folder_of(is_folder_in_rp_of('<project_spec>')) and completion_date>time(<startDate>) and completion_date<time(<endDate>)
ccm task -show objects <task>
ccm stop

Checkin

Checkin the default task.

ccm start -m -q -nogui -n <username> -pw <password>
ccm task -checkin default -c <message>
ccm stop

Edit

Create a default task and checkout file(s).

ccm start -m -q -nogui -n <username> -pw <password>
ccm task -create -def -release <release> -synopsis <message>
ccm co <filename>
ccm stop

Unedit

Cancel edition. Replace file with previous version.

ccm start -m -q -nogui -n <username> -pw <password>
ccm delete -replace <filename>
ccm stop

Status

Get state of files.

ccm start -m -q -nogui -n <username> -pw <password>
ccm dir -m
ccm stop

Tag

Create a baseline on the prep project. You may need to change the purpose in the pom to create the baseline (only prep purpose are allowed).

ccm start -m -q -nogui -n <username> -pw <password>
ccm baseline -create <tag> -p <project_spec> -r <release> -purpose <purpose>
ccm stop