Hi all,
I don't know if anyone already thought about this, but I want to make a
suggestion to solve this issue in a general way.
Goal:
- custom properties usable as keywords in files
- introduce property inheritance via new keyword-lookup hook to ease the
repository administration
I hope you like and understand this idea:
Whenever a file is checked out or updated in the local copy, the following
actions should be performed:
- For each file (x) the keyword-lookup-hook is executed with keyword
"svn:keywords" as parameter.
This hook returns the current file-name or any parent directory (y) with
the property-name (p) to use.
The hook can also use the file-extension or mime-type to retrieve a
specific property name (whatever is wanted by the hook).
Each of those properties are read from the transaction or reporitory and a
hash or simple set is constructed:
unique key: filename x
value: keywords retrieved from property p of file y (containing
custom keywords (k))
- For each custom keyword (k) of file (x) the keyword-lookup-hook is
executed with keyword k as parameter.
Again the hook returns the current file-name or any parent directory (y2)
with the property-name (p2) to use.
- For each file x the pre-defined keywords are replaced
- For each custom keyword (k) of file (x) the value of property p2 of file
y2 is used for replacement.
Whenever a repository is commited:
- Find the keywords and remove those keyword-values from the file by
invoking the keyword-lookup-hook
with"svn:keywords".
In such a case the clients local copy must be updated automatically (must
be done anyway to reflect the new
predefined keywords, which change also on a commit)
Example:
Repository: http://svn.collab.net/repos/svn
Property on directory /trunk:
"default-keywords"="Id URL Date Revision Author Project"
"keyword-pattern"="*.c;*.cc;*.cpp;*.h;*.hh;*.hpp"
"Project"="Subversion"
Property on directory /trunk/www:
"keyword-pattern"="*.html;*.eps;*.xml"
"Project"="Subversion Intro/Docs?"
Property on directory /trunk/tools:
"Version"="1.1"
Property on directory /trunk/tools/hook-scripts:
"default-keywords"="Id URL Date Revision Author Version"
Example-Hook keyword-lookup:
When the hook gets a "svn:keywords" passed in, it looks first for
"svn:keywords" on the file itself,
if not set, it looks for any "default-keywords" in the parent-tree and
returns the property location, if
the file-extension matches with a found "keyword-pattern".
If any other parameter is passed in it just searches that property going the
tree up.
New hook keyword-lookup
parameters: repository, revision-id, transactions-id, keyword
output: file/url where the keyword is attached to and can be
retrieved from
returns: 0 on success and an errocode if not found
Because I don't know the Subversion-code, I have no idea how complicated
this is to translate into c/c++.
But the solution I think is using a hook to find the keywords, ... and this
gives the reposity-admin a powerfull weapon as well.
Of course the svnlook-command must be able to retrieve properties from the
transaction and the repository
(which it is according to the Subversion Book - I havn't tried it.)
I would be glad to see this issue solved in this or a similar way and hope I
could give at least some inspiration.
Cheers,
Mike Friedrich
Received on Mon Apr 4 10:53:21 2005