portshaker
—
Maintain a set of ports trees.
portshaker |
[-qstv ] [-U |
-u source]
[-M | -m
target] [-I |
-i target] |
The portshaker
utility maintains a set of
target ports trees containing ports provided by
source ports trees.
A single target ports tree can contain ports
from any number of source ports trees. If a port is
provided by more than one source ports tree,
portshaker
will merge the latest version of this
port in the target ports tree.
As portshaker
can maintain any number of
target ports tree, it is particularly handy if you
want to use customized ports trees with tinderbox / poudriere.
The options are as follows:
-I
- Update all target ports trees INDEX files.
-M
- Merge all target ports trees.
-U
- Update all source ports trees.
-i
target
- Update the specified target ports tree INDEX
files.
-m
target
- Merge the specified target ports tree.
-q
- Decrease verbosity level.
-s
- Display the list of configured source ports trees
and exit.
-t
- Display the list of configured target ports trees
and exit.
-u
source
- Update the specified source ports tree.
-v
- Increase verbosity level.
When merging a target ports tree,
portshaker
will try to detect inconsistencies and
report conflicts.
Such conflicts can occur in two situations:
- Two source ports tree claim to provide the same
version of a single port (they both have the same
PORTEPOCH, PORTVERSION and
PORTREVISION) but they do not provide the same
files.
In such a situation,
portshaker(8)
will switch to interactive mode and ask you what to do.
In order to effectively fix the problem after the merge, you
will have to either:
- Remove the conflicting version of the port from its
source ports tree.
- Bump the PORTREVISION of the port from the
desired source ports tree.
- A port to be merged has a version number going backward.
portshaker
will not merge the port and will emit a
warning.
portshaker
will update specified
source ports tree and then merge specified
target ports trees regardless of the order of the
-U
, -u
,
-M
and -m
options order.
When executed without any argument, portshaker
will
update all source ports trees and then merge all
target ports tree, behaving like when
-UM
options are provided.
The following environment variables affect the execution of
portshaker
:
- portshaker_config_dir
- If set, overrides the default configuration location
/usr/local/etc. This is mostly useful for running
portshaker in a continuous integration environment.
- portshaker_info
- If set to “YES”
portshaker
will
output extra information. This is equivalent to using the
-v
flag.
- portshaker_debug
- If set to “YES”
portshaker
will
output extra debugging information. This is equivalent to using the
-v
flag twice.
- /usr/local/etc/portshaker.conf
- Default location of the configuration file containing descriptive
information about
portshaker
target ports trees.
- /usr/local/etc/portshaker.d/*
- Default location of
portshaker
source ports tree update scripts.
portshaker
was originally designed to tinderbuild the
development version of both mono-2.0 and gnome-2.24 together. Each project
used its own merge script
⟨mono-merge.sh(8)
and
marcusmerge(8)⟩
but using both at the same time led to conflicts.
portshaker
has so been developed as a
general purpose solution to contributed ports tree maintenance.
Romain Tartière
⟨romain@blogreen.org⟩