freebsd-dev/usr.sbin/ctm
Stefan Eßer 1894626876 Prepare move of ctm from base to a port (misc/ctm) by:
- Adding a note to UPDATING
- Adding a note to the history section of the manpage ctm.1
- Adding a message printed to STDERR to the ctm program

This version is meant for release in FreeBSD-12.0 and should remain in
FreeBSD-12 over its life-time.

A follow-up commit will remove ctm from -CURRENT after the MFC to 12
has happened.

Approved by:	imp, rgrimes, bcr (man-page)
MFC after:	3 days
Relnotes:	yes
Differential Revision:	https://reviews.freebsd.org/D17969
2018-11-14 08:45:48 +00:00
..
ctm Prepare move of ctm from base to a port (misc/ctm) by: 2018-11-14 08:45:48 +00:00
ctm_dequeue various: general adoption of SPDX licensing ID tags. 2017-11-27 15:37:16 +00:00
ctm_rmail DIRDEPS_BUILD: Update dependencies. 2017-10-31 00:07:04 +00:00
ctm_smail DIRDEPS_BUILD: Update dependencies. 2017-10-31 00:07:04 +00:00
mkCTM Convert usr.sbin to LIBADD 2014-11-25 16:57:27 +00:00
Makefile
Makefile.inc usr.sbin: normalize paths using SRCTOP-relative paths or :H when possible 2017-03-04 11:38:03 +00:00
README add links to the saga of CTM 2018-10-24 19:21:04 +00:00

# ----------------------------------------------------------------------------
# "THE BEER-WARE LICENSE" (Revision 42):
# <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you
# can do whatever you want with this stuff. If we meet some day, and you think
# this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
# ----------------------------------------------------------------------------
#
# $FreeBSD$
#

What will I not find in this file ?
-----------------------------------
Instructions on how to obtain FreeBSD via CTM.
Contact <CTM@FreeBSD.org> for that.

What is CTM ?
-------------
CTM was originally "CVS Through eMail", but has since changed scope to be
much more general.
CTM is now meant to be the definitive way to make and apply a delta between
two versions of a directory tree.
There are two parts to this, making the delta and applying it.  These are two
entirely different things.  CTM concentrates the computation-burden on the
generation of the deltas, as a delta very often is applied more times than
it is made.  Second CTM tries to make the minimal size delta.

Why not use diff/patch ?
------------------------
Good question.  Primarily because diff and patch doesn't do their job very 
well.  They don't deal with binary files (in this case files with '\0' or 
'\0377' characters in them or files that doesn't end in '\n') which isn't
a big surprise:  they were made to deal with text-files only.  As a second
gripe, with patch you send the entire file to delete it.  Not particular
efficient.

So what does CTM do exactly ?
-----------------------------
CTM will produce a file, (a delta) containing the instructions and data needed
to take another copy of the tree from the old to the new status.  CTM means to
do this in the exact sense, and therefore the delta contains MD5 checksums to
verify that the tree it is applied to is indeed in the state CTM expects.

This means that if you have modified the tree locally, CTM might not be able
to upgrade your copy.

How do I make a CTM-delta ?
---------------------------

Read the source, and be prepared to have 2 copies of the tree; One is
the reference ("From") tree, and the other is the delta ("To") tree.
The mkCTM script will create the CTM diff of the differences between
the reference tree and the delta tree. A lot of scratch space is
required, and your machine will work hard.

How do I apply a CTM-delta ?
----------------------------
You pass it to the 'ctm' command.  You can pass a CTM-delta on stdin, or
you can give the filename as an argument.  If you do the latter, you make
life a lot easier for your self, since the program can accept gzip'ed files
and since it will not have to make a temporary copy of your file.  You can
specify multiple deltas at one time, they will be processed one at a time.

The ctm command runs in a number of passes.  It will process the entire
input file in each pass, before commencing with the next pass.

Pass 1 will validate that the input file is OK.  The syntax, the data and 
the global MD5 checksum will be checked.  If any of these fail, ctm will
never be able to do anything with the file, so it will simply reject it.

Pass 2 will validate that the directory tree is in the state expected by
the CTM-delta.  This is done by looking for files and directories which
should/should not exists and by checking the MD5 checksums of files.  

Pass 3 will actually apply the delta.

Should I delete the delta when I have applied it ?
--------------------------------------------------
No.  You might want to selectively reconstruct a file latter on.

Why is CTM not being maintained?
--------------------------------
Because CVSUP has improved on the concept quite a bit, and is now
the method of choice.

Is there a pointer to this whole glorious saga?
-----------------------------------------------
You bet! http://phk.freebsd.dk/sagas/ctm.html

Poul-Henning