Xavier Hanin wrote:
What I think is really important is to be able to go back to the
version of
metadata used for a particular build, and using a tool like svn for
that is
something I've already considered and seen implemented by some
customers. It
works pretty well, the problem is that then you have to deal with
metadata
versions (as you explain Stephane) and this is not easy. Especially when
several nodes in your dependency graph require different metadata
revisions.
What is even less easy is to maintain metadata for a public repository
where
you can't be sure the change is an improvement. It can be for one
person but
not for the other.
"improvement" is indeed relative. It is just like fixing bugs.
If an app relies on a bug (eeek) to do things and that later this bug is
fixed, this may trigger another bug. :)
I would not really look for granular metadata revision to the node level
(this can get too complicated and is really unecessary to me) but more
on the whole repository thing.
Basically on your configuration you would say "I depend on r214093 of
the repository (or a tag name if you wish...))
That's why I began to thought about using compatible metadata
revision, so
that you never break anything. Whenever you want to change the
metadata of a
module, the only thing you can do is to add new configurations, and maybe
deprecate others. The metadata revision is identified in the file by
an id
(which could be simple incremental number, or by a timestamp/user uple as
you indicate) Each configuration declares in which metadata revision
it has
been introduced/deprecated. By default when you depend on a module you
depend on its first metadata revision, unless explicitly specified
(specifying a specific revision or the latest one if it makes sense).
[...]
This will get way too granular I think.
And just adding configuration is enough to break things too.
I think we have to recognize as Steve said, that metadata can change.
This is a fact of life. Trying to solve this problem will simply get
things way more complicated than they actually are or need to be and we
will get entangled into a gigantic net which will make your life 10
times more difficult.
And how do you manage dependencies too ? In a corporate environment you
can be mean and when you upgrade a third party foo 1.1 to 1.2 you could
very well want to change (for very valid reasons) all other dependency
descriptors (even third party one) that say that depends on foo 1.1 and
bump them to foo 1.2 (which avoids unecessary conflict resolution and
unnecessary clutter).
-- stephane