svn - but smaller?

Stephen Montgomery-Smith stephen at
Mon Jan 28 04:10:58 UTC 2013

On 01/27/2013 09:24 PM, Isaac (.ike) Levy wrote:
> Hi Peter,
> On Jan 24, 2013, at 6:13 AM, Peter Jeremy wrote:
>> On 2013-Jan-23 15:40:50 +0100, Oliver Brandmueller <ob at e-Gitt.NET> wrote:
>>> in ancient times there was cvsup. cvsup was a PITA if you wanted (or 
>>> needed) to install it via ports, the only reasonable way was to use 
>>> pkg_add for that if you didn't want to pollute your system with 
>>> otherwise unneeded software.
>> There was also ctm(1).  ctm is small, BSD-licensed and has been part
>> of FreeBSD forever (almost).  Thanks to stephen@, ctm deltas for
>> various src trees, as well as the entire SVN repo are still available.
>> c[v]sup can do things than aren't possible with ctm but I would expect
>> that most people who currently use c[v]sup could readily migrate to
>> using ctm.
>> See for details.
>> Note that mirroring the actual SVN repo via ctm requires some patches.
>> There is a README and patches in
>> -- 
>> Peter Jeremy
> Thank you for adding the ctm bits in the page, I'm deeply intrigued by possibly solving this problem with bits *already* in base?!!
> However, even after reading the handbook page, I just don't quite understand how to use it on a modern system.  (The handbook page isn't too helpful, nor is the man page- perhaps I'm looking at it backwards)  Could you help clarify:
> - does CTM go away with the CVS servers?
> - do CTM-compatable patch/delta files exist on project repos?
> - what is the cleanest path to using CTM? (e.g. is the patch you mention required)
> --
> Say I have a bare 9.1 install, no ports, haven't downloaded any base/src or ports yet.
> How do I go about using ctm(1) to fetch REL or STABLE to /usr/src, command by command?

First, you don't need any patches to get started.

Suppose you want to keep up with 9.x-stable.  Then you look at the ftp
site, look at the latest
xEmpty file, and fetch it.  Then create an empty directory /usr/src, and
then do
cd /usr/src && ctm the-xEmpty-file-you-downloaded.
No need to decompress the file first.
Then fetch from the same web site all the files whose number is greater
than the xEmpty file you downloaded and do
cd /usr/src && ctm the-rest-of-the-files*

Now in /usr/src, you will have a reasonably up to date version of

You can keep it up to date by getting more files, either from the ftp
site, or by email, and doing again
cd /usr/src && ctm the-rest-of-the-files*
It will automatically ignore the files already applied.

Similar instructions for all the other stable/currents and ports.  Main
thing to remember - start with an empty directory.

Also making local changes is not permitted.  If ctm tries to modify a
file whose md5 checksum has changed, it will quit with an error message.
 (But it won't leave your system in an unusable state - if you put that
file back to its original state, then ctm will work again.)

Now, if you want something not offered by ctm (e.g. 8.2-release), then
you need to use svn.  You can get svn via ctm.  But you (1) need to
apply the patch, (2) install the svn port, and (3) install the xz port
if your FreeBSD is really old.

More information about the freebsd-stable mailing list