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` |  |