Implement CVS fetcher (#23212)

Spack packages can now fetch versions from CVS repositories. Note
this fetch mechanism is unsafe unless using :extssh:. Most public
CVS repositories use an insecure protocol implemented as part of CVS.
This commit is contained in:
Erik Schnetter
2021-06-22 12:51:31 -04:00
committed by GitHub
parent 512edfcceb
commit e3b220f699
6 changed files with 449 additions and 12 deletions

View File

@@ -920,12 +920,13 @@ For some packages, source code is provided in a Version Control System
(VCS) repository rather than in a tarball. Spack can fetch packages
from VCS repositories. Currently, Spack supports fetching with `Git
<git-fetch_>`_, `Mercurial (hg) <hg-fetch_>`_, `Subversion (svn)
<svn-fetch_>`_, and `Go <go-fetch_>`_. In all cases, the destination
<svn-fetch_>`_, `CVS (cvs) <cvs-fetch_>`_, and `Go <go-fetch_>`_.
In all cases, the destination
is the standard stage source path.
To fetch a package from a source repository, Spack needs to know which
VCS to use and where to download from. Much like with ``url``, package
authors can specify a class-level ``git``, ``hg``, ``svn``, or ``go``
authors can specify a class-level ``git``, ``hg``, ``svn``, ``cvs``, or ``go``
attribute containing the correct download location.
Many packages developed with Git have both a Git repository as well as
@@ -1173,6 +1174,55 @@ you can check out a branch or tag by changing the URL. If you want to
package multiple branches, simply add a ``svn`` argument to each
version directive.
.. _cvs-fetch:
^^^
CVS
^^^
CVS (Concurrent Versions System) is an old centralized version control
system. It is a predecessor of Subversion.
To fetch with CVS, use the ``cvs``, branch, and ``date`` parameters.
The destination directory will be the standard stage source path.
Fetching the head
Simply add a ``cvs`` parameter to the package:
.. code-block:: python
class Example(Package):
cvs = ":pserver:outreach.scidac.gov/cvsroot%module=modulename"
version('1.1.2.4')
CVS repository locations are described using an older syntax that
is different from today's ubiquitous URL syntax. ``:pserver:``
denotes the transport method. CVS servers can host multiple
repositories (called "modules") at the same location, and one needs
to specify both the server location and the module name to access.
Spack combines both into one string using the ``%module=modulename``
suffix shown above.
This download method is untrusted.
Fetching a date
Versions in CVS are commonly specified by date. To fetch a
particular branch or date, add a ``branch`` and/or ``date`` argument
to the version directive:
.. code-block:: python
version('2021.4.22', branch='branchname', date='2021-04-22')
Unfortunately, CVS does not identify repository-wide commits via a
revision or hash like Subversion, Git, or Mercurial do. This makes
it impossible to specify an exact commit to check out.
CVS has more features, but since CVS is rarely used these days, Spack
does not support all of them.
.. _go-fetch:
^^