CVSup Advanced Points
Prev |  |

# 4 Examples of more advanced source management

## 4.1 How to safely change tags when updating `src-all`

If you specify eg `tag=A` in your `supfile`, `cvsup` will create a checkouts file called `checkouts.cvs:A`: for instance, if `tag=RELENG_4`, a checkouts file called `checkouts.cvs:RELENG_4` is generated. This file will be used to retrieve and/or store information identifying your 4-STABLE sources.

When tracking `src-all`, if you wish to pass from `tag=A` to `tag=B` (A less/greater than B not making any difference) and if your checkouts file is `checkouts.cvs:A`, the following actions should be performed:

1. `#` `mv checkouts.cvs:A checkouts.cvs:B` (This provides the subsequent step with the appropriate checkouts file)

2. write a `supfile` whose collection line reads:

       src-all tag=B

3. cvsup your sources using the new `supfile`.

The `cvsup` utility will look for `checkouts.cvs:B`--in that the target is B; that is, `cvsup` will make use of the information contained therein to correctly manage your sources.

The benefits:

- the sources are dealt with correctly (in particular, no stale files)

- less load is placed on the server, in that `cvsup` operates in the most efficient way.

For example, `A=RELENG_4`, `B=.`. The period in `B=.` means -CURRENT. This is a rather typical update, from 4-STABLE to -CURRENT. While it is straightforward to “downgrade” your sources (e.g., from -CURRENT to -STABLE), downgrading a system is quite another matter. You are STRONGLY advised not to attempt such an operation, unless you know exactly what you are doing.

## 4.2 Updating to the same tag as of a different date

If you wish to switch from `tag=A` to `tag=A` as of a different GMT date (say, `date=D`), you will execute the following:

1. write a `supfile` whose collection line reads:

       src-all tag=A date=D

2. update your sources using the new `supfile`

Whether the new date precedes that of the last sync operation with `tag=A` or not, it is immaterial. For example, in order to specify the date “August 27, 2000, 10:00:00 GMT” you write the line:

    src-all tag=RELENG_4 date=2000.08.27.10.00.00

> Note: The format of a date is rigid. You have to specify all the components of the date: century (“20”, i.e., the 21st century, must be supplied whereas “19”, the past century, can be omitted), year, month, day, hour, minutes, seconds--as shown in the above example. For more information, please see cvsup(1).

Whether or not a date is specified, the checkouts file is called `checkouts.cvs:A` (e.g., `checkouts.cvs:RELENG_4`). As a result, no particular action is needed in order to revert to the previous state: you have to modify the date in the `supfile`, and run `csvup` again.

## 4.3 Updating your ports collection for the first time

If you want to “sync” your ports tree for the first time you should use a tag that matches your FreeBSD installation. E.g., if you have installed the Ports Collection during the installation of FreeBSD 5.3-RELEASE the following should be used:

    ports-all tag=RELEASE_5_3_0

The `cvsup` program will create a ports checkout file, which is precisely the goal of the first special sync operation. Now we can use the “.” tag to update the tree whenever we feel it should be updated:

    ports-all tag=.

All subsequent updates will be carried out smoothly.

If you have been reading the apparently nit-picking remarks in these sections, you will probably have recognized the potential for trouble in a source updating process. A number of people have actually run into problems. You have been warned. :-)

Prev | Home |
A useful python script: `cvsupchk` |  |

This, and other documents, can be downloaded from ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

For questions about FreeBSD, read the documentation before contacting <questions@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.