From: Junio C Hamano <hidden> Date: 2016-06-15 22:43:03
Frank Lichtenheld [off-list ref] writes:
+[[dbbackend]]
+Database Backend
+----------------
+
+git-cvsserver uses one database per git head (i.e. CVS module) to
Probably "git branch" is easier to understand than "git head".
+store information about the repository for faster access. The
+database doesn't contain any persitent data and can be completly
+regenerated from the git repository at any time. The database
+needs to be updated (i.e. written to) after every commit. That
+means that even if you offer only read access (e.g. by using
+the pserver method), git-cvsserver should have write access to
+the database to work reliably (otherwise you need to make sure
+that the database if up-to-date all the time git-cvsserver is run).
This rationale for db update is a bit hard to understand.
Immediately saying that you need a database update "after every
commit", you say that read-only access still need it.
I think the situation where database update is needed is when a
commit on the branch that has not been given to any cvs client
is given out for the first time, and when somebody adds new
commits from git side, the cvsserver session that serves the
commit for the first time needs to record the branch
information.
From: Frank Lichtenheld <hidden> Date: 2016-06-15 22:43:03
On Sun, Apr 08, 2007 at 01:44:50AM -0700, Junio C Hamano wrote:
Frank Lichtenheld [off-list ref] writes:
quoted
+[[dbbackend]]
+Database Backend
+----------------
+
+git-cvsserver uses one database per git head (i.e. CVS module) to
Probably "git branch" is easier to understand than "git head".
Hmm, should I replace "git head" with "git branch" everywhere
in the document or does it make sense sometimes to use "head"?
Because there are already several places in the current documentation
where head is used.
quoted
+store information about the repository for faster access. The
+database doesn't contain any persitent data and can be completly
+regenerated from the git repository at any time. The database
+needs to be updated (i.e. written to) after every commit. That
+means that even if you offer only read access (e.g. by using
+the pserver method), git-cvsserver should have write access to
+the database to work reliably (otherwise you need to make sure
+that the database if up-to-date all the time git-cvsserver is run).
This rationale for db update is a bit hard to understand.
Immediately saying that you need a database update "after every
commit", you say that read-only access still need it.
I think the situation where database update is needed is when a
commit on the branch that has not been given to any cvs client
is given out for the first time, and when somebody adds new
commits from git side, the cvsserver session that serves the
commit for the first time needs to record the branch
information.
That's what I meant, yes ;)
Will try to reword it to actually say it, too.
Gruesse,
--
Frank Lichtenheld [off-list ref]
www: http://www.djpig.de/
From: Frank Lichtenheld <hidden> Date: 2016-06-15 22:43:04
Documents the new configuration variables and the variable
substitution mechanism.
Signed-off-by: Frank Lichtenheld <redacted>
---
Documentation/git-cvsserver.txt | 93 +++++++++++++++++++++++++++++++++++++--
1 files changed, 89 insertions(+), 4 deletions(-)
Reworded the section about git-cvsserver needing to update the
database.
@@ -65,11 +65,12 @@ env variable, you can rename git-cvsserver to cvs. ------ Note: you need to ensure each user that is going to invoke git-cvsserver has-write access to the log file and to the git repository. When offering anon-access via pserver, this means that the nobody user should have write access-to at least the sqlite database at the root of the repository.+write access to the log file and to the database (see+<<dbbackend,Database Backend>>. If you want to offer write access over+SSH, the users of course also need write access to the git repository itself.-Both configuration variables can also be overriden for a specific method of+[[configaccessmethod]]+All configuration variables can also be overriden for a specific method of access. Valid method names are "ext" (for SSH access) and "pserver". The following example configuration would disable pserver access while still allowing access over SSH.
@@ -105,6 +106,90 @@ Example: cvs co -d project-master master ------+[[dbbackend]]+Database Backend+----------------++git-cvsserver uses one database per git head (i.e. CVS module) to+store information about the repository for faster access. The+database doesn't contain any persitent data and can be completly+regenerated from the git repository at any time. The database+needs to be updated (i.e. written to) after every commit.++If the commit is done directly by using git (as opposed to+using git-cvsserver) the update will need to happen on the+next repository access by git-cvsserver, independent of+access method and requested operation.++That means that even if you offer only read access (e.g. by using+the pserver method), git-cvsserver should have write access to+the database to work reliably (otherwise you need to make sure+that the database if up-to-date all the time git-cvsserver is run).++By default it uses SQLite databases in the git directory, named+`gitcvs.<module_name>.sqlite`. Note that the SQLite backend creates+temporary files in the same directory as the database file on+write so it might not be enough to grant the users using+git-cvsserver write access to the database file without granting+them write access to the directory, too.++You can configure the database backend with the following+configuration variables:++Configuring database backend+~~~~~~~~~~~~~~~~~~~~~~~~~~~~++git-cvsserver uses the Perl DBI module. Please also read+its documentation if changing these variables, especially+about `DBI->connect()`.++gitcvs.dbname::+ Database name. The exact meaning depends on the+ used database driver, for SQLite this is a filename.+ Supports variable substitution (see below). May+ not contain semicolons (`;`).+ Default: '%Ggitcvs.%m.sqlite'++gitcvs.dbdriver::+ Used DBI driver. You can specify any available driver+ for this here, but it might not work. cvsserver is tested+ with 'DBD::SQLite', reported to work with+ 'DBD::Pg', and reported *not* to work with 'DBD::mysql'.+ Please regard this as an experimental feature. May not+ contain double colons (`:`).+ Default: 'SQLite'++gitcvs.dbuser::+ Database user. Only useful if setting `dbdriver`, since+ SQLite has no concept of database users. Supports variable+ substitution (see below).++gitcvs.dbpass::+ Database password. Only useful if setting `dbdriver`, since+ SQLite has no concept of database passwords.++All variables can also be set per access method, see <<configaccessmethod,above>>.++Variable substitution+^^^^^^^^^^^^^^^^^^^^^+In `dbdriver` and `dbuser` you can use the following variables:++%G::+ git directory name+%g::+ git directory name, where all characters except for+ alpha-numeric ones, `.`, and `-` are replaced with+ `_` (this should make it easier to use the directory+ name in a filename if wanted)+%m::+ CVS module/git head name+%a::+ access method (one of "ext" or "pserver")+%u::+ Name of the user running git-cvsserver.+ If no name can be determined, the+ numeric uid is used.+ Eclipse CVS Client Notes ------------------------
From: Frank Lichtenheld <hidden> Date: 2016-06-15 22:43:04
Add a note about the branches -> modules mapping to LIMITATIONS because
I really think it should be noted there and not just at the end of
the installation step-by-step HOWTO.
I used "git branches" there and changed "heads" to "branches" in
my section about database configuration. I'm reluctant to replace
all occourences of "head" with "branch" though because you always
have to say "git branch" because CVS also has the concept of
branches. You can say "head" though, because there is no such
concept in CVS. In all the existing occourences of head other than
the one I changed I think "head" flows better in the text.
Signed-off-by: Frank Lichtenheld <redacted>
---
Documentation/git-cvsserver.txt | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
Caused by me thinking about Junio's comment.
Better patches welcome but my motivation to try to write clear
and concise sentences in English is depleted for now,
so no critical comments without patches, plz :)
@@ -31,6 +31,10 @@ over pserver for anonymous CVS access. CVS clients cannot tag, branch or perform GIT merges.+git-cvsserver maps GIT branches to CVS modules. This is very different+from what most CVS users would expect since in CVS modules usually represent+one or more directories.+ INSTALLATION ------------
@@ -110,7 +114,7 @@ Example: Database Backend -----------------git-cvsserver uses one database per git head (i.e. CVS module) to+git-cvsserver uses one database per git branch (i.e. CVS module) to store information about the repository for faster access. The database doesn't contain any persitent data and can be completly regenerated from the git repository at any time. The database
From: Frank Lichtenheld <hidden> Date: 2016-06-15 22:43:04
Adds documentation for gitcvs.{dbname,dbdriver,dbuser,dbpass}
Texts are mostly taken from git-cvsserver.txt whith some
adaptions so that they make more sense out of the context
of the original man page.
Signed-off-by: Frank Lichtenheld <redacted>
---
Documentation/config.txt | 27 +++++++++++++++++++++++++++
1 files changed, 27 insertions(+), 0 deletions(-)
Note that this one is made on top of the cvsserver topic
branch and my fixes to config.txt (i.e. the description
for gitcvs.allbinary is in the context of the patch).
Just saying.
@@ -425,6 +425,33 @@ gitcvs.allbinary:: fact that there is no way yet to set single files to mode '-kb'. See gitlink:git-cvsserver[1].+gitcvs.dbname::+ Database used by git-cvsserver to cache revision information+ derived from the git repository. The exact meaning depends on the+ used database driver, for SQLite (which is the default driver) this+ is a filename. Supports variable substitution (see+ gitlink:git-cvsserver[1] for details). May not contain semicolons (`;`).+ Default: '%Ggitcvs.%m.sqlite'++gitcvs.dbdriver::+ Used Perl DBI driver. You can specify any available driver + for this here, but it might not work. git-cvsserver is tested+ with 'DBD::SQLite', reported to work with 'DBD::Pg', and+ reported *not* to work with 'DBD::mysql'. Experimental feature.+ May not contain double colons (`:`). Default: 'SQLite'.+ See gitlink:git-cvsserver[1].++gitcvs.dbuser, gitcvs.dbpass::+ Database user and password. Only useful if setting 'gitcvs.dbdriver',+ since SQLite has no concept of database users and/or passwords.+ 'gitcvs.dbuser' supports variable substitution (see+ gitlink:git-cvsserver[1] for details).++All gitcvs variables except for 'gitcvs.allbinary' can also specifed+as 'gitcvs.<access_method>.<varname>' (where 'access_method' is one+of "ext" and "pserver") to make them apply only for the given access+method.+ http.sslVerify:: Whether to verify the SSL certificate when fetching or pushing over HTTPS. Can be overridden by the 'GIT_SSL_NO_VERIFY' environment