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:
- 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.
- If version headers are returned and the client understands these versions, the client SHOULD process the data accordingly.
- 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.
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:
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.
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.