Skip to content

Commit 6a3d05d

Browse files
committed
Merge branch 'mo/cvs-server-updates'
Various git-cvsserver updates. * mo/cvs-server-updates: t9402: Use TABs for indentation t9402: Rename check.cvsCount and check.list t9402: Simplify git ls-tree t9402: Add missing &&; Code style t9402: No space after IO-redirection t9402: Dont use test_must_fail cvs t9402: improve check_end_tree() and check_end_full_tree() t9402: sed -i is not portable cvsserver Documentation: new cvs ... -r support cvsserver: add t9402 to test branch and tag refs cvsserver: support -r and sticky tags for most operations cvsserver: Add version awareness to argsfromdir cvsserver: generalize getmeta() to recognize commit refs cvsserver: implement req_Sticky and related utilities cvsserver: add misc commit lookup, file meta data, and file listing functions cvsserver: define a tag name character escape mechanism cvsserver: cleanup extra slashes in filename arguments cvsserver: factor out git-log parsing logic
2 parents f55cb04 + 828eff7 commit 6a3d05d

File tree

3 files changed

+2209
-328
lines changed

3 files changed

+2209
-328
lines changed

Documentation/git-cvsserver.txt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,43 @@ Operations supported
359359

360360
All the operations required for normal use are supported, including
361361
checkout, diff, status, update, log, add, remove, commit.
362+
363+
Most CVS command arguments that read CVS tags or revision numbers
364+
(typically -r) work, and also support any git refspec
365+
(tag, branch, commit ID, etc).
366+
However, CVS revision numbers for non-default branches are not well
367+
emulated, and cvs log does not show tags or branches at
368+
all. (Non-main-branch CVS revision numbers superficially resemble CVS
369+
revision numbers, but they actually encode a git commit ID directly,
370+
rather than represent the number of revisions since the branch point.)
371+
372+
Note that there are two ways to checkout a particular branch.
373+
As described elsewhere on this page, the "module" parameter
374+
of cvs checkout is interpreted as a branch name, and it becomes
375+
the main branch. It remains the main branch for a given sandbox
376+
even if you temporarily make another branch sticky with
377+
cvs update -r. Alternatively, the -r argument can indicate
378+
some other branch to actually checkout, even though the module
379+
is still the "main" branch. Tradeoffs (as currently
380+
implemented): Each new "module" creates a new database on disk with
381+
a history for the given module, and after the database is created,
382+
operations against that main branch are fast. Or alternatively,
383+
-r doesn't take any extra disk space, but may be significantly slower for
384+
many operations, like cvs update.
385+
386+
If you want to refer to a git refspec that has characters that are
387+
not allowed by CVS, you have two options. First, it may just work
388+
to supply the git refspec directly to the appropriate CVS -r argument;
389+
some CVS clients don't seem to do much sanity checking of the argument.
390+
Second, if that fails, you can use a special character escape mechanism
391+
that only uses characters that are valid in CVS tags. A sequence
392+
of 4 or 5 characters of the form (underscore (`"_"`), dash (`"-"`),
393+
one or two characters, and dash (`"-"`)) can encode various characters based
394+
on the one or two letters: `"s"` for slash (`"/"`), `"p"` for
395+
period (`"."`), `"u"` for underscore (`"_"`), or two hexadecimal digits
396+
for any byte value at all (typically an ASCII number, or perhaps a part
397+
of a UTF-8 encoded character).
398+
362399
Legacy monitoring operations are not supported (edit, watch and related).
363400
Exports and tagging (tags and branches) are not supported at this stage.
364401

0 commit comments

Comments
 (0)