Internet DRAFT - draft-clemm-wvcm
draft-clemm-wvcm
INTERNET-DRAFT G. Clemm
draft-clemm-wvcm-00 Rational Software
Expires January 21, 2003 July 21, 2002
WVCM: The Workspace Versioning and Configuration Management API
Status of this Memo
This document is an Internet-Draft and is in full conformance with all
provisions of RFC 2026, Section 10.
Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups. Note that other groups
may also distribute working documents as Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference material
or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
Abstract
This document specifies the classes and interfaces that define the
Workspace Versioning and Configuration Management API. The WVCM API
will minimize the complexity of clients that are capable of
interoperating with a variety of versioning repositories. The WVCM API
includes: workspace management, version history management, baseline
management, activity management, and namespace versioning.
Clemm [Page 1]
INTERNET-DRAFT WVCM API May 8, 2002
Table of Contents
1 INTRODUCTION...........................................6
1.1 Relationship to the DeltaV/WebDAV/HTTP Protocols......7
1.2 Notational Conventions................................7
1.3 Workspace Terms.......................................7
1.4 Versioning Terms......................................8
1.5 Method Preconditions and Postconditions..............11
2 NON-VERSIONING WORKSPACE SEMANTICS....................11
3 NON-VERSIONING PROPERTIES.............................12
3.1 Resource Properties..................................12
3.1.1 DisplayName......................................12
3.1.2 Comment..........................................12
3.1.3 CreationDate.....................................12
3.1.4 CreatorDisplayName...............................13
3.1.5 LastModified.....................................13
3.1.6 ContentLanguage..................................13
3.1.7 ContentLength....................................13
3.1.8 ContentType......................................13
3.1.9 ContentCharacterSet..............................13
3.1.10 ContentIdentifier................................13
3.1.11 WorkspaceFolderList..............................14
3.2 ControllableResource Properties......................14
3.2.1 Workspace........................................14
3.2.2 IsCheckedOut.....................................14
3.2.3 ServerState......................................14
3.2.4 IsStale..........................................14
3.2.5 IsDirty..........................................15
3.3 Workspace Properties.................................15
3.3.1 WorkspaceCheckoutList............................15
3.3.2 WorkspaceServerLocation..........................15
4 NON-VERSIONING METHODS................................15
4.1 Resource Methods.....................................15
4.1.1 doCreateResource Method..........................15
4.1.2 doReadProperties Method..........................16
4.1.3 doWriteProperties Method.........................16
4.1.4 doReadContent Method.............................16
4.1.5 doWriteContent Method............................16
4.1.6 doDelete Method..................................17
4.1.7 doCopy Method....................................17
4.1.8 doMove Method....................................17
4.2 ControllableResource Methods.........................18
4.2.1 Additional doWriteContent Semantics..............18
4.2.2 Additional doDelete Semantics....................18
4.2.3 Additional doMove Semantics......................18
4.2.4 doControl Method.................................18
4.2.5 doCheckout Method................................19
4.2.6 doCheckin Method.................................19
4.2.7 doRefresh Method.................................19
4.3 Folder Methods.......................................20
Clemm [Page 2]
INTERNET-DRAFT WVCM API May 8, 2002
4.3.1 doReadMemberList Method..........................20
4.4 Workspace Methods....................................20
4.4.1 Additional doCreateResource Semantics............20
4.4.2 Additional doMove Semantics......................21
5 VERSIONING WORKSPACE SEMANTICS........................21
5.1 Creating a Version-Controlled Resource...............21
5.2 Modifying a Version-Controlled Resource..............22
5.3 Workspaces...........................................23
5.4 Folder Versions......................................24
5.5 Configurations and Baselines.........................26
5.6 Activities...........................................28
5.7 Merging..............................................29
5.8 Labels...............................................30
6 VERSIONING PROPERTIES.................................30
6.1 Additional Resource Properties.......................30
6.1.1 ActivityFolderList...............................30
6.1.2 VersionHistoryFolderList.........................30
6.2 Additional ControllableResource Properties...........31
6.2.1 VersionControllable..............................31
6.2.2 VersionHistory...................................31
6.2.3 CheckedIn........................................31
6.2.4 CheckedOut.......................................31
6.2.5 PredecessorList..................................31
6.2.6 ActivityList.....................................32
6.2.7 Unreserved.......................................32
6.2.8 MergeList........................................32
6.2.9 AutoMergeList....................................32
6.2.10 ControlledConfiguration..........................33
6.3 Folder Properties....................................33
6.3.1 BaselineControllable.............................33
6.3.2 EclipsedList.....................................33
6.4 Additional Workspace Properties......................33
6.4.1 BaselineControlledFolderList.....................33
6.4.2 CurrentActivityList..............................33
6.5 Version Properties...................................34
6.5.1 VersionHistory...................................34
6.5.2 PredecessorList..................................34
6.5.3 SuccessorList....................................34
6.5.4 CheckoutList.....................................34
6.5.5 ActivityList.....................................34
6.5.6 CheckoutFork.....................................34
6.5.7 CheckinFork......................................35
6.5.8 VersionName......................................35
6.5.9 LabelNameList....................................35
6.6 VersionHistory Properties............................35
6.6.1 RootVersion......................................35
6.6.2 VersionList......................................35
6.7 Folder Version Properties............................36
6.7.1 ControlledBindingList............................36
6.8 Baseline Properties..................................36
6.8.1 BaselineFolder...................................36
6.8.2 SubbaselineList..................................36
Clemm [Page 3]
INTERNET-DRAFT WVCM API May 8, 2002
6.9 Configuration Properties.............................36
6.9.1 RootFolder.......................................36
6.9.2 SubbaselineList..................................36
6.10 Activity Properties................................37
6.10.1 ActivityVersionList..............................37
6.10.2 ActivityCheckoutList.............................37
6.10.3 SubactivityList..................................37
6.10.4 CurrentWorkspaceList.............................37
7 VERSIONING METHODS....................................38
7.1 Additional ControllableResource Methods..............38
7.1.1 Additional doControl Semantics...................38
7.1.2 Additional doCheckout Semantics..................38
7.1.3 Additional doCheckin Semantics...................40
7.1.4 Additional doMove Semantics......................41
7.1.5 doUncheckout Method..............................41
7.1.6 doCreateControlledResource Method................42
7.1.7 doUpdate Method..................................43
7.1.8 doMerge Method...................................44
7.1.9 doMergePreview Method............................46
7.2 Additional Workspace Methods.........................46
7.2.1 Additional doMove Semantics......................46
7.2.2 Additional doDelete SemanticsError! Bookmark not defined.
7.2.3 doLocateByHistory Method.........................48
7.2.4 Additional doMerge Semantics.....................46
7.3 Additional Folder Methods............................48
7.3.1 doBaselineControl Method.........................49
7.3.2 doCreateBaselineControlledFolder Method..........49
7.4 Configuration Methods................................50
7.4.1 Additional doCheckin Semantics...................50
7.4.2 Additional doUpdate Semantics....................51
7.5 Version Methods......................................52
7.5.1 Additional doWriteContent Semantics..............52
7.5.2 Additional doCopy Semantics......................52
7.5.3 Additional doMove Semantics......................52
7.5.4 Additional doDelete Semantics....................52
7.5.5 doAddLabel Method................................53
7.5.6 doSetLabel Method................................53
7.5.7 doRemoveLabel Method.............................54
7.6 Version History Methods..............................54
7.6.1 Additional doCopy Semantics......................54
7.6.2 Additional doMove Semantics......................54
7.6.3 Additional doDelete Semantics....................54
7.7 Folder Version Methods...............................55
7.7.1 Additional doCopy Semantics......................55
7.8 Baseline Methods.....................................55
7.8.1 doCompareBaseline Method.........................55
7.9 Activity Methods.....................................56
7.9.1 Additional doCreateResource Semantics............56
7.9.2 Additional doMove Semantics......................56
7.9.3 Additional doDelete Semantics....................56
7.9.4 Additional doCheckin Semantics...................56
8 INTERNATIONALIZATION CONSIDERATIONS...................56
Clemm [Page 4]
INTERNET-DRAFT WVCM API May 8, 2002
9 SECURITY CONSIDERATIONS...............................57
10 IANA CONSIDERATIONS..................................57
11 INTELLECTUAL PROPERTY................................57
12 ACKNOWLEDGEMENTS.....................................57
13 REFERENCES...........................................57
14 AUTHOR'S ADDRESS.....................................58
Clemm [Page 5]
INTERNET-DRAFT WVCM API May 8, 2002
1 INTRODUCTION
This document specifies the classes and interfaces that define the
Workspace Versioning and Configuration Management (WVCM) API.
There are two key concepts in this API: "workspaces" and
"versioning".
The purpose of a workspace is to provide an environment within
which a user can make persistent modifications to a configuration
of resources without interfering or disrupting the work of other
users of those resources. This requires that the user be able to
persist changes to resources (both content changes and naming
changes) without those changes being immediately visible to other
users. To provide this functionality, the persistent changes saved
in one workspace (also known as a "sandbox" or a "view") are
visible in other workspaces only after the user of that workspace
explicitly exposes those changes for use by other workspaces, and
after a user of another workspace explicitly requests to see the
changes that have been exposed.
In some implementations, a workspace is stored primarily in local
persistent storage of the client, and changes are exposed to other
workspaces by uploading changed resource names and content to a
shared server. Changes are made visible in another workspace by
downloading those changes to that other workspace. In other
implementations, only the resources being changed are stored on the
client, while unmodified resources are stored only on the server.
These implementations are often preferable when there are large
numbers of resources (e.g. thousands, or hundreds of thousands),
since it would be prohibitively expensive to download all those
resources to each client. Finally, in some implementations, all
workspace state is stored on the server. These implementations
have the advantages that they can be used by clients with no local
persistent storage, and that the private workspace state can be
seen from multiple clients (this is important when a user needs to
be able to easily move from one host to another, or when several
users are working very closely together). These implementations
are also used when key resources (such as high-performance
databases) are required for effective workspace authoring, and
these resources are only available on the server. One of the key
challenges of the WVCM API is to hide these implementation choices
from a client.
The purpose of versioning is to provide an environment within which
previous states of resource (both content and naming) are easily
available. The term "configuration management" is used to
emphasize that it is not just isolated resource states that must be
easily available, but also consistent configurations of related
resources.
The benefits of versioning and configuration management include:
Clemm [Page 6]
INTERNET-DRAFT WVCM API May 8, 2002
- A resource has an explicit history and a persistent identity
across the various states it has had during the course of that
history. It allows browsing through past and alternative versions
of a resource. Frequently the modification and authorship history
of a resource is critical information in itself.
- Resource states (versions) are given stable names that can
support externally stored references for annotation and linking.
By providing stable states of resources, version control systems
allow not only stable pointers into those resources, but also well
defined methods to determine the relationships of those states of a
resource.
- Sets of resources can be developed in parallel. Each client has
its own configuration of the controlled resources, and can make
changes to its configuration without disturbing that of another
client. Consistent groups of changes can then be exposed for use
by other clients.
1.1 Relationship to the DeltaV/WebDAV/HTTP Protocols
To maximize interoperability and the use of existing protocol
functionality, the WVCM semantic model is designed to be compatible
with the DeltaV [RFC3253], WebDAV [RFC2518], and HTTP [RFC2616]
protocols.
1.2 Notational Conventions
The key words "MUST", "MUST NOT", "REQUIRED", and "MAY " in this
document are to be interpreted as described in RFC 2119.
1.3 Workspace Terms
Resource
A "resource" is a locatable persistent object whose state consists
of content (a sequence of bytes) and properties (a set of
name/value pairs).
Controlled Resource, Check Out, Check In
A "controllable resource" is a resource whose state can be
"controlled". When a resource is controlled, it becomes a
"controlled resource". A controlled resource must be "checked out"
in order to modify its content, and then "checked in" to allow that
modification to be visible in another workspace. A controlled
resource is always either in a "checked-in" or "checked-out" state.
Clemm [Page 7]
INTERNET-DRAFT WVCM API May 8, 2002
Folder Resource, Binding, Member
A "folder resource", or simply "folder", is a controllable resource
whose state contains a set of named "bindings". Each folder
binding defines a mapping from a name to another resource, called a
"bound member" of the folder. A folder must be checked-out to add,
remove, or rename a controlled bound member of that folder, and
then checked in to commit that modification. The "members" of a
folder are the folder itself and all bound members of any member of
the folder. In mathematical terms, the member relationship is the
transitive closure of the bound-member relationship. Note that a
folder is a member of itself.
Configuration
A "configuration" is a set of resources associated with a
particular folder, called the "root folder" of the configuration.
In particular, a configuration consists of all members of the root
folder that are not members of another configuration. Note that a
folder (which is a single resource) is very different from a
configuration (which is a set of resources).
Workspace Resource
A "workspace resource", or simply "workspace", is a configuration
that can have both controllable and controlled members.
1.4 Versioning Terms
Version Control
When a resource is "version-controllable", a history of its
checked-in states is kept after it is controlled. When a version-
controllable resource is controlled, it becomes a "version-
controlled" resource.
Version Resource
A "version resource", or simply "version", is a resource that
contains a copy of a particular state of a version-controlled
resource. A new version is created whenever the version-controlled
resource is checked in. The server allocates a distinct new
location for each new version, and this location will never be
occupied by any resource other than that version. The content of a
version never changes.
Predecessor, Successor, Ancestor, Descendant
When a version-controlled resource is checked out and then
subsequently checked in, the version that was checked out becomes a
"predecessor" of the version created by the checkin. A client can
specify multiple predecessors for a new version if the new version
is logically a merge of those predecessors. When a version is
Clemm [Page 8]
INTERNET-DRAFT WVCM API May 8, 2002
connected to another version by traversing one or more predecessor
relations, it is called an "ancestor" of that version. The inverse
of the predecessor and ancestor relations are the "successor" and
"descendant" relations. Therefore, if X is a predecessor of Y,
then Y is a successor of X, and if X is an ancestor of Y, then Y is
a descendant of X.
Version History Resource
A "version history resource", or simply "version history", is a
resource that contains all the versions that are descendants of a
particular version, called the "root version" of that version
history. A version history is located in a server defined
namespace and therefore is unaffected by any deletion or movement
of version-controlled resources. A workspace contains at most one
version-controlled resource for a given version history.
Version Name
A "version name" is a string chosen by the server to distinguish
one version of a version history from the other versions of that
version history. Versions from different version histories may
have the same version name.
Label
A "label" is a string that can be used to select a version from a
version history. A label can be assigned by either a client or the
server. The same label can be used in different version histories.
Fork, Merge
When a second successor is added to a version, this creates a
"fork" in the version history. When a version is created with
multiple predecessors, this creates a "merge" in the version
history. A server may restrict the version history to be linear
(with no forks or merges), but an interoperable versioning client
should be prepared to deal with both forks and merges in the
version history.
Clemm [Page 9]
INTERNET-DRAFT WVCM API May 8, 2002
The following diagram illustrates several of the previous
definitions. Each box represents a version and each line between
two boxes represents a predecessor/successor relationship. For
example, it shows V3 is a predecessor of V5, V7 is a successor of
V5, V1 is an ancestor of V4, and V7 is a descendant of V4. It also
shows that there is a fork at version V2 and a merge at version V7.
History of foo.html
+---+
Root Version -------> | | V1
+---+ ^
| |
| |
+---+ |
Version Name ----> V2 | | | Ancestor
+---+ |
/ \ |
/ \ |
+---+ +---+
| | V3 | | V4
^ +---+ +---+
| | | |
Predecessor | | | |
+---+ +---+ |
| | V5 | | V6 | Descendant
+---+ +---+ |
Successor | \ / |
| \ / |
v +---+ v
| | V7
+---+
Folder Version Resource
A "folder version resource", or simply "folder version", captures
the names of its controlled bindings. A controlled binding is a
binding to a controlled resource. A folder version is created by
checking out and then checking in a controlled folder. The list of
controlled bindings of a folder version never changes.
Baseline Resource
A "baseline resource", or simply "baseline", of a folder is a
version of the configuration that is rooted at that folder. In
particular, a baseline captures the version identified by the
CheckedIn property of every version-controlled member of that
configuration. Note that a folder version (which captures the
state of a single resource) is very different from a folder
baseline (which captures the states of a set of resources).
Clemm [Page 10]
INTERNET-DRAFT WVCM API May 8, 2002
Baseline-Controlled Folder
A "baseline-controlled folder" is the root folder for a
configuration that is being baselined.
Controlled Configuration Resource
A " controlled configuration resource", or simply " controlled
configuration", is a special kind of version-controlled resource
that is associated with a baseline-controlled folder, and is used
to create and access baselines of that folder. When a folder is
both version-controlled and baseline-controlled, a client can
create a new version of the folder by checking out and checking in
that folder, and it can create a new baseline of that folder by
checking out and checking in the controlled configuration of that
folder.
Activity Resource
An "activity resource", or simply "activity", is a resource that
selects a set of versions that correspond to a single logical
change, where the versions selected from a given version history
are required to form a single line of descent through that version
history.
1.5 Method Preconditions and Postconditions
A "precondition" of a method describes the state on the server that
must be true for that method to be performed. A "postcondition" of
a method describes the state on the server that must be true after
that method has completed. If a method precondition or
postcondition for a request is not satisfied, a WvcmException will
be thrown, containing a string that identifies the exact condition
that was not satisfied.
2 NON-VERSIONING WORKSPACE SEMANTICS
Although the WVCM API is designed to supported workspace management
by a versioning server, a simple subset of the WVCM API can be used
to support workspace management by a non-versioning server. In
this simplified form, only Resource, ControllableResource, Folder,
and Workspace resources are supported. Each workspace has both
private client-side persistent state, as well as server-side
persistent state that it shares with other workspaces. In
particular, a copy of the resource state of each checked-in
controlled resource is stored persistently on the server.
In order to create a workspace, a client specifies the location in
the local client file system for the root folder of the workspace.
In addition, the client must specify the location on the server for
the checked-in controlled resource state that is shared with other
workspaces. A client can then create, browse, and update
Clemm [Page 11]
INTERNET-DRAFT WVCM API May 8, 2002
uncontrolled workspace members (files and folders) through WVCM API
calls, or alternatively, through native client file system
commands.
In order to share changes to a resource with other workspaces, the
client must first put that resource under control using the
doControl WVCM API call. In order to update a controlled resource,
a client must first check out that resource using the doCheckout
WVCM API call. A checked-out controlled resource can then be
updated in the same ways that an uncontrolled resource is updated,
i.e. using WVCM API calls or native client file system commands.
When a client is ready to expose the modified state of a controlled
resource to other workspaces, it must use the doCheckin WVCM API
call. If the state of that resource on the server has not changed
since the doCheckout call was performed, the local resource state
is copied to the server. If the state of that resource on the
server has changed (as a result of a doCheckin call from a client
in another workspace that shares that server state), the client
must merge its changes with the changes made to the server. In
particular, the client must save its changes to a temporary
location, use the doRefresh WVCM API call to retrieve the modified
server state, merge its changes with that new state retrieved from
the server, and attempt the doCheckin again. Note that a WVCM
implementation will commonly mark a checked-in controlled resource
as read-only, to prevent local file system commands from
incorrectly modifying a checked-in resource.
3 NON-VERSIONING PROPERTIES
3.1 Resource Properties
3.1.1DisplayName
This property contains a description of the resource that is
suitable for presentation to a user.
String getDisplayName()
setDisplayName(String s)
3.1.2Comment
This property is used to track a brief comment about a resource
that is suitable for presentation to a user.
String getComment()
setComment(String s);
3.1.3CreationDate
This property contains the resource creation date.
Clemm [Page 12]
INTERNET-DRAFT WVCM API May 8, 2002
java.util.Date getCreationDate()
setCreationDate(java.util.Date date);
3.1.4CreatorDisplayName
This property contains a description of the creator of the resource
that is suitable for presentation to a user. The
CreatorDisplayName of a version can be used to indicate who created
that version.
String getCreatorDisplayName()
setCreatorDisplayName(String s)
3.1.5LastModified
This property contains the date the content was last modified.
java.util.Date getLastModified()
3.1.6ContentLanguage
This property specifies the content language.
java.util.Locale getContentLanguage()
setContentLanguage(java.util.Locale contentLanguage);
3.1.7ContentLength
This property contains the content length in bytes.
long getContentLength()
3.1.8ContentType
This property specifies the content type.
String getContentType()
setContentType(String contentType);
3.1.9ContentCharacterSet
This property specifies the content character set.
String getContentCharacterSet()
setContentCharacterSet(String contentCharacterSet);
3.1.10 ContentIdentifier
This property contains a string that can be used to determine
whether the content of the resource has changed. In particular, if
the content identifier of a resource has not changed, the content
of the resource also has not changed.
String getContentIdentifier()
Clemm [Page 13]
INTERNET-DRAFT WVCM API May 8, 2002
3.1.11 WorkspaceFolderList
This property identifies folders that may contain workspaces. This
property allows a client that knows the location of one resource in
a workspace to find other workspaces. An identified folder MAY be
the root folder of a tree of folders, all of which may contain
workspaces. Since different servers can control different parts of
the resource namespace, different resources on the same host MAY
have different WorkspaceFolderList values. The identified folders
MAY be located on different hosts from the resource.
<Folder>List getWorkspaceFolderList()
3.2 ControllableResource Properties
3.2.1Workspace
The Workspace property of a workspace resource MUST identify
itself. The Workspace property of any other type of resource MUST
be the same as the Workspace property of its parent folder.
Workspace getWorkspace()
3.2.2IsCheckedOut
This property identifies whether the resource is checked-out or
checked-in.
Boolean getIsCheckedOut()
3.2.3ServerState
In some implementations, persistent copies of the content and some
of the properties of the resource are maintained on both the client
and the server. If this ControllableResource has persistent state
on both the client and the server, this property identifies the
server resource corresponding to the client resource. If this
ControllableResource only has persistent state on the client or
only has persistent state on the server, this property is null.
ControllableResource getServerState()
3.2.4IsStale
This property identifies whether the content on the server has
changed since it was last synchronized with the content on the
client. If the ServerState property of this ControllableResource
is null, this property is false.
Boolean getIsStale()
Clemm [Page 14]
INTERNET-DRAFT WVCM API May 8, 2002
3.2.5IsDirty
This property identifies whether the content on the client has
changed since it was last synchronized with the content on the
server. If the ServerState property of this ControllableResource
is null, this property is false.
Boolean getIsDirty()
3.3 Workspace Properties
A workspace is a folder that can have both controlled and
uncontrolled members.
3.3.1WorkspaceCheckoutList
This property identifies each member of this Workspace that is
currently checked out.
<ControlledResource>List getWorkspaceCheckoutList()
3.3.2WorkspaceServerLocation
When a workspace has persistent state on both the client and the
server, this property identifies the location of the server
persistent state.
String getWorkspaceServerLocation()
setWorkspaceServerLocation(String location)
4 NON-VERSIONING METHODS
4.1 Resource Methods
4.1.1doCreateResource Method
The doCreateResource method can be used to create new persistent
uncontrolled resources.
Marshalling:
void doCreateResource()
Preconditions:
(resource-must-be-null): A resource MUST NOT exist at the location
of this Resource.
(location-ok): The location of this Resource MUST identify a valid
location to create this Resource.
Clemm [Page 15]
INTERNET-DRAFT WVCM API May 8, 2002
Postconditions:
(initialize-resource): A new resource of the specified type exists
at the location of this Resource.
4.1.2doReadProperties Method
The doReadProperties method returns a Resource containing the
requested set of properties of the resource identified by this
Resource.
Many property values are defined as a list of references to other
resources. The PropertyNameList provides a mechanism for
retrieving in one request the properties from the resources
identified by those references. This not only decreases the number
of requests required, but also allows the server to minimize the
number of separate read transactions required on the underlying
persistent store.
Marshalling:
Resource doReadProperties(PropertyNameList w)
4.1.3doWriteProperties Method
The doWriteProperties method commits the property updates that have
been applied to this Resource.
Marshalling:
void doWriteProperties()
4.1.4doReadContent Method
The doReadContent method writes the current content of the resource
identified by this Resource to the OutputStream, and returns a
Resource containing a requested set of properties of this Resource.
Marshalling:
Resource doReadContent(PropertyNameList w, OutputStream content)
4.1.5doWriteContent Method
The doWriteContent method writes the content from the InputStream
to the resource identified by this Resource. If the content
identifier of the resource at the time of the request does not
match the content identifier specified in the doWriteContent
argument list, the request fails. This allows the client to ensure
it is not overwriting content written by another client.
Clemm [Page 16]
INTERNET-DRAFT WVCM API May 8, 2002
Marshalling:
void doWriteContent(InputStream content, String contentIdentifier)
4.1.6doDelete Method
Marshalling:
void doDelete()
Postconditions:
(resource-deleted): There is no resource at the location identified
by this Resource.
4.1.7doCopy Method
Marshalling:
void doCopy(Resource destination, boolean overwrite)
Postconditions:
(must-not-copy-property): A property defined by this document MUST
NOT have been copied to the new resource created by this request,
but instead that property of the new resource MUST have the default
initial value it would have had if the new resource had been
created by doCreateResource.
(copy-creates-new-resource): If the source of a doCopy is a
controlled resource, and if there is no resource at the destination
of the doCopy, then the doCopy creates a new uncontrolled resource
at the destination of the doCopy.
4.1.8doMove Method
Marshalling:
void doMove(String destinationLocation, Boolean overwrite)
Postconditions:
(preserve-properties): The property values of the resource
identified by this Resource MUST NOT have been modified by the
doMove request unless this specification states otherwise.
(workspace-member-moved): If this Resource did not identify a
workspace, the Workspace property MUST have been updated to have
the same value as the Workspace of its parent folder at the
destination location.
Clemm [Page 17]
INTERNET-DRAFT WVCM API May 8, 2002
4.2 ControllableResource Methods
4.2.1Additional doWriteContent Semantics
Preconditions:
(cannot-modify-version-controlled-content): If this
ControllableResource identifies a resource whose IsCheckedOut
property is false, the request MUST fail.
4.2.2Additional doDelete Semantics
Preconditions:
(cannot-modify-checked-in-parent): If this Resource identifies a
controlled resource, the doDelete MUST fail when the folder
containing the controlled resource is a checked-in controlled
folder.
4.2.3Additional doMove Semantics
Preconditions:
(cannot-modify-checked-in-parent): If this ControllableResource is
a controlled resource, the request MUST fail when the folder
containing this ControllableResource is a checked-in controlled
folder.
(cannot-modify-destination-checked-in-parent): If this
ControllableResource is a controlled resource, the request MUST
fail when the folder containing the destination location is a
checked-in controlled folder.
4.2.4doControl Method
Marshalling:
void doControl()
Preconditions:
(cannot-modify-checked-in-parent): If the parent of this
ControllableResource is a checked-in controlled folder and this
ControllableResource is not already under control, the request MUST
fail.
Postconditions:
(initialize-checked-out): The IsCheckedOut property of the resource
identified by this ControllableResource MUST be FALSE.
Clemm [Page 18]
INTERNET-DRAFT WVCM API May 8, 2002
4.2.5doCheckout Method
A doCheckout request can be applied to a checked-in resource to
allow modifications to the content of that controlled resource.
Marshalling:
void doCheckout()
Preconditions:
(must-be-checked-in): The IsCheckedOut property of this
ControllableResource MUST be FALSE.
(must-not-be-stale): If the content is being maintained on both the
client and server, the state on the server MUST NOT have changed
since it was last synchronized with the state on the client.
Postconditions:
(is-checked-out): The resource identified by this
ControllableResource MUST have an IsCheckedOut property whose value
is TRUE.
4.2.6doCheckin Method
A doCheckin request can be applied to a checked-out controlled
resource to allow its content to be visible in other workspaces.
Marshalling:
void doCheckin()
Preconditions:
(must-be-checked-out): This ControllableResource MUST identify a
resource whose IsCheckedOut property is TRUE.
(must-not-be-stale): If the content is being maintained on both the
client and server, the state on the server MUST NOT have changed
since it was last synchronized with the state on the client.
Postconditions:
(update-server-content): If the content is being maintained on both
the client and server, the content on the server MUST have been
updated to contain the content on the client.
4.2.7doRefresh Method
If content for a resource is being maintained on both the client
and the server, a doRefresh request can be used to update the local
Clemm [Page 19]
INTERNET-DRAFT WVCM API May 8, 2002
persistent copy of the content of a controlled resource to be the
same as the persistent content on the server.
Marshalling:
void doRefresh(Boolean IgnoreDirty)
Preconditions:
(must-not-be-dirty): If IgnoreDirty is false, then the state on the
client MUST NOT have changed since it was last synchronized with
the state on the server.
Postconditions:
(content-synchronized): The content on the client has been updated
to be the same as the content on the server.
4.3 Folder Methods
4.3.1doReadMemberList Method
The doReadMemberList method returns a list of proxies containing
the requested set of properties, where the list contains the folder
and other members of that folder.
Marshalling:
<Resource>Iterator doReadMemberList
(PropertyNameList wantedPropertyList, boolean deep)
Postconditions:
(read-bound-members): The result contains a proxy for the folder
identified by this Folder, as well as a proxy for each bound member
of the folder.
(read-all-members): If deep is true, the result contains a proxy
for every member of the folder identified by this Folder.
4.4 Workspace Methods
4.4.1Additional doCreateResource Semantics
Preconditions:
(workspace-location-allowed): A server MAY restrict workspace
creation to particular folders, but a client can determine the
location of these folders from the WorkspaceFolderList property.
Clemm [Page 20]
INTERNET-DRAFT WVCM API May 8, 2002
(workspace-server-location-specified): If persistent state of the
workspace is stored on both the client and the server, the
WorkspaceServerLocation property MUST identify the location of the
server state for this Workspace.
4.4.2Additional doMove Semantics
Postconditions:
(workspace-moved): If this proxy identified a workspace, any
reference to that workspace in a Workspace property MUST have been
updated to refer to the new location of that workspace.
5 VERSIONING WORKSPACE SEMANTICS
When a server supports versioning, the history of the content of a
controlled resource is captured in the form of a set of versions of
that resource. Unlike non-versioning servers, where work can only
be effectively shared between the client workspaces that are
associated with a common server location, a versioning server
allows work to be shared in a very flexible manner between
arbitrary workspaces, by merging consistent sets of versions
created in one workspace into the corresponding controlled
resources of another workspace.
5.1 Creating a Version-Controlled Resource
In order to track the history of the content of a version-
controllable resource, a user can put the resource under version
control with a doControl request. The doControl request on a
version-controllable resource performs three distinct operations:
1) It creates a new version history resource. Each version history
resource is assigned a new distinct and unique server-defined
location.
2) It creates a new version resource and adds it to the new version
history resource. The content of the new version resource is a
copy of that of the controllable resource. The server assigns the
new version resource a new distinct and unique location.
3) It converts the controllable resource into a version-controlled
resource. Note that the location of the resource remains
unchanged. As part of this conversion, it adds a CheckedIn
property that identifies the new version resource.
Clemm [Page 21]
INTERNET-DRAFT WVCM API May 8, 2002
In the following example, foo.html is a controllable resource that
is put under version control. After the doControl request
succeeds, there are two additional resources: a new version history
resource and a new version resource in that version history. The
controllable resource is converted into a version-controlled
resource, whose CheckedIn property identifies the new version
resource. The content of a resource is represented by the symbol
appearing inside the box for that resource (e.g. "S1" in the
following example).
===doControl==>
| +----+ version
| version- | | history
controllable | controlled +----+ resource
resource | resource |
/foo.html | /foo.html |
| v
+----+ | +----+ CheckedIn +----+ version
| S1 | | | S1 |----------->| S1 | resource
+----+ | +----+ +----+ /his/73/ver/1
Thus, whereas before the doControl request there was only one,
uncontrolled resource, after doControl there are three separate,
distinct resources, each containing its own state and properties:
the version-controlled resource, the version resource, and the
version history resource. Since the version-controlled resource
and the version resource are separate, distinct resources, when a
method is applied to a version-controlled resource, it is only
applied to that version-controlled resource, and is not applied to
the version resource that is currently identified by the CheckedIn
property of that version-controlled resource. Although the content
of a checked-in version-controlled resource is required to be the
same as that of the version identified by its current CheckedIn
property, its properties may differ. An implementation may
optimize storage by retrieving the content of a checked-in version-
controlled resource from the version identified by its current
CheckedIn property rather than storing it in the version-controlled
resource, but this is just an implementation optimization.
5.2 Modifying a Version-Controlled Resource
In order to modify the content of a version-controlled resource,
the version-controlled resource must first be checked out. When
the checked-out resource is checked in, a new version is created in
the version history of that version-controlled resource. The
version that was checked out is remembered as the predecessor of
the new version.
Clemm [Page 22]
INTERNET-DRAFT WVCM API May 8, 2002
The following diagram illustrates the effect of the
checkout/checkin process on a version-controlled resource and its
version history. The symbol inside a box (S1, S2, S3) represents
the current content of the resource represented by that box. The
symbol next to a box (V1, V2, V3) represents the location of that
resource.
==doCheckout=> ==doWriteContent=> ==doCheckin=>
/foo.html (version-controlled resource)
+----+ | +----+ | +----+ | +----+
| S2 | | | S2 | | | S3 | | | S3 |
+----+ | +----+ | +----+ | +----+
Checked-In=V2|Checked-Out=V2|Checked-Out=V2|Checked-In=V3
/his/73 (version history for /foo.html)
+----+ | +----+ | +----+ | +----+
| S1 | V1 | | S1 | V1 | | S1 | V1 | | S1 | V1
+----+ | +----+ | +----+ | +----+
| | | | | | |
| | | | | | |
+----+ | +----+ | +----+ | +----+
| S2 | V2 | | S2 | V2 | | S2 | V2 | | S2 | V2
+----+ | +----+ | +----+ | +----+
| | | |
| | | |
| | | +----+
| | | | S3 | V3
| | | +----+
Note that a version captures only a defined subset of the state of
a resource. In particular, a version of a basic resource captures
its content, but not its live properties.
5.3 Workspaces
Multiple workspaces may be used to expose different versions and
configurations of a set of version-controlled resources
concurrently. In order to make changes to a version-controlled
resource in one workspace visible in another workspace, that
version-controlled resource must be checked in, and then the
corresponding version-controlled resource in the other workspace
can be updated to display the content of the new version.
In order to ensure unambiguous baselining (see Section 5.5) and
merging (see Section 5.7) semantics, a workspace may contain at
most one version-controlled resource for a given version history.
This is required for unambiguous baselining because a baseline can
Clemm [Page 23]
INTERNET-DRAFT WVCM API May 8, 2002
only select one version for a given version-controlled resource.
This is required for unambiguous merging because the doMerge method
must identify which version-controlled resource is to be the merge
target of a given version.
Initially, an empty workspace can be created. New resources can
then be added to the workspace with methods such as
doCreateResource. Version-controlled resources for existing
version histories can be added to the workspace with
doCreateControlledResource requests. Folders in the workspace can
be placed under baseline control, and then initialized by existing
baselines.
5.4 Folder Versions
As with any version-controllable resource, when a version-
controllable folder is put under control, a version history
resource is created to contain its versions. In order to preserve
standard versioning semantics (a version of a folder should not be
modifiable), a folder version only records information about the
version-controlled bindings of that folder. In order to add,
remove, or rename a controlled bound member of a controlled folder,
the folder must first be checked out and then checked in to commit
the change.
In order to cleanly separate a modification to the namespace from a
modification to content, a version of a folder has no members, but
instead records in its ControlledBindingList property the binding
name and version history resource of each version-controlled bound
member of that folder. If, instead, a folder version contained
bindings to other versions, creating a new version of a resource
would require creating a new version of all the folder versions
that contain that resource, which would cause activities to become
entangled. For example, suppose a "feature-12" activity created a
new version of /x/y/a.html. If a folder version contained bindings
to versions of its members, a new version of /x/y would have to be
created to contain the new version of /x/y/a.html, and a new
version of /x would have to be created to contain the new version
of /x/y. Now suppose a "bugfix-47" activity created a new version
of /x/z/b.html. Again, a new version of /x/z and a new version of
/x would have to be created to contain the new version of
/x/y/b.html. But now it is impossible to merge just "bugfix-47"
into another workspace without "feature-12", because the version of
/x that contains the desired version of /x/z/b.html also contains
version of /x/y/a.html created for "feature-12". If, instead, a
folder version just records the binding name and version history
resource of each version-controlled bound member, changing the
version selected by a member of that folder would not require a new
version of the folder. The new version is still in the same
version history so no new folder version is required, and "feature-
12" and "bugfix-47" would not become entangled.
Clemm [Page 24]
INTERNET-DRAFT WVCM API May 8, 2002
In the following example, there are three version histories, named
VH14, VH19, and VH24, where VH14 contains versions of a folder.
The version-controlled folder /x has version V2 of version history
VH14 as its CheckedIn version. Since V2 has recorded two version
controlled bindings, one with binding name "a" to version history
VH19, and the other with binding name "b" to version history VH24,
/x MUST have two version-controlled bindings, one named "a" to a
version-controlled resource for history VH19, and the other named
"b" to a version-controlled resource for history VH24. The
version-controlled resource /x/a currently has V4 of VH19 as its
CheckedIn version, while /x/b has V8 of VH24 as its CheckedIn
version.
VH19
+---------+
| +---+ |
| | |V4 |
| +---+ |
| | |
| | |
| +---+ |
| | |V5 |
VH14 | +---+ |
+---------+ | | |
| +---+ | | | |
a +---+ | | |V1 | | +---+ |
---->| |CheckedIn=V4 | +---+ | a | | |V6 |
/ +---+ | | ------>| +---+ |
/ | | / | +---------+
+---+ | +---+ |
/x | |CheckedIn=V2 | | |V2 |
+---+ | +---+ | VH24
\ | | \ | b +---------+
\ b +---+ | | ------>| +---+ |
---->| |CheckedIn=V8 | +---+ | | | |V7 |
+---+ | | |V3 | | +---+ |
| +---+ | | | |
+---------+ | | |
| +---+ |
| | |V8 |
| +---+ |
| | |
| | |
| +---+ |
| | |V9 |
| +---+ |
+---------+
For any request (e.g. doControl, doDelete, doMove) that modifies a
version-controlled binding of a checked-in version-controlled
folder, the request MUST fail.
Clemm [Page 25]
INTERNET-DRAFT WVCM API May 8, 2002
Although a folder version only records the version-controlled bound
members of a folder, a version-controlled folder MAY have both
controlled and uncontrolled bound members. Uncontrolled bound
members are not under version control, and therefore can be added
or deleted without checking out the version-controlled folder.
Note that a folder version captures only a defined subset of the
state of a folder. In particular, a version of a folder captures
its bindings to version-controlled resources, but not its live
properties or bindings to uncontrolled members.
5.5 Configurations and Baselines
A configuration is a set of resources that consists of all members
of a root folder except those resources that are members of another
configuration. A configuration that contains a large number of
resources can consume a large amount of space on a server. This
can make it prohibitively expensive to capture the state of a
configuration by creating a copy of all resources in the
configuration.
A baseline is a version resource that captures the state of each
version-controlled member of a configuration. A baseline history
is a version history whose versions are baselines. New baselines
are created by checking out and then checking in a special kind of
version-controlled resource called a version-controlled
configuration.
A folder that is under baseline control is called a baseline-
controlled folder. In order to allow efficient baseline
implementation, the state of a baseline of a folder is limited to
be a set of versions and their names relative to the folder, and
the operations on a baseline are limited to the creation of a
baseline from a folder, and restoring or merging the baseline back
into a folder. A client can use the doBaselineControl method to
put a specified folder under baseline control.
As a configuration gets large, it is often useful to break it up
into a set of smaller configurations that form the logical
"components" of that configuration. In order to capture the fact
that a baseline of a configuration is logically extended by a
component configuration baseline, the component configuration
baseline is captured as a "sub-baseline" of the baseline.
The root folder of a configuration is unconstrained with respect to
its relationship to the root folder of any of its components. In
particular, the root folder of a configuration can have a member
that is the root folder of one of its components (e.g.
configuration /sys/x can have a component /sys/x/foo), can be a
member of the root folder of one of its components (e.g.
configuration /sys/y/z can have a component /sys/y), or neither
(e.g. configuration /sys/x can have a component /comp/bar).
Clemm [Page 26]
INTERNET-DRAFT WVCM API May 8, 2002
In the following example, the folder /src is placed under baseline
control, and is populated with members from an existing baseline.
A new version-controlled configuration (/repo/vcc/128) is created
and associated with /src, and /src is initialized with version-
controlled members whose CheckedIn versions are those selected by
the BaselineFolder (/repo/bc/15) of the specified baseline
(/repo/blh/13/ver/8). The following diagram illustrates the
resulting state on the server.
+----------------------------+
|Baseline-Controlled Folder |<------+
|/src | |
|----------------------------| |
|ControlledConfiguration +---+ |
+----------------------------+ | |
| |
| |
+----------------------------+ | |
|Controlled Configuration |<--+ |
|/repo/vcc/128 | |
|----------------------------| |
|RootFolder +-------+
|----------------------------|
|CheckedIn +-------+
|----------------------------+ |
|VersionHistory +---+ |
+----------------------------+ | |
| |
| |
+--------------------+ | |
|Baseline History |<----------+ |
|/repo/blh/13 | |
|--------------------+ |
|VersionList +-----------+ |
+--------------------+ | | | |
v | v |
| |
+--------------------+ | |
|Baseline |<-------+------+
|/repo/blh/13/ver/8 |
|--------------------+ +------------+
|BaselineFolder +-->|Folder |
+--------------------+ |/repo/bc/15 |
+------------+
In order to create new baselines of /src, /repo/vcc/128 can be
checked out, new versions can be created or selected by the
version-controlled members of /src, and then /repo/vcc/128 can be
checked in to capture the current state of those version-controlled
members.
Clemm [Page 27]
INTERNET-DRAFT WVCM API May 8, 2002
5.6 Activities
An activity is a resource that selects a set of versions that are
on a single "line of descent", where a line of descent is a
sequence of versions connected by successor relationships. If an
activity selects versions from multiple version histories, the
versions selected in each version history must be on a single line
of descent.
A common problem that motivates the use of activities is that it is
often desirable to perform several different logical changes in a
single workspace, and then selectively merge a subset of those
logical changes to other workspaces. An activity can be used to
represent a single logical change, where an activity tracks all the
resources that were modified to effect that single logical change.
When a version-controlled resource is checked out, the user
specifies which activity should be associated with a new version
that will be created when that version-controlled resource is
checked in. It is then possible to select a particular logical
change for merging into another workspace, by specifying the
appropriate activity in a doMerge request.
Another common problem is that although a version-controlled
resource may need to have multiple lines of descent, a particular
team may want all work done by members of that team to be on a
single line of descent (to avoid merging between team members). An
activity resource provides the mechanism for addressing this
problem. When a version-controlled resource is checked out, a
client can request that an existing activity be used or that a new
activity be created. Activity semantics then ensure that all
versions in a given version history that are associated with an
activity are on a single line of descent. If all members of a team
share a common activity (or sub-activities of a common activity),
then all changes made by members of that team will be on a single
line of descent.
Clemm [Page 28]
INTERNET-DRAFT WVCM API May 8, 2002
The following diagram illustrates activities. Version V5 is the
latest version of foo.html selected by activity Act-2, and version
V8 is the latest version of bar.html selected by activity Act-2.
foo.html History bar.html History
+---+ +---+
Act-1| |V1 Act-1| |V6
+---+ +---+
| |
| |
+---+ +---+
Act-1| |V2 Act-2| |V7
+---+ +---+
/ \ |
/ \ |
+---+ +---+ +---+
Act-1| |V3 Act-2| |V4 Act-2| |V8
+---+ +---+ +---+
| |
| |
+---+ +---+
Act-2| |V5 Act-3| |V9
+---+ +---+
Activities appear under a variety of names in existing versioning
systems. When an activity is used to capture a logical change, it
is commonly called a "change set". When an activity is used to
capture a line of descent, it is commonly called a "branch". When
a system supports both branches and change sets, it is often useful
to require that a particular change set occur on a particular
branch. This relationship can be captured by making the change set
activity be a "sub-activity" of the branch activity.
5.7 Merging
When a user wants to accept the changes (new versions) created by
someone else, it is important not just to update the version-
controlled resources in the user's workspace with those new
versions, since this could result in "backing out" changes the user
has made to those version-controlled resources. Instead, the
versions created in another workspace should be "merged" into the
user's version-controlled resources.
The version history of a version-controlled resource provides the
information needed to determine the result of the merge. In
particular, the merge should select whichever version is later in
the line of descent from the root version. In case the versions to
be merged are on different lines of descent (neither version is a
descendant of the other), neither version should be selected, but
instead, a new version should be created that contains the logical
merge of the content of those versions. The doMerge request can be
used to check out each version-controlled resource that requires
Clemm [Page 29]
INTERNET-DRAFT WVCM API May 8, 2002
such a merge, and set the MergeList property of each checked-out
resource to identify the version to be merged. The user is
responsible for modifying the content of the checked-out resource
so that it represents the logical merge of that version, and then
adding that version to the PredecessorList of the checked-out
resource.
If the server is capable of automatically performing the merge, it
MAY update the content and PredecessorList of the checked-out
resource itself. Before checking in the automatically merged
resource, the user is responsible for verifying that the automatic
merge is correct.
5.8 Labels
A version "label" is a string that distinguishes one version in a
version history from all other versions in that version history. A
label can automatically be assigned by a server, or it can be
assigned by a client in order to provide a meaningful name for that
version. A given version label can be assigned to at most one
version of a given version history, but client assigned labels can
be reassigned to another version at any time. Note that although a
given label can be applied to at most one version from the same
version history, the same label can be applied to versions from
different version histories.
6 VERSIONING PROPERTIES
6.1 Additional Resource Properties
6.1.1ActivityFolderList
This property identifies folders on the server implementing this
resource that may contain activities. This property allows a
client that knows the location of one resource on a server to find
activities on that server. An identified folder MAY be the root
folder of a tree of folders, all of which may contain activities.
Since different servers can control different parts of the resource
namespace, different resources on the same host MAY have different
ActivityFolderList values. The identified folders MAY be located
on different hosts from the resource.
<Folder>List getActivityFolderList()
6.1.2VersionHistoryFolderList
This property identifies folders on the server implementing this
resource that may contain version histories. This property allows
a client that knows the location of one resource on a server to
find version histories on that server. An identified folder MAY be
Clemm [Page 30]
INTERNET-DRAFT WVCM API May 8, 2002
the root folder of a tree of folders, all of which may contain
version histories. Since different servers can control different
parts of the resource namespace, different resources on the same
host MAY have different VersionHistoryFolderList values. The
identified folders MAY be located on different hosts from the
resource.
<Folder>List getVersionHistoryFolderList()
6.2 Additional ControllableResource Properties
6.2.1VersionControllable
This property identifies whether or not versions will be tracked
for the resource when it is controlled.
Boolean getVersionControllable()
6.2.2VersionHistory
This property identifies the version history resource for the
CheckedIn or CheckedOut version of this version-controlled
resource.
VersionHistory getVersionHistory()
6.2.3CheckedIn
This property appears on a checked-in version-controlled resource,
and identifies a version that has the same content as the version-
controlled resource. This property is removed when the resource is
checked out, and then added back (identifying a new version) when
the resource is checked back in.
Version getCheckedIn()
6.2.4CheckedOut
This property on a checked-out version-controlled resource
identifies the version that was identified by the CheckedIn
property at the time the resource was checked out. This property is
removed when the resource is checked in.
Version getCheckedOut()
6.2.5PredecessorList
This property on a checked-out version-controlled resource
determines the PredecessorList property of the version that results
from checking in this resource.
A server MAY reject attempts to modify the PredecessorList of a
version-controlled resource.
Clemm [Page 31]
INTERNET-DRAFT WVCM API May 8, 2002
<Version>List getPredecessorList()
setPredecessorList(<Version>List)
6.2.6ActivityList
This property on a checked-out version-controlled resource
determines the ActivityList property of the version that results
from checking in this resource.
<Activity>List getActivityList()
setActivityList(<Activity>List)
6.2.7Unreserved
This property on a checked-out version-controlled resource
indicates whether the ActivityList of another checked-out resource
associated with the version history of this version-controlled
resource can have an activity that is in the ActivityList property
of this checked-out resource.
A result of the requirement that an activity must form a single
line of descent through a given version history is that if multiple
checked-out resources for a given version history are checked out
unreserved into a single activity, only the first doCheckin will
succeed. Before another of these checked-out resources can be
checked in, the user will first have to merge into that checked-out
resource the latest version selected by that activity from that
version history, and then modify the PredecessorList of that
checked-out resource to identify that version.
boolean getUnreserved()
setUnreserved(boolean unreserved)
6.2.8MergeList
This property on a checked-out version-controlled resource
identifies each version that is to be merged into this checked-out
resource.
<Version>List getMergeList()
setMergeList(<Version>List)
6.2.9AutoMergeList
This property on a checked-out version-controlled resource
identifies each version that the server has merged into this
checked-out resource. The client should confirm that the merge has
been performed correctly before moving an entry from the
AutoMergeList to the PredecessorList of a checked-out resource.
<Version>List getAutoMergeList()
setAutoMergeList(<Version>List)
Clemm [Page 32]
INTERNET-DRAFT WVCM API May 8, 2002
6.2.10 ControlledConfiguration
If the resource is a member of a controlled configuration (i.e. the
resource is a member of a folder under baseline control), this
property identifies that controlled configuration.
Configuration getControlledConfiguration()
6.3 Folder Properties
6.3.1BaselineControllable
This property identifies whether or not the folder can be placed
under baseline control with a doBaselineControl request.
Boolean getBaselineControllable()
6.3.2EclipsedList
When a folder is version-controlled, this property identifies the
uncontrolled bound members of the folder that currently are
eclipsing a version-controlled bound member of the folder.
<String>List getEclipsedList()
A doUpdate or doMerge request can give a version-controlled folder
a version-controlled bound member that has the same name as an
existing uncontrolled bound member. In this case, the uncontrolled
bound member takes precedence and is said to "eclipse" the new
versioned-controlled bound member. If the uncontrolled bound
member is removed (e.g. by a doDelete or doMove), the version-
controlled bound member is exposed.
6.4 Additional Workspace Properties
6.4.1BaselineControlledFolderList
This property identifies each member of the workspace that is a
folder under baseline control.
<Folder>List getBaselineControlledFolderList()
6.4.2CurrentActivityList
This property identifies the activities that currently are being
performed in this workspace. When a member of this workspace is
checked out, if no activity is specified in the checkout request,
the CurrentActivityList will be used. This allows an activity-
unaware client to update a workspace in which activity tracking is
required. The CurrentActivityList MAY be restricted to identify at
most one activity.
Clemm [Page 33]
INTERNET-DRAFT WVCM API May 8, 2002
<Activity>List getCurrentActivityList()
setCurrentActivityList(<Activity>List)
6.5 Version Properties
6.5.1VersionHistory
This property identifies the version history that contains this
version.
VersionHistory getVersionHistory()
6.5.2PredecessorList
This property identifies each predecessor of this version. Except
for the root version, which has no predecessors, each version has
at least one predecessor.
<Version>List getPredecessorList()
6.5.3SuccessorList
This property identifies each version whose PredecessorList
identifies this version.
<Version>List getSuccessorList()
6.5.4CheckoutList
This property identifies each checked-out resource whose CheckedOut
property identifies this version.
<ControllableResource>List getCheckoutList()
6.5.5ActivityList
This property identifies the activities that determine to which
logical changes this version contributes, and on which lines of
descent this version appears. A server MAY restrict the
ActivityList to identify a single activity. A server MAY refuse to
allow the value of the ActivityList property of a version to be
modified.
<Activity>List ActivityList()
setActivityList(<Activity>List)
6.5.6CheckoutFork
This property controls the behavior of doCheckout when a version
already is checked out or has a successor. If the CheckoutFork of
a version is FORBIDDEN, a doCheckout request MUST fail if it would
result in that version appearing in the PredecessorList or
CheckedOut property of more than one version or checked-out
Clemm [Page 34]
INTERNET-DRAFT WVCM API May 8, 2002
resource. If CheckoutFork is DISCOURAGED, such a doCheckout
request MUST fail unless forkOk is specified in the doCheckout
request.
A server MAY reject attempts to modify the CheckoutFork of a
version.
int getCheckoutFork()
setCheckoutFork(int checkoutFork)
6.5.7CheckinFork
This property controls the behavior of doCheckin when a version
already has a successor. If the CheckinFork of a version is
FORBIDDEN, a doCheckin request MUST fail if it would result in that
version appearing in the PredecessorList of more than one version.
If CheckinFork is DISCOURAGED, such a doCheckin request MUST fail
unless forkOk is specified in the doCheckin request.
A server MAY reject attempts to modify the CheckinFork of a
version.
int getCheckinFork()
setCheckinFork(int checkinFork)
6.5.8VersionName
This property contains a server-defined string that is different
for each version in a given version history. This string is
intended for display to a user, unlike the location of a version,
which is normally only used by a client and not displayed to a
user.
String getVersionName()
6.5.9LabelNameList
This property contains the labels that currently select this
version.
<String>List getLabelNameList()
6.6 VersionHistory Properties
6.6.1RootVersion
This property identifies the root version of this version history.
Version getRootVersion()
6.6.2VersionList
This property identifies each version of this version history.
Clemm [Page 35]
INTERNET-DRAFT WVCM API May 8, 2002
<Version>List getVersionList()
6.7 Folder Version Properties
6.7.1ControlledBindingList
This property captures the name and version-history of each
version-controlled bound member of a folder.
<Binding>List getControlledBindingList()
Interface Binding {
String getBindingName();
VersionHistory getVersionHistory(); }
6.8 Baseline Properties
6.8.1BaselineFolder
This property identifies a folder at a server-defined location,
where each member of this folder MUST either be a version-
controlled resource with the same CheckedIn version and relative
name as a version-controlled member of the baseline-controlled
folder at the time the baseline was created, or be a folder needed
to provide the relative name for a version-controlled resource.
Folder getBaselineFolder()
6.8.2SubbaselineList
The sub-baselines of a baseline are the baselines identified by its
SubbaselineList and all sub-baselines of the baselines identified
by its SubbaselineList.
<Baseline>List getSubbaselineList()
6.9 Configuration Properties
6.9.1RootFolder
This property identifies the root folder of the configuration. The
ControlledConfiguration property of the root folder of a version-
controlled configuration MUST identify that version-controlled
configuration.
Folder getRootFolder()
6.9.2SubbaselineList
This property of a checked-out version-controlled configuration
determines the SubbaselineList property of the baseline that
results from checking it in.
Clemm [Page 36]
INTERNET-DRAFT WVCM API May 8, 2002
A server MAY reject attempts to modify the SubbaselineList of a
checked-out configuration.
<Baseline>List getSubbaselineList()
setSubbaselineList(<Baseline>List)
6.10Activity Properties
6.10.1 ActivityVersionList
This property identifies each version whose ActivityList property
identifies this activity. Multiple versions of a single version
history can be selected by an activity's ActivityVersionList
property, but all ActivityVersionList versions from a given version
history must be on a single line of descent from the root version
of that version history.
<Version>List getActivityVersionList()
6.10.2 ActivityCheckoutList
This property identifies each checked-out resource whose
ActivityList identifies this activity.
<ControllableResource>List getActivityCheckoutList()
6.10.3 SubactivityList
This property identifies each activity that forms a part of the
logical change being captured by this activity. An activity
behaves as if its ActivityVersionList is extended by the
ActivityVersionList of each activity identified in the
SubactivityList. In particular, the versions in this extended set
MUST be on a single line of descent, and when an activity selects a
version for merging, the latest version in this extended set is the
one that will be merged.
A server MAY reject attempts to modify the SubactivityList of an
activity.
<Activity>List getSubactivityList()
setSubactivityList(<Activity>List)
6.10.4 CurrentWorkspaceList
This property identifies each workspace whose CurrentActivityList
identifies this activity.
<Workspace>List getCurrentWorkspaceList()
Clemm [Page 37]
INTERNET-DRAFT WVCM API May 8, 2002
7 VERSIONING METHODS
7.1 Additional ControllableResource Methods
7.1.1Additional doControl Semantics
Postconditions:
(put-under-version-control): If this ControllableResource
identified a version-controllable resource at the time of the
request, the request MUST have created a new version history and
MUST have created a new version resource in that version history.
The resource MUST have a CheckedIn property that identifies the new
version. The content of the new version MUST be the same as that
of the resource. Note that an implementation can choose to locate
the version history and version resources anywhere that it wishes.
In particular, it could locate them on the same host and server as
the version-controlled resource, on a different virtual host
maintained by the same server, on the same host maintained by a
different server, or on a different host maintained by a different
server.
(must-not-change-existing-checked-in-out): If this
ControllableResource identified a resource already under version
control at the time of the request, the request MUST NOT change the
CheckedIn or CheckedOut property of that version-controlled
resource.
(new-version-history): If the request created a new version
history, the request MUST have allocated a new server-defined
location for that version history that MUST NOT have previously
identified any other resource, and MUST NOT ever identify a
resource other than this version history.
7.1.2Additional doCheckout Semantics
A doCheckout request can be applied to a checked-in version-
controlled resource to allow modifications to the content of that
version-controlled resource.
Marshalling:
void doCheckout(
boolean forkOK,
List activityList,
boolean newActivity,
boolean unreserved)
Clemm [Page 38]
INTERNET-DRAFT WVCM API May 8, 2002
Preconditions:
(checkout-of-version-with-descendant-is-forbidden): If the
CheckoutFork property of the version being checked out is
FORBIDDEN, the request MUST fail if a version identifies that
version in its PredecessorList.
(checkout-of-version-with-descendant-is-discouraged): If the
CheckoutFork property of the version being checked out is
DISCOURAGED, the request MUST fail if a version identifies that
version in its PredecessorList unless forkOk is specified in the
request.
(checkout-of-checked-out-version-is-forbidden): If the CheckoutFork
property of the version being checked out is FORBIDDEN, the request
MUST fail if a checked-out resource identifies that version in its
CheckedOut property.
(checkout-of-checked-out-version-is-discouraged): If the
CheckoutFork property of the version being checked out is
DISCOURAGED, the request MUST fail if a checked-out resource
identifies that version in its CheckedOut property unless forkOk is
specified in the request.
(must-not-update-baseline-folder): If this ControllableResource
identifies a member of the BaselineFolder of a baseline, the
request MUST fail.
(one-checkout-per-activity-per-history): If there is a request
activity set, unless Unreserved is specified, another checkout from
a version of that version history MUST NOT select an activity in
that activity set.
(linear-activity): If there is a request activity set, unless
Unreserved is specified, the selected version MUST be a descendant
of all other versions of that version history that select that
activity.
Postconditions:
(has-checked-out-version): The checked-out resource MUST have a
CheckedOut property that identifies the CheckedIn version preceding
the checkout. The version-controlled resource MUST NOT have a
CheckedIn property.
(initialize-predecessor-list): The PredecessorList property of the
checked-out resource MUST be initialized to be the CheckedOut
version.
(initialize-activity-list): The ActivityList of the checked-out
resource is set as follows:
- If newActivity is specified, then a new activity created by the
server is used.
Clemm [Page 39]
INTERNET-DRAFT WVCM API May 8, 2002
- Otherwise, if activityList is non-empty, then those activities
are used.
- Otherwise, if the version-controlled resource is a member of a
workspace and the CurrentActivityList of the workspace is set, then
those activities are used.
- Otherwise, the ActivityList of the CheckedOut version is used.
(initialize-unreserved): If unreserved was specified in the
request, then the Unreserved property of the checked-out resource
MUST be "true".
7.1.3Additional doCheckin Semantics
A doCheckin request can be applied to a checked-out version-
controlled resource to produce a new version whose content is
copied from the checked-out resource.
Marshalling:
void doCheckin(boolean keepCheckedOut, boolean forkOK)
Preconditions:
(version-history-is-tree) The versions identified by the
PredecessorList of the checked-out resource MUST be descendants of
the root version of the version history for the CheckedOut version.
(checkin-fork-forbidden): A doCheckin request MUST fail if it would
cause a version whose CheckinFork is FORBIDDEN to appear in the
PredecessorList of more than one version.
(checkin-fork-discouraged): A doCheckin request MUST fail if it
would cause a version whose CheckinFork is DISCOURAGED to appear in
the PredecessorList of more than one version, unless forkOk is
specified in the request.
(merge-must-be-complete): The MergeList and AutoMergeList of the
checked-out resource MUST be empty or not exist.
(linear-activity): Any version which is in the version history of
the checked-out resource and whose ActivityList identifies an
activity from the ActivityList of the checked-out resource MUST be
an ancestor of the checked-out resource.
Postconditions:
(create-version): The request MUST have created a new version in
the version history of the CheckedOut version. The request MUST
have allocated a distinct new location for the new version, and
that location MUST NOT ever identify any resource other than that
version.
Clemm [Page 40]
INTERNET-DRAFT WVCM API May 8, 2002
(initialize-version-content-and-properties): The content and
PredecessorList of the new version MUST be copied from the checked-
out resource. The VersionName of the new version MUST be set to a
server-defined value distinct from all other VersionName values of
other versions in the same version history.
(checked-in): If this ControllableResource identifies a version-
controlled resource and keepCheckedOut is not specified in the
request, the CheckedOut property of the version-controlled resource
MUST have been removed and a CheckedIn property that identifies the
new version MUST have been added.
(keep-checked-out): If keepCheckedOut is specified in the request,
the CheckedOut property of the checked-out resource MUST have been
updated to identify the new version.
(add-to-history): The new version resource MUST have been added to
the VersionList of the version history of the CheckedOut version.
(initialize-activity-list): The ActivityList of the new version
MUST have been initialized to be the same as the ActivityList of
the checked-out resource.
(initialize-version-controlled-bindings): If this
ControllableResource identified a version-controlled folder, then
the ControlledBindingList of the new folder version MUST contain a
Binding that identifies the binding name and version history for
each version-controlled binding of the version-controlled folder.
7.1.4Additional doMove Semantics
Postconditions:
(update-checked-out-reference): If a checked-out resource is moved,
any reference to that resource in a ActivityCheckoutList property
MUST be updated to refer to the new location of that resource.
7.1.5doUncheckout Method
A doUncheckout request can be applied to a checked-out version-
controlled resource to cancel the checkout and restore the pre-
checkout state of the version-controlled resource.
Marshalling:
void doUncheckout()
Preconditions:
(must-be-checked-out-version-controlled-resource): This
ControllableResource MUST identify a version-controlled resource
with a CheckedOut property.
Clemm [Page 41]
INTERNET-DRAFT WVCM API May 8, 2002
Postconditions:
(cancel-checked-out): The value of the CheckedIn property is that
of the CheckedOut property prior to the request, and the CheckedOut
property has been removed.
(restore-content): The content of the version-controlled resource
is a copy of that of its CheckedIn version.
7.1.6doCreateControlledResource Method
A doCreateControlledResource request can also be used to create a
new version-controlled resource for an existing version history.
This allows the creation of version-controlled resources for the
same version history in multiple workspaces.
Marshalling:
void doCreateControlledResource(Version v)
Preconditions:
(cannot-modify-checked-in-parent): If the parent of this
ControllableResource is a checked-in version-controlled folder, the
request MUST fail.
(cannot-add-to-existing-history): This ControllableResource MUST
NOT identify an existing resource.
(one-version-controlled-resource-per-history-per-workspace): There
MUST NOT already be a version-controlled member in the workspace of
this ControllableResource whose CheckedIn or CheckedOut property
identifies any version from the version history of the version
specified in the request.
Postconditions:
(new-version-controlled-resource): A new version-controlled
resource exists at the location of this ControllableResource whose
content is initialized by those of the version in the request, and
whose CheckedIn property identifies that version.
(new-version-controlled-folder): If the request identified a folder
version, the folder identified by this ControllableResource MUST
contain a version-controlled bound member for each Binding
specified in the ControlledBindingList of the folder version, where
the name and version history of the bound member MUST be the name
and version history specified by the Binding. If the bound member
is a member of a workspace, and there is another member of the
workspace for the same version history, those two members MUST
identify the same version-controlled resource; otherwise, a
doCreateControlledResource request with a server selected version
Clemm [Page 42]
INTERNET-DRAFT WVCM API May 8, 2002
of the version history MUST have been applied to the location of
that bound member.
7.1.7doUpdate Method
The doUpdate method modifies the content of a checked-in version-
controlled resource (the "update target") to be those of a
specified version (the "update source") from the version history of
that version-controlled resource. The response to a doUpdate
request identifies the resources modified by the request, so that a
client can efficiently update any cached state it is maintaining.
Marshalling:
Iterator doUpdate
(Version v, PropertyNameList wantedPropertyList)
Preconditions:
(version-in-version-history): The Version argument must identify a
version from the version history of this ControllableResource.
(must-not-update-baseline-folder): If this ControllableResource
identifies a member of the BaselineFolder of a baseline, the
request MUST fail.
Postconditions:
(update-content-and-properties): If the Version argument identified
a version that is in the same version history as the CheckedIn
version of a version-controlled resource identified by this
ControllableResource, then the content of that version-controlled
resource MUST be the same as those of the version specified by the
Version argument, and the CheckedIn property of the version-
controlled resource MUST identify that version.
(report-properties): The properties specified in the
wantedPropertyList argument MUST be reported in the result.
(update-version-controlled-folder-members): If the request modified
the CheckedIn version of a version-controlled folder, then the
version-controlled members of that version-controlled folder MUST
have been updated. In particular:
- A version-controlled bound member MUST have been deleted if its
version history is not identified by the ControlledBindingList of
the new CheckedIn version.
- A version-controlled bound member for a given version history
MUST have been renamed if its binding name differs from the Binding
name for that version history in the ControlledBindingList of the
new CheckedIn version.
- A new version-controlled bound member MUST have been created when
a version history is identified by the ControlledBindingList of the
Clemm [Page 43]
INTERNET-DRAFT WVCM API May 8, 2002
CheckedIn version, but there was no member of the version-
controlled folder for that version history.
If a new version-controlled member is in a workspace that already
has a version-controlled resource for that version history, then
the new version-controlled member MUST be just a binding (i.e.
another name for) that existing version-controlled resource.
Otherwise, the content of the new version-controlled member MUST
have been initialized to be those of the version specified for that
version history by the request. If no version is specified for
that version history by the request, the version selected is server
defined.
7.1.8doMerge Method
The doMerge method performs the logical merge of a specified
version (the "merge source") into the version-controlled resource
(the "merge target"). If the merge source is neither an ancestor
nor a descendant of the CheckedIn or CheckedOut version of the
merge target, the doMerge checks out the merge target (if it is not
already checked out) and adds the merge source to the MergeList of
the merge target. It is then the client's responsibility to update
the content of the checked-out merge target so that it reflects the
logical merge of the merge source into the current state of the
merge target. The client indicates that it has completed the
update of the merge target, by deleting the merge source from the
MergeList of the checked-out merge target, and adding it to the
PredecessorList. As an error check for a client forgetting to
complete a merge, the server MUST fail an attempt to doCheckin a
version-controlled resource with a non-empty MergeList.
When a server has the ability to automatically update the content
of the merge target to reflect the logical merge of the merge
source, it may do so unless noAutoMerge is specified in the doMerge
request. In order to notify the client that a merge source has
been automatically merged, the doMerge request MUST add the auto-
merged source to the AutoMergeList property of the merge target,
and not to the MergeList property. The client indicates that it
has verified that the auto-merge is valid, by deleting the merge
source from the AutoMergeList, and adding it to the
PredecessorList.
Marshalling:
ControllableResource doMerge(
Version source,
boolean noAutoMerge,
boolean noCheckout,
boolean forkOK,
boolean unreserved,
<Activity>List activityList,
boolean newActivity,
PropertyNameList wantedPropertyList)
Clemm [Page 44]
INTERNET-DRAFT WVCM API May 8, 2002
Preconditions:
(checkout-not-allowed): If noCheckout is specified in the request,
it MUST be possible to perform the merge without checking out the
merge target.
All preconditions of the doCheckout operation apply to any checkout
performed by the request.
(must-not-update-baseline-folder): Same semantics as doUpdate (see
Section 7.1.7).
Postconditions:
(ancestor-version): If the merge target is a version-controlled
resource whose CheckedIn version or CheckedOut version is the merge
source or is a descendant of the merge source, the merge target
MUST NOT have been modified by the doMerge.
(descendant-version): If the merge target was a checked-in version-
controlled resource whose CheckedIn version was an ancestor of the
merge source, a doUpdate operation MUST have been applied to the
merge target to set its content to be that of the merge source. If
the doUpdate method is not supported, the merge target MUST have
been checked out, the content of the merge target MUST have been
set to those of the merge source, and the merge source MUST have
been added to the AutoMergeList of the merge target.
(checked-out-for-merge): If the merge target was a checked-in
version-controlled resource whose CheckedIn version was neither a
descendant nor an ancestor of the merge source, a doCheckout MUST
have been applied to the merge target. All arguments that could
appear in a doCheckout request MUST have been used as arguments to
the doCheckout request.
(update-merge-list): If the CheckedOut version of the merge target
is not equal to or a descendant of the merge source, the merge
source MUST be added to either the MergeList or the AutoMergeList
of the merge target. The merge target MUST appear in the result.
If a merge source has been added to the AutoMergeList, the content
of the merge target MUST have been modified by the server to
reflect the result of a logical merge of the merge source and the
merge target. If a merge source has been added to the MergeList,
the content of the merge target MUST NOT have been modified by the
server. If noAutoMerge is specified in the request, the merge
source MUST NOT have been added to the AutoMergeList.
(report-properties): The properties of the merge target specified
in the wantedPropertyList argument MUST be reported in the result.
(update-version-controlled-folder-members): Same semantics as
doUpdate (see Section 7.1.7).
Clemm [Page 45]
INTERNET-DRAFT WVCM API May 8, 2002
7.1.9doMergePreview Method
The doMergePreview method returns a MergePreviewReport that
identifies the changes that would result if the version specified
by the source argument in the request were to be merged into the
resource identified by this ControllableResource.
Marshalling:
MergePreviewReport doMergePreviewReport(Version source)
interface MergePreviewReport { }
interface Update extends MergePreviewReport {
ControllableResource getTarget();
Version getVersion(); }
interface Conflict extends MergePreviewReport {
ControllableResource getTarget();
Version getCommonAncestor();
<Version>List getVersionList(); }
Interface Ignore extends MergePreviewReport {
Version GetVersion(); }
An Update identifies a merge target whose CheckedIn property would
change as a result of the doMerge, and identifies the merge source
for that merge target.
A Conflict identifies a merge target that requires a merge, where
the common ancestor identifies the version that is a common
ancestor of both the merge source and the CheckedIn or CheckedOut
version of the merge target.
An Ignore identifies a version that has no merge target and
therefore could not be merged.
7.2 Additional Workspace Methods
7.2.1Additional doMove Semantics
Postconditions:
(update-workspace-reference): If this proxy identifies a workspace,
any reference to that workspace in a CurrentWorkspaceList property
MUST be updated to refer to the new location of that workspace.
7.2.2Additional doMerge Semantics
When doMerge is applied to a workspace, multiple merge sources can
be specified in a single doMerge request. The set of merge sources
for a doMerge request is determined from the sourceList of the
doMerge request as follows:
Clemm [Page 46]
INTERNET-DRAFT WVCM API May 8, 2002
- If a sourceList member identifies a baseline, that baseline is a
merge source.
- If a sourceList member identifies a version-controlled resource,
the CheckedIn version of that version-controlled resource is a
merge source.
- If a sourceList member identifies a folder, the CheckedIn version
of each version-controlled resource that is a member of that folder
is a merge source.
- If a sourceList member identifies an activity, then for each
version history containing a version selected by that activity, the
latest version selected by that activity is a merge source. Note
that the versions selected by an activity are the versions in its
ActivityVersionList unioned with the versions selected by the
activities in its SubactivityList.
Any member of the workspace is a possible merge target. The merge
target of a particular merge source is the version-controlled
resource whose CheckedIn or CheckedOut version is from the same
version history as the merge source. If a merge source has no
merge target, that merge source is ignored.
If the merge source is a baseline, the merge target is a version-
controlled configuration for the baseline history of that baseline,
where the baseline-controlled folder of that version-controlled
configuration is a member of the workspace.
The response to a doMerge request identifies the resources that a
client must modify to complete the merge. It also identifies the
resources modified by the request, so that a client can efficiently
update any cached state it is maintaining.
Marshalling:
<ControllableResource>Iterator doMerge(
<Resource>List sourceList,
boolean noAutoMerge,
boolean noCheckout,
boolean checkinActivity,
boolean forkOK,
boolean unreserved,
<Activity>List activityList,
boolean newActivity,
PropertyNameList wantedPropertyList)
Preconditions:
(cannot-merge-checked-out-resource): The sourceList argument member
MUST NOT identify a checked-out resource. If the sourceList
argument member identifies a folder, the folder MUST NOT have a
member that is a checked-out resource.
Clemm [Page 47]
INTERNET-DRAFT WVCM API May 8, 2002
Postconditions:
(merge-baseline): If the merge target is a version-controlled
configuration whose CheckedOut baseline is not a descendant of the
merge baseline, then the merge baseline MUST have been added to the
AutoMergeList of a version-controlled configuration. The CheckedIn
version of each member of the BaselineFolder of that baseline MUST
have been merged into the RootFolder of that version-controlled
configuration.
(merge-sub-baselines): If the merge target is a version-controlled
configuration whose RootFolder contains a baseline-controlled
member for one of the sub-baselines of the merge baseline, then
that sub-baseline MUST have been merged into the version-controlled
configuration of that baseline-controlled member. If the merge
target is a version-controlled configuration whose RootFolder is a
member of a workspace that contains a baseline-controlled member
for one of the sub-baselines of the merge baseline, then that sub-
baseline MUST have been merged into the version-controlled
configuration of that baseline-controlled member.
(set-baseline-controlled-folder-members): Same semantics as
doUpdate (see Section 7.4.2).
7.2.3Additional doMergePreview Semantics
When the doMergePreview method is applied to a workspace, a list of
merge sources can be specified, and an iterator is returned of
MergePreviewReport objects that identify how the members of the
workspace identified by this Workspace would be modified by the
merge.
Marshalling:
<MergePreviewReport>Iterator doMergePreviewReport(List sourceList)
7.2.4doLocateByHistory Method
Many properties identify a version from some version history. It
is often useful to be able to efficiently locate a version-
controlled resource for that version history. The
doLocateByHistory method can be applied to a workspace to locate
the workspace member that is a version-controlled resource for one
of the specified version history resources.
Marshalling:
<ControllableResource>List doLocateByHistoryReport(
List versionHistoryList,
PropertyNameList wantedPropertyList)
Clemm [Page 48]
INTERNET-DRAFT WVCM API May 8, 2002
7.3 Additional Folder Methods
7.3.1doBaselineControl Method
A folder can be placed under baseline control with a
doBaselineControl request. When a folder is placed under baseline
control, the ControlledConfiguration property of the folder is set
to identify a new version-controlled configuration. This version-
controlled configuration can be checked out and then checked in to
create a new baseline for that folder. A new baseline history is
created containing a baseline that captures the state of the
version-controlled members of the folder, and the CheckedIn version
of the version-controlled configuration will be that baseline.
Marshalling:
void doBaselineControl()
Preconditions:
(controlled-configuration-must-not-exist): The
ControlledConfiguration property of the folder identified by this
Folder MUST not exist.
Postconditions:
(create-controlled-configuration): A new version-controlled
configuration is created, whose RootFolder property identifies the
folder.
(reference-controlled-configuration): The ControlledConfiguration
of the folder identifies the new version-controlled configuration.
(create-new-baseline): The request MUST have created a new baseline
history at a server-defined location, and MUST have created a new
baseline in that baseline history. The BaselineFolder of the new
baseline MUST identify a folder whose members have the same
relative name and CheckedIn version as the version-controlled
members of the request folder. The CheckedIn property of the new
version-controlled configuration MUST identify the new baseline.
7.3.2doCreateBaselineControlledFolder Method
A baseline-controlled folder for an existing baseline history can
be created with a doCreateBaselineControlledFolder request. When
the folder is created, the ControlledConfiguration property of the
folder is set to identify a new version-controlled configuration
whose CheckedIn version will be a specified baseline, and the
folder is initialized to contain version-controlled members whose
CheckedIn versions and relative names are determined by the
specified baseline.
Clemm [Page 49]
INTERNET-DRAFT WVCM API May 8, 2002
Marshalling:
void doCreateBaselineControlledFolder(Baseline baseline)
Preconditions:
(cannot-add-to-existing-history): This Folder MUST NOT identify an
existing resource.
(one-baseline-controlled-folder-per-history-per-workspace): There
MUST NOT be another folder in the workspace of this Folder whose
ControlledConfiguration property identifies a version-controlled
configuration for the baseline history of that baseline.
Postconditions:
(create-controlled-configuration): A new folder is created at the
location of this Folder, and a new version-controlled configuration
is created, whose RootFolder property identifies the new folder.
The ControlledConfiguration property of the new folder identifies
the new version-controlled configuration.
(select-existing-baseline): The CheckedIn property of the new
version-controlled configuration MUST have been set to identify the
specified baseline. A version-controlled member of the folder will
be created for each version in the baseline, where the version-
controlled member will have the content of that version, and will
have the same name relative to the folder as the corresponding
version-controlled resource had when the baseline was created. Any
nested folders that are needed to provide the appropriate name for
a version-controlled member will be created.
7.4 Configuration Methods
7.4.1Additional doCheckin Semantics
A doCheckin request can be applied to a checked-out version-
controlled configuration to produce a new baseline whose Baseline-
Folder captures the current state of the version-controlled members
of the RootFolder of the configuration.
Preconditions:
(no-checked-out-baseline-controlled-folder-members): If this
ControllableResource identifies a version-controlled configuration,
all version-controlled members of the RootFolder of the version-
controlled configuration MUST be checked-in.
(one-version-per-history-per-baseline): If this configuration
identifies a version-controlled configuration, the set of versions
selected by that version-controlled configuration MUST contain at
most one version from any version history, where a version is
Clemm [Page 50]
INTERNET-DRAFT WVCM API May 8, 2002
selected by a version-controlled configuration if the version is
identified by the CheckedIn property of any member of the baseline-
controlled folder of that version-controlled configuration, or is
identified by the CheckedIn property of any member of the
BaselineFolder of any sub-baseline of that version-controlled
configuration.
Postconditions:
(create-baseline-folder): If this ControllableResource identifies a
version-controlled configuration, the BaselineFolder of the new
baseline identifies a folder whose members have the same relative
name and CheckedIn version as the members of the RootFolder of the
version-controlled configuration at the time of the request.
7.4.2Additional doUpdate Semantics
Preconditions:
(baseline-controlled-members-must-be-checked-in): If this
Configuration identifies a version-controlled configuration, then
all version-controlled members of the RootFolder of that version-
controlled configuration MUST be checked-in.
Postconditions:
(set-baseline-controlled-folder-members): If the request updated
the CheckedIn property of a version-controlled configuration, then
the version-controlled members of the RootFolder of that version-
controlled configuration MUST have been updated so that they have
the same relative name, content, as the members of the
BaselineFolder of the baseline. In particular:
- A version-controlled member for a given version history MUST have
been deleted if there is no version-controlled member for that
version history in the BaselineFolder of the baseline.
- A version-controlled member for a given version history MUST have
been renamed if its name relative to the baseline-controlled folder
is different from that of the version-controlled member for that
version history in the BaselineFolder of the baseline.
- A new version-controlled member MUST have been created for each
member of the BaselineFolder of the baseline for which there is no
corresponding version-controlled member in the baseline-controlled
folder.
- A doUpdate request MUST have been applied to each version-
controlled member for a given version history whose CheckedIn
version is not the same as that of the version-controlled member
for that version history in the BaselineFolder of the baseline.
(update-sub-baselines): If the request updated a version-controlled
configuration whose RootFolder is a member of a workspace that
contains a baseline-controlled member for one of the sub-baselines
of the request baseline, then the CheckedIn property of the
Clemm [Page 51]
INTERNET-DRAFT WVCM API May 8, 2002
version-controlled configuration of that baseline-controlled member
MUST have been updated to be that sub-baseline.
7.5 Version Methods
7.5.1Additional doWriteContent Semantics
Preconditions:
(cannot-modify-version): If this proxy identifies a version, the
request MUST fail.
7.5.2Additional doCopy Semantics
Postconditions:
(copy-creates-new-resource): If this proxy identifies a version,
and if there is no resource at the destination of the doCopy, then
the doCopy creates a new uncontrolled resource at the destination
of the doCopy.
7.5.3Additional doMove Semantics
Preconditions:
(cannot-rename-version): If this proxy identifies a version, the
request MUST fail.
7.5.4Additional doDelete Semantics
Preconditions:
(no-version-delete): A server MAY fail an attempt to apply doDelete
to a version.
Postconditions:
(update-predecessor-list): If a version was deleted, the server
MUST have replaced any reference to that version in a
PredecessorList by a copy of the PredecessorList of the deleted
version.
(version-history-has-root): If the request deleted the root version
of a version history, the request MUST have updated the RootVersion
of the version history to refer to another version that is an
ancestor of all other remaining versions in that version history.
A result of this postcondition is that every version history will
have at least one version, and the only way to delete all versions
is to delete the version history resource.
Clemm [Page 52]
INTERNET-DRAFT WVCM API May 8, 2002
(delete-version-reference): If a version is deleted, any reference
to that version in a MergeList or AutoMergeList property MUST be
removed.
7.5.5doAddLabel Method
A doAddLabel request can be applied to a version to add a new label
to the LabelNameList property of that version. The case of a label
name MUST be preserved when it is stored and retrieved. When
comparing two label names to decide if they match or not, a server
SHOULD use a case-sensitive comparison of the two label names.
Marshalling:
void doAddLabel(String label)
Preconditions:
(add-must-be-new-label): The specified label MUST NOT appear in the
LabelNameList of any other version in the version history of that
version.
Postconditions:
(add-label): The specified label MUST appear in the LabelNameList
of the specified version, and MUST NOT appear in the LabelNameList
of any other version in the version history of that version.
7.5.6doSetLabel Method
A doSetLabel request can be applied to a version to remove that
label from the LabelNameList property of any other version in the
version history of that version, and to add that label to the
LabelNameList property of that version. The case of a label name
MUST be preserved when it is stored. When comparing two label
names to decide if they match or not, a server SHOULD use a case-
sensitive comparison of the two label names.
Marshalling:
void doSetLabel(String label)
Postconditions:
(set-label): The specified label MUST appear in the LabelNameList
of the specified version, and MUST NOT appear in the LabelNameList
of any other version in the version history of that version.
Clemm [Page 53]
INTERNET-DRAFT WVCM API May 8, 2002
7.5.7doRemoveLabel Method
A doRemoveLabel request can be applied to a version to remove that
label from the LabelNameList of that version. When comparing two
label names to decide if they match or not, a server SHOULD use a
case-sensitive comparison of the two label names.
Marshalling:
void doRemoveLabel(String label)
Preconditions:
(label-must-exist): The specified label MUST appear in the
LabelNameList of that version.
Postconditions:
(remove-label): The specified label MUST NOT appear in the
LabelNameList of any version in the version history of that
version.
7.6 Version History Methods
7.6.1Additional doCopy Semantics
Preconditions:
(cannot-copy-history): If this proxy identifies a version history,
the request MUST fail. In order to create another version history
whose versions have the same content, the appropriate sequence of
doControl, doCheckout, doWriteContent, and doCheckin requests must
be made.
7.6.2Additional doMove Semantics
Preconditions:
(cannot-rename-history): This proxy MUST NOT identify a version
history.
7.6.3Additional doDelete Semantics
Postconditions:
(delete-version-set): If the request deleted a version history, the
request MUST have deleted all versions in the VersionList of that
version history, and MUST have satisfied the postconditions for
version deletion.
Clemm [Page 54]
INTERNET-DRAFT WVCM API May 8, 2002
7.7 Folder Version Methods
7.7.1Additional doCopy Semantics
Preconditions:
(cannot-copy-folder-version): This proxy MUST NOT identify a folder
version.
7.8 Baseline Methods
7.8.1doCompareBaseline Method
A doCompareBaseline method reports the differences between the
baseline identified by this Baseline (the "request baseline") and
the baseline specified in the request (the "compare baseline").
Marshalling:
public interface AddedVersion {
public Version getVersion; }
public interface DeletedVersion {
public Version getVersion; }
public interface ChangedVersion {
public Version getOldVersion();
public Version getNewVersion(); }
public Iterator doCompareBaselineReport(Baseline baseline)
An AddedVersion object identifies a version that is the CheckedIn
version of a member of the BaselineFolder of the compare baseline,
but no version in the version history of that version is the
CheckedIn version of a member of the BaselineFolder of the request
baseline.
A DeletedVersion object identifies a version that is the CheckedIn
version of a member of the BaselineFolder of the request baseline,
but no version in the version history of that version is the
CheckedIn version of a member of the BaselineFolder of the compare
baseline.
A ChangedVersion object identifies two different versions from the
same version history that are the CheckedIn version of the
BaselineFolder of the request baseline and the compare baseline,
respectively.
Preconditions:
(baselines-from-same-history): A server MAY require that the
baselines being compared be from the same baseline history.
Clemm [Page 55]
INTERNET-DRAFT WVCM API May 8, 2002
7.9 Activity Methods
7.9.1Additional doCreateResource Semantics
Preconditions:
(activity-location-allowed): A server MAY restrict activity
creation to particular folders, but a client can determine the
location of these folders from the ActivityFolderList property.
7.9.2Additional doMove Semantics
Postconditions:
(update-activity-reference): If this proxy identifies an activity,
any reference to that activity in a ActivityList, SubactivityList,
or CurrentActivityList MUST be updated to refer to the new location
of that activity.
7.9.3Additional doDelete Semantics
Postconditions:
(delete-activity-reference): If an activity is deleted, any
reference to that activity in an ActivityList, SubactivityList, or
CurrentActivityList MUST be removed.
7.9.4Additional doCheckin Semantics
Preconditions:
(atomic-activity-checkin): If this proxy identifies an activity,
the server MAY fail the request if any of the checked-out resources
in the ActivityCheckoutList of either that activity or any sub-
activity of that activity cannot be checked in.
Postconditions:
(activity-checkin): If this proxy identified an activity, the
server MUST have applied the doCheckin request to each checked-out
resource in the ActivityCheckoutList of both that activity and any
sub-activity of that activity.
8 INTERNATIONALIZATION CONSIDERATIONS
All of the internationalization considerations of DeltaV discussed
in RFC 3253 also apply to the WVCM API.
Clemm [Page 56]
INTERNET-DRAFT WVCM API May 8, 2002
9 SECURITY CONSIDERATIONS
The security considerations of DeltaV discussed in RFC 3253 also
apply to the WVCM API.
10 IANA CONSIDERATIONS
No IANA considerations apply to the WVCM API.
11 INTELLECTUAL PROPERTY
The following notice is copied from RFC 2026, Section 10.4, and
describes the position of the IETF concerning intellectual property
claims made against this document.
The IETF takes no position regarding the validity or scope of any
intellectual property or other rights that might be claimed to
pertain to the implementation or use other technology described in
this document or the extent to which any license under such rights
might or might not be available; neither does it represent that it
has made any effort to identify any such rights. Information on
the procedures of the IETF with respect to rights in standards-
track and standards-related documentation can be found in BCP-11.
Copies of claims of rights made available for publication and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use
of such proprietary rights by implementers or users of this
specification can be obtained from the IETF Secretariat.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to practice
this standard. Please address the information to the IETF
Executive Director.
12 ACKNOWLEDGEMENTS
This API is the collaborative product of the author and the members
of the JSR-147 expert team: Nick Crossley(Telelogic), John Dooley
(Broadvision), Tim Ellison (IBM), Peter Raymond (Merant), and Eric
Sedlar (Oracle). We would like to acknowledge the foundation laid
for us by the authors of the DeltaV protocol.
13 REFERENCES
[RFC2026] S.Bradner, "The Internet Standards Process", RFC 2026,
October 1996.
[RFC2119] S.Bradner, "Key words for use in RFCs to Indicate
Requirement Levels", RFC 2119, March 1997.
Clemm [Page 57]
INTERNET-DRAFT WVCM API May 8, 2002
[RFC2518] Y.Goland, E.Whitehead, A.Faizi, S.R.Carter, D.Jensen,
"HTTP Extensions for Distributed Authoring - WEBDAV", RFC 2518,
February 1999.
[RFC2616] R.Fielding, J.Gettys, J.C.Mogul, H.Frystyk, L.Masinter,
P.Leach, and T.Berners-Lee, "Hypertext Transfer Protocol --
HTTP/1.1", RFC 2616, June 1999.
14 AUTHOR'S ADDRESS
Geoffrey Clemm
Rational Software
20 Maguire Road, Lexington, MA 02421
Email: geoffrey.clemm@rational.com
Clemm [Page 58]