This script uses the existing ports infrastructure to track dependencies,
and to keep those dependencies up to date. Because it is written in /bin/sh,
it needs no other languages installed.
Portmaster has the following features:
* User can specify the port to upgrade (or install) either by directory
in /usr/ports, or by directory in /var/db/pkg
* Updates and repairs (as needed) entries for dependencies in both +CONTENTS
and +REQUIRED_BY files for both the port that is being updated, and any
ports that depend on it
* Runs make config recursively through all ports before starting build
* Recursively checks and upgrades (or installs) all dependencies
* User can force upgrades of all dependent ports
* Runs make clean before starting the build (can be disabled)
* Offers the user the opportunity to delete stale distfiles
* Supports /usr/ports/MOVED
* Supports non-default settings of PORTSDIR and PKG_DBDIR
* Interactive update mode (prompts for each update)
* Option to rebuild port, and ports that depend on it
* Options to make packages out of installed, and new ports
* Option to clean out stale port dependencies
* Downloads distfiles in the background
WWW: http://dougbarton.us/portmaster.html
New Features
============
1. Add -t mode to "thoroughly" recurse dependencies, using the
all-depends-list target instead of the combination of the
build-depends-list and run-depends-list targets. This is useful
when the dependencies of a dependency need to be updated, but
the dependency itself doesn't; and -a mode is impractical for
whatever reason.
2. If pkg_create fails, give the user the option of how to handle
it: fail, or ignore the error.
Improvements
============
1. If we are trying to delete distfiles, but a dist subdir has
gone missing, assume that the files are safely deleted (and
(Only the first 15 lines of the commit message are shown above )
New Features
============
1. Attempt to avoid the problem of multiple background checksum
processes stepping on each other trying to download the same sets of
distfiles. The most pathological case for this is trying to portmaster
the xorg port on a clean box with no distfiles downloaded. (Brought to
my attention by George Hartzell <hartzell@alerce.com>.)
2. In cooperation with sem and skv, add three new environment
variables that can potentially be used by port authors, etc.
UPGRADE_TOOL contains the name of the tool being used, in this case
'portmaster'. UPGRADE_PORT is the full string for the port that we are
currently upgrading, and UPGRADE_PORT_VER is just the version string
part of that.
(Only the first 15 lines of the commit message are shown above )
New Features:
=============
1. You can now specify multiple ports to upgrade on the command line,
such as 'portmaster foo-1.23 bar-4.56 baz-7.98'. [1] Pass -n argument
to child processes (as needed) to handle this case.
2. Handle an alternate port that can satisfy a build requirement by
reading the CONFLICTS for the "standard" port, and seeing if we have
one of those installed. [1]
3. Unless the user specifies the new -B option, always build a backup
package when updating an existing port. Unless the user has specified
the -b option, delete the package on successful installation of the
new port, or print a helpful message telling the user where they can
find the package if install fails.
4. Don't only test a port for IGNORE, also test FORBIDDEN and BROKEN
to avoid doing a lot of work on dependencies for a port that we aren't
(Only the first 15 lines of the commit message are shown above )
New Feature
===========
If a port is marked IGNORE, don't do all the dependency/checksum work,
instead bomb out with a helpful message
Minor Fixes
===========
1. Add some whitespace to make the "dependency check complete" message
stand out better
2. Tell the user when we start pkg_delete in -s mode, just like in -e
Bug Fixes
=========
1. Export MAKE_ARGS so that the child checksum processes can see them
2. Move the "just in case" cd back to $portdir up one line so it's
before 'make clean', just in case
New Features
============
1. -e mode to expunge a port via pkg_delete, and optionally
remove its distfiles
2. -s and -e modes now respect -b (backup) and -d|D options
regarding always deleting (or not deleting) distfiles
General
=======
1. Re-factor more code out into functions, and move them earlier in the
script so that they are available to the new features.
2. Clean up the code in a few places to make it slightly more efficient,
and a lot more readable.
Bug Fixes
(Only the first 15 lines of the commit message are shown above )
New Features
============
1. -L mode to list all installed ports, and search for updates.
2. Trap SIGINT, and use the opportunity to reap all the child processes
we can find.
3. Warn the user during config mode if a port sets IS_INTERACTIVE
4. Support +IGNOREME files in /var/db/pkg/<portname>, ala portupgrade
5. Store the results of the user's choices for -i during config, so they
don't have to enter it again during build
6. When deleting stale distfiles, recurse through successively shorter
versions of file-name-* till we find something to delete, or run out
of dashes. This means a lot fewer false positives, although the
algorithm is still aggressive.
Performance Optimizations
(Only the first 15 lines of the commit message are shown above )
New features:
=============
1. Add -b option to make a backup package of the installed port
2. Add -g option to make a package of the new port
3. Add -o option to replace an installed port with a new port from a
different location (e.g., portmaster -o emulators/linux_base-fc4 linux_base)
The second argument can also be specified as the name of the installed port
(e.g., linux_base-8-8.0_15)
4. Add -s option to detect no-longer-needed dependencies, and offer the user
a choice to delete them.
General improvements:
=====================
1. Update usage() to reflect reality, and organize it better
2. Switch to using DEPORIGIN to detect missing dependency tracking, which
(Only the first 15 lines of the commit message are shown above )
Vastly improve handling of moved ports:
1. Update DEPORIGIN in addition to @pkgdep entries in +CONTENTS
2. Give more details about why a port moved
3. grep for the old port name in existing +CONTENTS files, since the
new name will not appear at all
Also, stretch the window to wait for a background 'make checksum' to
complete to 5 seconds instead of 3
Vastly improve handling of moved ports:
1. Update DEPORIGIN in addition to @pkgdep entries in +CONTENTS
2. Give more details about why a port moved
3. grep for the old port name in existing +CONTENTS files, since the
new name will not appear at all
Also, stretch the window to wait for a background 'make checksum' to
complete to 5 seconds instead of 3
1. Implemented recursive 'make config' at the beginning of the run, so it's
easier to leave it running unattended for large updates. (This can be
toggled off.)
2. Implemented a completely unattended mode which accepts the defaults for
all portmaster dialogues. (Note, this does not help with ports that have
interaction other than 'make config', such as ghostscript, etc.)
3. Added -u to sort(1) calls to try and address a bug report about duplicate
lines in +REQUIRED_BY files. I was not able to reproduce this bug, but
better safe than sorry.
4. Verbose mode is now slightly more informative about what's happening.
5. More common code factored out into functions.
6. The -n flag now cancels the build of the port called on the command line too.
7. Improved (?) the stale distfile deletion routine to better handle ports
that have multiple distfiles.
8. We now launch 'make checksum' (which performs a fetch if needed) in the
background while recursing through dependencies.
9. Various code cleanups, such as adding -t to a mktemp invocation that was
missing it, more local variables in functions, more consistent flag variable
values, etc.