This wiki is locked. Future workgroup activity and specification development must take place at our new wiki. For more information, see this blog post about the new governance model and this post about changes to the website.

Software Configuration Management 1.0 Specification

*EARLY FORM OF V1.0 DRAFT SPECIFICATION*
See Scm Spec V1 for the current draft of this specification.

Introduction

Software Configuration Management covers a wide range of practices, including tracking and controlling changes in the software using version control, building software and creating baselines, reporting on the contents of such builds and baselines, establishing traceability from requirements and change requests to software revisions, etc. This specification defines a set of RESTful interfaces using representations of resources, content types, the basic HTTP 1.1 methods and response codes. The capabilities of the interface definitions are driven by key integration scenarios and do not represent a complete set of operations on resources or resource types; service providers are neither required nor expected to expose their complete data model and application logic.

This version of the OSLC SCM specification describes services to browse the contents of baselines and change sets, and the version-controlled resources associated with those baselines and change sets. Clients may inspect the properties of these resources, and find differences between two such resources. No services are defined for the creation, modification, or deletion of resources.

Notation and Conventions

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" and "OPTIONAL" in this document are to be interpreted as described in RFC2119.

Base Requirements

Compliance

This specification is based on the OSLC Core Specification 2.0. OSLC SCM 1.0 providers MUST be compliant with both the core specification 2.0 and this SCM 1.0 specification, and SHOULD follow all the guidelines and recommendations in both these specifications. As a result of following these requirements and recommendations, OSLC SCM 1.0 providers SHOULD also be compliant with the Reporting Specifications.

The following table summarizes the requirements from OSLC Core Specification as well as some additional specific to SCM, qualifying some of the requirements from the OSLC Core Specification. See further sections in this specification or the OSLC Core Specification to get further details on each of these requirements.

Requirement Level Meaning
Unknown properties and content MAY / MUST OSLC services MAY ignore unknown content and OSLC clients MUST preserve unknown content
Resource Operations MUST OSLC services MUST support resource operations via standard HTTP operations
Resource Paging MAY OSLC services MAY provide paging for resources but only when specifically requested by the client
Partial Resource Representations MUST OSLC services MUST support request for a subset of a resource's properties via the oslc.properties URL parameter retrieval via HTTP GET and POST
Service Provider Resources SHOULD / MUST OSLC service providers SHOULD provide at least one Service Provider Catalog and MUST provide a Service Provider resource for each service provider
Query Capabilities MUST OSLC service providers MUST provide query capabilities to enable clients to query for resources, via HTTP GET and POST
Query Syntax MUST / MAY OSLC query capabilities MUST support the extended subset of the OSLC Core Query Syntax defined in this specification, and MAY use other query syntax
Delegated UI Dialogs SHOULD OSLC services SHOULD offer delegated UI selection dialogs specified via service provider resource
HTTP Basic Authentication MAY OSLC services MAY support Basic Auth, over http and/or https
OAuth Authentication SHOULD / MAY OSLC services SHOULD support OAuth and MAY indicate the required OAuth URLs via the service provider resource
Error Responses SHOULD OSLC services SHOULD provide error responses using Core defined error formats
RDF/XML Representations MUST OSLC services MUST provide an RDF/XML representation for responses to HTTP GET requests and POST queries requesting this representation. OSCL SCM service providers are not restricted to use of the constrained RDF/XML subset.
JSON Representations MUST OSLC services MUST provide JSON representations that conform to the Core Guidelines for JSON in response to HTTP GET requests and POST queries requesting this representation.
Other Representations MAY OSLC services MAY provide other representations if requesting, such as HTML.

Specification Versioning

See OSLC Core Specification Versioning section.

OSLC SCM 1.0 Service providers MUST respond to all client requests with a representation that complies with this SCM 1.0 specification, including an OSLC-Core-Version header with a value of 2.0, regardless of the version (if any) requested by the client.

Clients SHOULD provide at least the desired OSLC-Core-Version value in the headers of their requests, and SHOULD handle the returned versions as follows:

  1. If no version headers are provided in the response (the provider being non-compliant), the client MAY assume the requested version was returned, or MAY fail.
  2. If version headers are returned and the client understands these versions, the client SHOULD process the data accordingly.
  3. If version headers are returned, but the client does not understand these versions, the client MAY process any data it does understand, or MAY fail.

Namespaces

In addition to the namespace prefixes oslc, rdf, and dcterms described in the core specification, this specification uses a domain-specific namespace of http://open-services.net/ns/scm# with a default prefix of oslc_scm.

Resource Representations and Properties

SCM services MUST support both RDF/XML and JSON resource representations, and MAY support other representations. For RDF/XML representations, the returned content type MUST be application/rdf+xml; for JSON representations the content type MUST be application/json.

For all resource types defined in this specification, all required properties (those defined with an occurrence of exactly-one or one-or-many) MUST exist for each resource and must be provided when requested. All other properties are optional, and might not exist on some or any resources; those that do not exist will not be present in the returned representation even if requested, while those that do exist MUST be provided if requested. Providers MAY define additional provider-specific properties; providers SHOULD use their own namespaces for such properties, or use standard Dublin Core or RDF namespaces and properties where appropriate.

If no specific set of properties is requested, all properties are returned - both those defined in this specification as well as any provider-specific ones.

Consumer of OSLC SCM services should note that some resources may have a very large number of resources, and that some resources may be very large and/or expensive to compute. For this reason, consumers are strongly encouraged to use the oslc.properties parameter to limit the properties returned from a request to the subset required.

Pagination

SCM services SHOULD support paging; stable paging is not required.

Closure over links

The SCM data model is one with an arbitrarily nested structure. In order to allow consumers efficient access to hierarchic data such as the tree of directories and files in a baseline, SCM extends the OSLC Core definition of oslc.properties as follows.

nested_prop       ::= link_property closure? "{" member_properties "}"
closure           ::= "*" | "!"
link_property     ::= property
member_properties ::= properties

A nested property requested with the "*" closure option provides unlimited transitive closure over the named link property - so for example oslc.properties=oslc_scm:member*{dcterms:name} indicates that the members of the subject resource should be fetched, and the members of those members, recursively, until all members have been found, and that the dcterms:name property of the subject resource and of each of these members should be shown. Providers SHOULD detect cycles in the graph rather than failing or returning a never-ending response.

A nested property requested with the "!" closure option provides a potentially limited closure. The semantics are the same as for "*" except that the scope of the closure is limited and determined by the operation and the provider, as defined below.

SCM providers MUST support the closure syntax with the oslc.properties parameter when used with oslc_scm.member as the link property, and MAY also support this closure syntax with other link properties and/or on the oslc.select query parameter.

OSLC SCM Resources

SCM services MUST accept well-formed GET and HEAD requests on the resources defined in this section, and MUST support use of the oslc.properties parameter on GET requests. SCM services MUST also support the closure of properties over links described in the next section. Some resources support additional parameters, as described below.

SCM services MAY fail to accept PUT, POST, and DELETE requests; if such requests are accepted, the semantics are not defined by this specification, but providers SHOULD map such requests to the logically equivalent create, update, and delete operations on SCM resources.

SCM Data Model

Definition of terms

Object version
A specific version of an object that is being controlled in the SCM system. In some SCM systems, this concept is called a configuration item. Objects typically represent files and directories, but might also represent other resources such as requirements, models, assets, etc. An object version is an abstract type; most SCM resource types are subtypes of object version. Note that some of these subtypes might be restricted to having a single version of each object (resource).
Configuration
A container for a hierarchy of object versions. A configuration contains specific versions of any number of objects as immediate members forming the top level of the hierarchy. Each of those top-level objects versions may contain any number of other object versions, with potentially a variety of containment relationships. For example, a configuration might contain a specific version of a file system directory object, and under that specific versions of any number of subdirectories and files. The contents of a configuration is not frozen; the contents of and properties of the members might change, and the versions of the members might change. Configurations are object versions, but some providers might support only a single version of a configuration. With some providers, directories can contain symbolic links and configurations (sub-configurations) as well as files and subdirectories.
Baseline
A frozen configuration. If you look at the same baseline in the future, it will normally have the same contents (not all providers can guarantee complete immutability - for example, administrative actions might modify data). In some providers, baselines might be able to contain other baselines, while with other providers that might not be possible. Baselines are object versions, but some providers might support only a single version of a baseline.
Component
A configuration or set of configurations may be divided into components representing some user-defined set of object versions and/or sub-configurations; for example, components might be used to represent physical components or software modules. A provider is not required to implement components; they are used only as a way of limiting the scope of the closure over links. Components might or might not be object versions; they might be sets of object versions chosen by other criteria such as property values. A provider can also treat each configuration and sub-configuration in a hierarchy as being separate components.
Change set
A set of changes to be made to one or more configurations, where each change is described in terms of an object versions that should be added to, replaced in, or removed from some configurations.
Directory version or file version
A kind of object version representing some specific version of a directory or file in the SCM system. Directories can contain files, subdirectories, and (in some providers) symbolic links and sub-configurations.
Directory or file
A resource representing all versions of some particular directory or file; note that no such resource type is used in SCM 1.0.
Symbolic link version
A kind of object version representing some specific version of a symbolic link, as used in UNIX file systems. A symbolic link holds a string property containing an absolute or relative file system path; this path might or might not point to a file system representation of some other SCM resource.

SCM services may restrict the set of members in a container is various ways. For example, the entries in one directory version may have to be unique. This specification does not define such restrictions, since they may not only vary between providers, but may also depend on the client or operating system used to view the configuration. For example, the names of files in a directory must be unique, but how uniqueness is determined varies between file systems: on UNIX, case is considered, while on Windows it is ignored, and on Mac OS X, files must be unique ignoring case using Unicode NFC.

The diagram below shows one possible data model using the above concepts, with directories and files as the objects in the SCM system. An SCM provider MAY allow other object types, with different containment relationships. The arrows from change sets represent the 'has associated changed objects' relationship; all other arrows represent an optional 'contains' relationship. Although these relationships might be many-to-many in the underlying provider, OSLC SCM 1.0 services only expose one to many relationships.

OSLC_SCM_model.png

Object Version

An object version is a resource representing a specific version of an object that is being controlled in the SCM system. Objects typically represent files and directories, but might also represent other resources such as requirements, models, assets, etc. Other OSLC SCM resource types are typically specific types or subtypes of object version. An object version is an abstract type; most SCM resource types are subtypes of object version. Note that some of these subtypes might be restricted to having a single version of each object (resource). SCM services SHOULD NOT return any resource of type ObjectVersion from any operation.

Object Version Resource
Name ObjectVersion
Type URI http://open-services.net/ns/scm#ObjectVersion

Object Version Properties

An object version resource (and hence an object of most concrete SCM resource types) has the following properties:

Prefixed Name Occurs Value-type Representation Range Title Description
OSLC Core properties
dcterms:title at-most-one XMLLiteral n/a n/a Title Title (reference: Dublin Core) of the resource represented as rich text in XHTML content; this SHOULD include only content that is valid inside an XHTML <span> element. SCM providers SHOULD use this property for a human readable number, name, or synopsis of the object version.
dcterms:description at-most-one XMLLiteral n/a n/a Description Descriptive text (reference: Dublin Core) about resource represented as rich text in XHTML content; this SHOULD include only content that is valid and suitable inside an XHTML <div> element. SCM providers SHOULD use this property for a human-readable description of the object version, or a comment about the change in this version of the object.
dcterms:creator zero-or-many Resource either foaf:Person Creator Creator or creators of resource (reference: Dublin Core)
dcterms:contributor zero-or-many Resource either foaf:Person Contributor Contributor or contributors to resource (reference: Dublin Core)
dcterms:created zero-or-one DateTime n/a n/a Created Timestamp of resource creation (reference: Dublin Core)
dcterms:modified zero-or-one DateTime n/a n/a Modified Timestamp of the latest resource modification (reference: Dublin Core)
rdf:type one-or-many Resource reference n/a Type The resource type URI
oslc:instanceShape zero-or-one Resource reference ResourceShape Instance Shape Resource Shape that specifies allowed and required fields.
oslc:serviceProvider zero-or-one Resource reference ServiceProvider Service Provider A link to the resource's OSLC Service Provider.
SCM properties
dcterms:identifier exactly-one String n/a n/a Identifier An internal identifier, possibly assigned by the SCM system. This identifier MUST be unique amongst all currently existing object versions from this service provider. The string is not necessarily intended to be conveniently readable to humans.
dcterms:name at-most-one String n/a n/a Name A short name that is often used for an abbreviated identifier and used for presentation to end-users.
oslc_scm:fullName at-most-one String n/a n/a Full Name A full human-readable name of the object, unique amongst all current existing object versions from this service provider.
oslc_scm:owner at-most-one Resource either foaf:Person Owner The current owner of the object version (the person responsible).
oslc_scm:status zero-or-one String n/a n/a Status A string indicating the current status of the object version.
oslc_scm:member zero-or-many Resource reference Subtype of oslc:ObjectVersion Member An object version contained in this object version; note this property may have multiple values, to show multiple members of the parent object. Provision of this property may require a context to be supplied. Note that this property identifies objects that are direct members of the parent object, as opposed to those that are members of members; indirectly included object versions may be returned as nested properties, possibly using the closure syntax.

Object Version Operations

Get
This operation gets information about the object version itself, and optionally information about its contents. Recursion down through containment relationships (such as a configuration/directory/file hierarchy) may be possible, depending on the provider and the type of object. Recursion through containment relationships may require provision of some containment context based on the URL, or explicitly supplied using an oslc_scm.context parameter. The operation is provided by a GET operation on some SCM resource, using the OSLC query syntax to determine the properties returned. Note that the resource(s) returned will be of specific subtypes; there are no actual resources of type ObjectVersion.
Example:
 GET http://synergyserver:8888/oslc/changeset/1234?oslc.properties=dcterms:name,dcterms:title,oslc_scm:status,oslc_scm:change{dcterms:title,dcterms:description} 

Change Set

A change set normally represents what should be indivisible unit of change in an SCM system: either all of the associated changed object versions should be applied to a configuration, or none. A change set might indicate object versions to be added to, replaced in, or removed from, a configuration. Simple version control systems may not provide change sets. For those that do, it is often impossible or an error to have a change set partially applied to a configuration. However, partially applied change sets are possible in many systems, due to manual intervention, conflicting dependencies, etc. Change sets have some properties of their own - for example, it is common to have an identifier for the change set, as well as some readable description of the purpose of the change. In some systems, a change set might be aggregated from several other change sets, perhaps representing a group of changes to be applied to some configuration.

Change sets often identify the modifications made for one logical change. For example, in languages such as C or C++, it would be common for a logical change to affect a header file that defines some API, and both the source file that implements the API and one or more source files where the API is used; a single change set can be associated with all these changes to ensure that they are applied as a unit.

In OSLC SCM, a change set contains zero or more changes; each change describes a single object version that has been added to, replaced in, or removed from, a configuration; the types of change may vary between providers. A change MAY be obtainable as a separate resource, or a provider MAY represent changes purely as inlined properties of a change set.

Change sets may also be associated with specific stream or branches where that change is or should be applied.

A change set is a type of object version, though many SCM services provide only a single version of a change set; a change may be a type of object version, but is not required to be.

Change Set Resource
Name ChangeSet
Type URI http://open-services.net/ns/scm#ChangeSet

Change Type
Name Change
Type URI http://open-services.net/ns/scm#Change

Change Set and Change Properties

A change set has the following properties in addition to those of an object version:

Prefixed Name Occurs Value-type Representation Range Title Description
oslc_scm:change zero-or-many Resource either Change Change Either a local Change property, or a reference to a Change resource. Providers MAY choose not to represent changes as gettable resources, but instead always inline this property.
oslc_scm:stream zero-or-many String or Resource string or reference any Stream The name of (or resource reference to) a stream or branch to which this change set is or should be applied. Note this property may have multiple values, to show multiple streams to which the change set might be applied.

A change has the following properties:

Prefixed Name Occurs Value-type Representation Range Title Description
oslc_scm:changeType zero-or-many String n/a n/a Change Type A string representing the nature of the change. The value and meaning of this string varies between providers. Providers that do not distinguish different types of change may omit this property.
oslc_scm:changedObject one-or-many Resource n/a n/a Object The object versions associated with this change; note there MUST be at least one such object version. Some SCM providers MAY represent rename operations by associating a change with two object versions; the oslc_scm:changeType string will indicate this in some provider-specific manner.

Change Set Operations

Get
This operation gets information about the change set itself, and optionally information about the changes (and indirectly the object versions) associated with this change set; no recursion through members (for example, directories) is provided. The operation is provided by a GET operation on a change set resource, using the OSLC query syntax to determine the properties returned, including the nested stream and change links. A change set might not be associated with any object versions (perhaps because the change set is in the process of being set up, or because the associated changes were deleted), in which case the oslc_scm:change property will be absent.
Example:
 GET http://synergyserver:8888/oslc/changeset/1234?oslc.properties=dcterms:name,dcterms:title,oslc_scm:status,oslc_scm:change{oslc_scm:changeType,oslc_scm:changedObject{dcterms:title,dcterms:description}} 

Note that no operations on the oslc_scm:Change type are defined, since this is not required to be a gettable resource.

Baseline

One purpose of an SCM system is to maintain collections of specific versions of objects - for example, the exact set of sources (and often the build artifacts as well) that were used to construct a specific version of your software, or the exact set of chapter document versions that were used in some version of a book. This hierarchy of specific versions of a set of objects is called a configuration. In many SCM systems, the versions of members of a configuration may vary over time, so at one moment a book contains version 1 of chapter 2, and a few days later the configuration is updated to contain version 2 of chapter 2. To reproduce an earlier state for testing, or for audit trail reasons, etc., it is often important to have a permanent record of the state of a configuration at some specific point in time. This frozen record of a configuration is called a baseline. Not all providers can guarantee complete immutability of baselines - for example, administrative actions might modify data. In some providers, baselines might be able to contain other baselines, while with other providers that might not be possible.

As just described, a baseline is or contains a configuration, so a baseline has links to a fixed hierarchy of specific object versions. In many SCM systems, a baseline is also associated with the change sets used to construct that baseline; these change sets normally represent the difference between this baseline and some previous baseline (which might or might not still exist). Since change sets are often linked to other OSLC resources such as change requests, and directly or indirectly to requirements, one can produce report on the defects fixed in a baseline, or the requirements satisfied in a baseline.

An SCM provider might use an earlier baseline during the development and construction of a newer baseline, but not all SCM systems keep track of such previous baselines thereafter; for this reason, no 'baseline baseline' property is defined in this specification, but providers are at liberty to supply such a property if appropriate.

A baseline is a type of object version.

Baseline Resource
Name Baseline
Type URI http://open-services.net/ns/scm#Baseline

Baseline Properties

A baseline has the following properties in addition to those of an object version:

Prefixed Name Occurs Value-type Representation Range Title Description
oslc_scm:build zero-or-one String or Resource string or reference any Build A build number, identifier, or link; this can be a resource URI (for example, to a Build/Automation OSLC resource).
oslc_scm:stream zero-or-one String or Resource string or reference any Stream The name of (or resource reference to) the stream or branch in which this baseline was created.
oslc_scm:subBaseline zero-or-many Resource reference Baseline Sub-baseline An oslc_scm:Baseline element, representing a sub-baseline contained in this baseline; note this property may have multiple values, to show multiple sub-baselines of the parent object.
oslc_scm:changeSetAdded zero-or-many Resource either ChangeSet Changeset An oslc_scm:ChangeSet element, representing a change set added in this baseline; note this property may have multiple values, to show multiple changesets added in the baseline.
oslc_scm:changeSetModified zero-or-many Resource either ChangeSet Changeset An oslc_scm:ChangeSet element, representing a change set modified in this baseline; note this property may have multiple values, to show multiple changesets modified in the baseline.
oslc_scm:changeSetRemoved zero-or-many Resource either ChangeSet Changeset An oslc_scm:ChangeSet element, representing a change set removed in this baseline; note this property may have multiple values, to show multiple changesets removed in the baseline.

Baseline Operations

Get
This operation gets information about the baseline itself, and optionally information about the resources associated with this baseline. Recursion down through the oslc_scm:member relationship (such as a configuration/directory/file hierarchy) is possible using the closure syntax. Limited closure using the "!" closure operator may stop at a component boundary, as defined by the service provider. The operation is provided by a GET operation on a baseline resource, using the OSLC query syntax to determine the properties returned, including the nested baselines, configurations, and change set links.
Example:
GET http://synergyserver:8888/oslc/baseline/2010-02-16_12:13:08_4532?
         oslc.properties=oslc_scm:changeset{dcterms:title,dcterms:description},
         oslc_scm:member!{dcterms:name,dcterms:title,oslc_scm:status}

Getchanges
return a representation of the difference between the given baseline and some provider-defined previous baseline, or a specific second baseline identified in an optional parameter. The operation is provided by a GET operation on a baseline resource, with the parameter oslc_scm.delta to find the delta between a baseline and the provider-defined previous baseline), or oslc_scm.delta=URL to find the delta between two baseline resources. In the latter case, it is an error if the URL specified in the oslc_scm.delta=URL parameter does not refer to a Baseline resource from the same SCM provider. By default, OSLC SCM providers MUST return a BaselineComparison as described below, and MAY support other representations.

Baseline Comparison
Name BaselineComparison
Type URI http://open-services.net/ns/scm#BaselineComparison

Prefixed Name Occurs Value-type Representation Range Title Description
oslc_scm:baseline1 exactly-one Resource reference Baseline Original Baseline The oslc_scm:Baseline used as the basis for the comparison; this is the provider-defined previous baseline by default, or the baseline specified in the oslc_scm.delta parameter
oslc_scm:baseline2 exactly-one Resource reference Baseline Current Baseline The oslc_scm:Baseline used as the target of the comparison; this is the baseline that was the self resource of the comparison request.
oslc_scm:change zero-or-many Resource either Change Change Either an inlined Change property, or a reference to a Change resource. Providers MAY choose not to represent changes as gettable resources, but instead always inline this property.

Configuration

A configuration is a container for a hierarchy of object versions. A configuration contains specific versions of any number of objects as immediate members forming the top level of the hierarchy. Each of those top-level objects versions may contain any number of other object versions, with potentially a variety of containment relationships. For example, a configuration might contain a specific version of a file system directory object, and under that specific versions of any number of subdirectories and files. The contents of a configuration is not frozen; the contents of and properties of the members might change, and the versions of the members might change. Configurations are object versions, but some providers might support only a single version of a configuration. With some providers, directories can contain symbolic links and configurations (sub-configurations) as well as files and subdirectories.

A configuration is a type of object version.

Configuration Resource
Name Configuration
Type URI http://open-services.net/ns/scm#Configuration

Configuration Properties

A configuration has no properties in addition to those of an object version.

Configuration Operations

Get
This operation gets information about the configuration itself, and optionally information about the members of this configuration. Recursion down through the oslc_scm:member relationship (such as a configuration/directory/file hierarchy) is possible using the closure syntax. Limited closure using the "!" closure operator may stop at a component boundary, as defined by the service provider. The operation is provided by a GET operation on a configuration resource, using the OSLC query syntax to determine the properties returned, including the nested member links.
Example:
 GET http://synergyserver:8888/oslc/configuration/mainproject/17/7.2?oslc.properties=dcterms:name,dcterms:title,oslc_scm:status,oslc_scm:member*{dcterms:title,dcterms:description} 

Directory Version

A directory version is a type of object version. Note that a directory version resource refers to a specific version of a directory, for SCM systems that control versions of directories. A directory resource would represent the entire set of versions of some directory, but no OSLC SCM v1.0 operations return, or are provided on, directory resources.

Directory Version Resource
Name DirectoryVersion
Type URI http://open-services.net/ns/scm#DirectoryVersion

Directory Version Properties

A directory version has the following properties in addition to those of an object version:

Prefixed Name Occurs Value-type Representation Range Title Description
oslc_scm:memberIdentifier zero-or-many String n/a n/a Member Identifier A string representing the identity of a member (file, directory, symbolic link, or configuration) of this directory version, but not necessarily the specific version of that member; this property may have multiple values, to show multiple members of the parent object. A memberIdentifer may contain more information that just the name of the member; for example, in an SCM system with multiple distinct files called 'ReadMe', each with its own set of versions, the memberIdentifier may identify which set of file versions are potential members of this directory. A client can compare the memberIdentifier of two different directory versions to see which members were added or removed.

Directory Version Operations

Get
This operation gets information about the directory version itself, and optionally information about the members of this directory. Recursion down through the oslc_scm:member relationship (such as the directory/file hierarchy) MAY require that a configuration context is provided either in the URL path or using an oslc_scm.context parameter. If no context baseline or configuration is provided, the result MAY be just a set of oslc_scm:memberIdentifiers, not resources, in which case no recursion through directory members is possible. The operation is provided by a GET operation on a directory resource, using the OSLC query syntax to determine the properties returned, including the nested member links. Example:
 GET http://synergyserver:8888/oslc/directory/src/17/7.2?oslc_scm.context=configuration/src/17/7.2&oslc.properties=dcterms:name,dcterms:title,oslc_scm:status,oslc_scm:member*{dcterms:name,oslc_scm:status} 

Getchanges
return a representation of the difference in membership between the given directory version and its immediate predecessor(s), or a second directory version identified in an optional parameter. In most cases, the two directory version resources would represent two different versions of the same directory. The operation is provided by a GET operation on a directory version resource, with the parameter oslc_scm.delta to find the delta between a directory version and its immediate predecessor(s), or oslc_scm.delta=URL to find the delta between two directory version resources. In the latter case, it is an error if the URL specified in the oslc_scm.delta=URL parameter does not refer to a DirectoryVersion resource from the same SCM provider. By default, OSLC SCM providers MUST return a DirectoryVersionComparison as described below, and MAY support other representations.

Directory Version Comparison
Name DirectoryVersionComparison
Type URI http://open-services.net/ns/scm#DirectoryVersionComparison

Prefixed Name Occurs Value-type Representation Range Title Description
oslc_scm:directoryVersion1 exactly-one Resource reference DirectoryVersion Original Directory The oslc_scm:DirectoryVersion used as the basis for the comparison; this is the provider-defined previous directory version by default, or the directory version specified in the oslc_scm.delta parameter
oslc_scm:directoryVersion2 exactly-one Resource reference DirectoryVersion Current Directory The oslc_scm:DirectoryVersion used as the target of the comparison; this is the directory version that was the self resource of the comparison request.
oslc_scm:memberAdded zero-or-many String n/a n/a Added A string representing the identity of a member (file, directory, symbolic link, or configuration) added to this directory version, but not necessarily the specific version of that member.
oslc_scm:memberRemoved zero-or-many String n/a n/a Removed A string representing the identity of a member (file, directory, symbolic link, or configuration) removed from this directory version, but not necessarily the specific version of that member.

File Version

A file version is a type of object version. Note that a file version resource refers to a specific version of a file. A file resource would represent the entire set of versions of some file, but no OSLC SCM v1.0 operations return, or are provided on, file resources.

File Version Resource
Name FileVersion
Type URI http://open-services.net/ns/scm#FileVersion

File Version Properties

A file version has the following properties in addition to those of an object version:

Prefixed Name Occurs Value-type Representation Range Title Description
oslc_scm:content exactly-one Resource reference any Content A reference to the byte contents of the file version.
oslc_scm:mimeType zero-or-one String n/a n/a MIME Type The MIME type of the file version content.

File Version Operations

Get
get information about the file version. The operation is provided by a GET operation on a file resource, using the OSLC query syntax to determine the properties returned. The file content may be retrieved using the link in the oslc_scm:content property.
Example:
 GET http://synergyserver:8888/oslc/file/1234?oslc.properties=dcterms:name,oslc_scm:status,oslc:creator

Getchanges
return a representation of the difference in content between the given file version and its immediate predecessor(s), or a second file version identified in an optional parameter. In most cases, the two file version resources would represent two different versions of the same file. The operation is provided by a GET operation on a file version resource, with the parameter oslc_scm.delta to find the delta between a file version and its immediate predecessor(s), or oslc_scm.delta=URL to find the delta between two file version resources. In the latter case, it is an error if the URL specified in the oslc_scm.delta=URL parameter does not refer to a FileVersion resource from the same SCM provider. By default, the returned resource contains a unified diff; optionally, providers may allow additional query parameters to choose other diff formats.

File Version Comparison
Name FileVersionComparison
Type URI http://open-services.net/ns/scm#FileVersionComparison

Prefixed Name Occurs Value-type Representation Range Title Description
oslc_scm:fileVersion1 exactly-one Resource reference FileVersion Original File The oslc_scm:FileVersion used as the basis for the comparison; this is the provider-defined previous file version by default, or the file version specified in the oslc_scm.delta parameter
oslc_scm:fileVersion2 exactly-one Resource reference FileVersion Current File The oslc_scm:FileVersion used as the target of the comparison; this is the file version that was the self resource of the comparison request.
oslc_scm:unifiedDiff exactly-one String n/a n/a Difference The unified diff between the contents of the two file versions, describing the changes made from fileVersion1 to fileVersion2.

Symlink Version

Some SCM systems have direct support for symbolic links, as provided on UNIX file systems. Service providers that support symbolic links MUST use the SymlinkVersion resource type for such a specific version of such an object. Note that service providers that do support symbolic links MAY return resources of this type to clients running on systems that do not support symbolic links; for example, a UNIX provider can return SymlinkVersion resources to a client running on Windows.

SCM 1.0 does not define a resource type for links to other SCM resources, as opposed to symbolic links whose target is a file system paths; if a provider needs to represent links to other SCM resources, a separate resource type MUST be defined (using a resource shape in the Query Capability and/or Creation Factory).

A symlink version is a type of object version.

SymlinkVersion Resource
Name SymlinkVersion
Type URI http://open-services.net/ns/scm#SymlinkVersion

Symlink Version Properties

A symlink version has the following properties in addition to those of an object version.

Prefixed Name Occurs Value-type Representation Range Title Description
oslc_scm:target exactly-one String n/a n/a Target The target of the symbolic link, as a string containing a relative or absolute file system path.

Symlink Version Operations

Get
get information about the symlink version, and optionally the contents of the target file or the members of the target directory. The operation is provided by a GET operation on a symlink version resource, using the OSLC query syntax to determine the properties returned.

Getchanges
return a representation of the difference between the target of the given symlink version and its immediate predecessor(s), or a second symlink version identified in an optional parameter. In most cases, the two symlink version resources would represent two different versions of the same symlink. The operation is provided by a GET operation on a symlink version resource, with the parameter oslc_scm.delta to find the delta between a symlink version and its immediate predecessor(s), or oslc_scm.delta=URL to find the delta between two symlink version resources. In the latter case, it is an error if the URL specified in the oslc_scm.delta=URL parameter does not refer to a SymlinkVersion resource from the same SCM provider. By default, the returned resource contains a unified diff; optionally, providers may allow additional query parameters to choose other diff formats.

Symlink Version Comparison
Name SymlinkVersionComparison
Type URI http://open-services.net/ns/scm#SymlinkVersionComparison

Prefixed Name Occurs Value-type Representation Range Title Description
oslc_scm:symlinkVersion1 exactly-one Resource reference SymlinkVersion Original SymlinkVersion The oslc_scm:SymlinkVersion used as the basis for the comparison; this is the provider-defined previous symlink version by default, or the symlink version specified in the oslc_scm.delta parameter
oslc_scm:symlinkVersion2 exactly-one Resource reference SymlinkVersion Current SymlinkVersion The oslc_scm:SymlinkVersion used as the target of the comparison; this is the symlink version that was the self resource of the comparison request.
oslc_scm:unifiedDiff exactly-one String n/a n/a Difference The unified diff between the targets of the two symlink versions, describing the changes made from symlinkVersion1 to symlinkVersion2.

OSLC SCM Service Provider Capabilities

Resource Shapes

OSLC SCM services providers MUST support Resource Shapes as defined in the OSLC Core Specification

Service Provider Resource

OSLC SCM service providers MUST provide a Service Provider Resource that can be retrieved at a implementation dependent URI.

OSLC SCM service providers MAY provide a Service Provider Catalog Resource that can be retrieved at a implementation dependent URI.

OSLC SCM service providers MUST provide a oslc:serviceProvider property for their defined resources that is the URI to a Service Provider Resource.

Creation Factories

SCM providers MAY define creation factories compliant with the core specification, but none are required by this specification.

Query Capabilities

There MUST be at least one Query Capability entry in the Services definition for an OSLC SCM provider.

SCM services MUST implement the OSLC Core Query Syntax, and MUST support oslc.properties, oslc.prefix, oslc.where, and oslc.select parameters; note that usage of oslc.properties and oslc.prefix is not limited to queries. SCM services MAY also support oslc.searchTerms and oslc.orderBy.

In addition to the core OSLC query features, note that OSLC SCM providers MUST honor the closure syntax in the oslc.properties parameter as defined earlier

SCM providers MUST also honor the oslc_scm.context and oslc_scm.delta parameters defined on GET requests defined elsewhere in this specification, and MAY use those parameters in other requests.

Delegated User Interface Dialogs

See Delegated UIs.

SCM services SHOULD provide a picker (selection dialog) for baselines and one for change sets. Services MAY provide other selection dialogs.

SCM providers MAY define also define delegated creation dialogs, but none are required by this specification.

Notices and References

Authors and Contact Information

Authors of the OSLC SCM 1.0 Specification:

Please address all enquires to the OSLC SCM Lead, NickCrossley.

Intellectual Property Covenant

The members of the Working Group (or as appropriate, their employers) have documented a Patent Non-Assertion Covenant for implementations of the SCM 1.0 Specification, as described in the open-services.net Terms of Use. Details of the Covenant may be found here.

Supporting Documents

These non-normative documents do not form part of the specification, but provide examples and references, and document the use cases, design decisions, and rationale that led to the OSLC SCM 1.0 specification. In any discrepancy between what is described in these documents and the actual specifications, the specification prevails.

Document TBD: Temporary comments - remove before finalization
Examples? TBD
SCM Terminology Out of date - needs work
Drill Down Story Frozen for SCM 1.0
Topic revision: r2 - 05 Oct 2010 - 21:29:59 - NickCrossley
 
This site is powered by the TWiki collaboration platform Copyright � by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Contributions are governed by our Terms of Use
Ideas, requests, problems regarding this site? Send feedback