[oslc-scm] Responses to Frank's questions
Nick Crossley
ncrossley at us.ibm.com
Wed Mar 10 10:26:55 EST 2010
Frank,
Thanks for the input, and sorry for the very long delay in responding - I
wanted to get some of your questions and issues discussed by the workgroup
in our meetings.
Below are my responses to all of your issues; the spec pages on the wiki
have also been updated to reflect the current state.
> Remark 1:
> If we abstract files and directories into VersionedObjects, we must take
into account that VersionedObjects could be any versioned entity, not only
files and directories.
> We might even assert that a non-versioned object is a VersionedObject
with only 1 version (ever). So we must be careful not to imply
all-and-every object type under VersionedObjects.
We propose that all SCM resources are of types that are subtypes of
versioned object, though providers may restrict some types to have only
one version. So, yes we do imply all-and-every object type under
versioned object.
> Remark 2:
> The definition of Configuration will / may change into:
> Configuration - a thing that has a specific version of a one or more top
level VersionedObject, and under those specific versions of any number of
VersionedObjects.
> This sounds odd... If we abstract files and directories into
VersionedObjects, we still must distinguish between
CompositeVersionedObjects and AtomicVersionedObjects,
> where CompositeVersionedObjects are VersionedObjects that can contain
(other?) VersionedObjects, and AtomicVersionedObjects cannot. This way,
the configuration will become:
> Configuration - a thing that has a specific version of a one or more top
level CompositeVersionedObject, and under those specific versions of any
number of VersionedObjects.
> But why should a configuration be a (one or more) "directory" (or
CompositeVersionedObject)? A configuration can also be one or more
(individual) "files" (VersionedObjects)
> that "belong" together to a specific reason. For example, a
configuration could be "all source files" or "build results of build 123"
even when they are spread across multiple directories.
At least with the current set of SCM services, we see no need to
distinguish between composite and atomic objects. In fact, a specific
type might be composite in one provider and atomic in another - consider a
FileVersion, which might be a composite type in a Mac provider that kept
data forks and resource forks separately. Obviously, some types must be
composite, such as configurations, baselines, directories, etc., but since
we define specific operations on and properties of those types, we have no
current need to define a common supertype. This might change in the
future as we add more resource types and operations on those types.
> Remark 3:
> I think that a definition with "a thing" is not accurate enough. I
propose to call it a "collection" or a "set".
> And "one or more top level" is also to vague. What is "top level" and
why do we need to distinguish between "zero" and "one or more"?
> Proposal: Configuration - a collection of a specific version of (a
number of) CompositeVersionObjects.
The wording has been updated, and now allows for zero members. We
distinguish top-level members for the purpose of limiting the number of
resources returned from queries, for scalability reasons. By default, if
you ask for the members of a container, you get only the immediate or
top-level members; to get indirect members (members of members) you must
use the oslc_scm:recurse parameter.
> Remark 3:
> I think we need the term "configuration" and "configuration item"
because it is a commonly used term in SCM practice, even though the terms
are often unclear or even undefined.
> A configuration may be considered identical to a
CompositeVersionedObject (which results in a possibility of nested
configurations) and a configuration item may be considered
> identical to a VersionedObject.
I have added a reference to the term "configuration item".
> Remark 4:
> Baseline - a frozen configuration. [...] a baseline can be an
incremental baseline, with a link to some previous incremental or full
baseline.
> A baseline being incremental or full, linked to other baselines or not
is an implementation choice of the provider. In all cases, it remains a
frozen configuration,
> i.e. a reproducible, immutable configuration.
We agreed, and all reference to incremental baselines has now been
removed.
> Remark 5:
> Component - an abstract concept representing some user-defined
configuration or set of configurations
> I think a component should not be an "abstract" concept. It should be
"an identifiable configuration".
> Moreover, I think that baseline and component are both identifiable
configurations, uniquely named within the relevant namespace.
I'm still working on the distinction between configurations and components
- I'll send you an update on that soon.
> Remark 6:
> In this sentence:
> required properties must be provided for any resource when requested;
this does not imply that these properties are provided by default.
> I think this is contradictive. To me "must be provided" means the same
as "are provided by default" (maybe it's my lack knowledge of English
idiom).
I've expanded the wording here to try to make the intent more clear. A
required property is one that every resource must have, and so the
provider must return it if requested. However, for scalability reasons,
not all properties are returned by default, if no oslc:properties is
given. An optional property might not exist on all resources, and so
might not be able to be provided even if requested.
> Remark 7:
> those that do not exist will not be present in the returned
representation even if requested
> This should be extended with "those that do exist will be present in the
returned representation if requested".
I added this.
> Remark 8: Change sets
> In the definition of change set, it is said to be "all or nothing". But
how about objects (VersionedObjects) that are associated with multiple
change sets?
> ...
> In other words, we must be careful with statements like "all or
nothing". I don't say that I disagree, only that we should be careful with
it.
> We should probably take a special look at "overlapping" change sets and
how to deal with them.
I added some more wording to explain that an SCM system might not
guarantee the atomicity of change sets.
> Remark 9: Change sets
> We should also be careful with a term like "one logical change".
I added wording to make it clear that "one logical change" is one possible
use or intent of a change set, rather than a definition of a change set.
> Remark 10: olcs_scm:changes
> A change set is an identifiable set of versions. Therefore, 2 properties
must be required: name and changes. The set of changes may be empty,
> but it should always be possible to request set set of versions.
Yes, it is always possible to request the set, and that set might be
returned as an empty set, or the returned resource might just omit that
property to indicate that the set is empty. I've added wording to the
spec to explain this.
> Remark 11: get change set
> Don't we need a set operation for a change set? Probably the property
oslc_scm:changes is set as an indirect effect of another operation
> (e.g. check in, or submit). But other properties (e.g. owner) should be
changeable.
> And we should be explicit about changing the name (dc:identifier) of a
change set. I think we should forbid changing the dc:identifier property.
In OSLC SCM 1.0, there are no set or modify operations; the only
operations defined are read-only GET requests. This will certainly change
in the future, and at that time we will need to define which properties
may or may not be modified.
> Remark 12: Baseline of baselines
> The oslc_scm:baseline property should be defined differently. Whether a
baseline is incremental or full is a matter of implementation by the
provider. In both cases, the baseline is
> a complete configuration. So I would not waste a property on it.
Agreed - see earlier response: we have removed all references to
incremental baselines.
> On the other hand, a baseline should be per definition (and the text may
be adapted accordingly) a "previous" baseline + changes relative to the
"previous" baseline
> In this case, the property oslc_scm:baseline specifies the previous
baseline and the property oslc_scm:changesets specifies the changes
relative to the previous baseline.
While this would be nice to provide, many (most?) SCM systems do not
guarantee to keep available a complete historical record of the baseline
of a baseline, etc. Previous baselines might not be recorded, or they
might be deleted, depending on the implementation. For these reasons, we
will not define an OSLC property for the 'previous baseline'.
> Remark 13: Baseline recursion
> This is something I don't understand. A baseline is a (frozen)
configuration and a configuration is a set of VersionedObjects ...
As explained above, the recursion is provided as an option to retrieve the
entire set of members in one GET operation. It is an option because for
scalability reasons you probably do not want that potentially very large
list to be returned by default. The recursion has nothing to do with
creating the baseline, because we do not yet provide any such operation.
> Remark 14: Baseline get
> Don't we need more operations?
Yes, we need baseline compare: I'll be adding that soon.
Again, thanks for your valuable feedback!
Nick.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://open-services.net/pipermail/oslc-scm_open-services.net/attachments/20100310/358c6963/attachment-0003.html>
More information about the Oslc-Scm
mailing list