CVE and update status of the FreeBSD ports tree3,296 unaddressed CVEs in 671 portsAll times are CET
Port details

ports-mgmt/portmaster 3.35

Manage your ports without external databases or languages

Port info

Maintainer
se@FreeBSD.org
Packages
latest: 3.35
Upstream
up to date
Last update
to 3.35 · 8dbda5d791
Quarterly
2026Q4: 3.35
Formerly
sysutils/portmaster until 2007-02-05
WWW
https://portmaster.github.io/
Links
cgit · VuXML · Report wrong data

Install

Package
# pkg install portmaster
installs 3.35 from latest; from quarterly (2026Q4) 3.35
Port
# cd /usr/ports/ports-mgmt/portmaster && make install clean
# make -C /usr/ports/ports-mgmt/portmaster config  # change options first
Size
43 KiB download · 135 KiB installed
Depends on
nothing
License
BSD2CLAUSE
Options
2 of 2 on in the package: BASH ZSH

Packages by version and architecture

latest

FreeBSD versionamd64aarch64i386
FreeBSD 163.353.35–
FreeBSD 153.353.35–
FreeBSD 143.353.353.35

quarterly (2026Q4)

FreeBSD versionamd64aarch64i386
FreeBSD 153.353.35–
FreeBSD 143.353.353.35

version as in the ports tree (latest) or the most common one (quarterly) · different version · ✗ not built · – no packages for this platform. Package sets that have not been rebuilt for 60 days are left out.

Unaddressed and VuXML only (0)

No unaddressed CVE and nothing reported by pkg audit for the packaged version 3.35.

Fixed (0)

No VuXML entries for this package.

Problem reports (7) · open in Bugzilla, most recently changed first

PRSummaryStatusChanged
295355maintainer-feedback? ports-mgmt/portmaster terminates too early if installing multiple new ports on 15-STABLENew2026-05-17
281732maintainer-feedback? ports-mgmt/portmaster: fails to build ports with gmake error: : invalid option -- DNew2026-03-23
290829maintainer-feedback? ports-mgmt/portmaster: removes directories preventing pkg 2.4 fails to create its own packageIn Progress2026-03-01
269076maintainer-feedback? ports-mgmt/portmaster --delete-build-only leaves build only dependenciesNew2023-01-27
245840needs-qa maintainer-feedback? merge-quarterly? ports-mgmt/portmaster: -R is too agressive in removing PM_UPGRADE_DONE_FLAGIn Progress2021-04-20
Show all 7
PRSummaryStatusChanged
227276maintainer-feedback? ports-mgmt/portmaster --clean-packages ignore FLAVORNew2018-04-13
195304ports-mgmt/portmaster fails to auto delete deleted portsOpen2017-12-18

Commits (311)

Doug Barton (dougb) · 3.10
Remove no-longer relevant comment
d2d4481f06
Doug Barton (dougb) · 3.10
New Features ============ 1. Add the ability to retry package creation. This is mostly useful for    PM_SU_CMD after a build that took so long that your sudo ticket has    expired.

2. Add support for multiple -r options on the same command line. [1]

Various Internal Cleanups and Improvements
==========================================
1. s/printf/echo -e/ for consistency, and use it to full advantage

2. In the code that derives the proper value of PACKAGESITE remove 6.x
   and add 9.x. Also add a 10-current entry.

3. Add a more-or-less painless test to deal with the issue of the current
   working directory no longer existing. This problem usually manifests as
   a "The value of DISTDIR cannot be empty" error because 'make -f' does
   not handle this condition gracefully.

4. In find_and_delete_distfiles() (run after a successful install) change
   the default pattern to be foo-[0-9]* instead of foo* [2]

   When the new pattern doesn't match any existing distfiles, fall back to
   the old one.

5. Also in find_and_delete_distfiles(), cache matches to $DI_FILES so that
   we don't have to re-test that same file again.

6. Change the method used to print the prompt in get_answer_g() to echo -e
   so that I can be more flexible in formatting prompt messages.

7. For --clean-packages if a package is up to date but not installed
   it should still be deleted if -y is in use.

8. Avoid duplicate word in a composite sentence [3]

9. If a user has non-standard FETCH_ARGS it could circumvent the intent
   of --always-fetch, so forcibly unlink the file before proceeding to
   the fetch routine.

Sponsored by:	Henk van Oers [1]

Suggested by:	Lapo Luchini <lapo@lapo.it> [2]

Submitted by:	Dan Allen <danallen46@airwired.net> [3]
0cc6561198
Doug Barton (dougb) · 3.9.1
Update to 3.9.1, a minor bugfix version:

In shuffling around the updating of +REQUIRED_BY I forgot to delete
empty grep_deps files. [1]

While I'm looking at unlink'ing files, bring some sanity to the various
places that it's done which haven't been reviewed in a while:
* Fix the pm_unlink* functions to use the builtin test
* Only/always call the function when we're not sure if the file exists
* Just use /bin/unlink when we're sure it does
* In parent_exit the glob pattern in the for loop will return 'pattern-*'
  if there are no matches, so test for that specifically rather than
  returning to the conditional version.

The mere presence of IS_INTERACTIVE in the Makefile is not enough, the
condition needs to be verified in case it is conditional [2]

We want to make sure that $TMPDIR exists before trying to use it. The
cheapest way to do this is to just call mkdir -p. Move the umask call
before this to be safe.

Split the test for the existence of /usr/X11R6 and whether or not it's
a link for one more micro-optimization.

Submitted by:	olgeni [1]

PR:		ports/157481 [2]
Submitted by:	Carl <k0802647@telus.net> [2]
262ff9f4a6
Doug Barton (dougb) · 3.9
New Features: =============

* The -F option now works with --packages and --packages-only
  o If -F --packages-only and there is no package to fetch,
    give the user a menu of options
  o If -F and --packages lack of a package is a soft fail

* Revamp the code in check_fetch_only() and where we wait for b/g
  distfile fetching to complete to be a lot smarter:
  o In check_fetch_only() simplify the code to count fetch processes which
    both makes it faster by avoiding ps, and also makes it smarter because
    it will find fewer false positives.
  o In both, poll every 2 seconds, but only output to the console every 6.
    This way we'll be able to exit a lot sooner, but still avoid spamming
    the user with lots of messages.

* In the event that an invalid combination of configuration options causes
  a port to be BROKEN, etc. allow the user to run --force-config and try
  again

* Add the ability to specify the -t option to -L and --index-only to
  check every installed port instead of using the shortcut. This is
  slow, but useful on an old system where there is no ports tree and
  one or more of the ports is so old that it no longer exists in INDEX.

Bug Fixes:
==========

Fix an unfortunately long-standing bug in the --package code, we need to
update the +REQUIRED_BY files for ports that the installed port depends on.
When I tested pkg_add originally I confirmed that it did this, but I
neglected to re-test when adding the --no-deps option, which suppresses
this behavior. Mea culpa.

So take this opportunity to fix the bug, and improve some other things in
the process:
* Add code to the section that updates dependencies for the newly installed
  package to walk the +CONTENTS file and runs the +REQUIRED_BY update for
  every port that the newly installed depends on.
* Various non-user-visible optimizations to the dependency udpating code

* When called from gen_dep_list, which also uses temp_list as a local
  variable, uniquify_list() needs its own set of local variables otherwise
  temp_list ends up being duplicated by uniquify_list

Minor Optimizations:
====================

* Micro-optimize a few more cases where we can avoid going out to disk
  to test stuff by separating the test for a variable first.

* Continue the campaign to unset things to keep the environment small

* Various other micro-optimizations
362cb389be
Doug Barton (dougb) · 3.8
Clean up zsh-related directories if the zsh completions are included

PR:		ports/156651
Submitted by:	ohauer
ea6f6d9c52
Doug Barton (dougb) · 3.8
Release version 3.8:

* Fix a long-standing bug with EUID detection. If the UID was > 4 digits
  the code would fail. Fix this by using a more efficient ps command.

  While I'm at it, use the same more efficient method for determining
  the process group id for the trap cleanup routine.

* Fix a buglet in the new --update-if-newer code, exit if all listed
  ports are actually up to date.
20fb60d4b0
Doug Barton (dougb) · 3.7
New Features: * Add --update-if-newer which will operate on a list of ports given   on the command line. If a port list is already up to date, it   will be skipped. * Tweak the way INDEX files are downloaded and installed to only   require root privileges for the minimum possible number of actions,   and do things in a more secure way:   1. If necessary to download the new INDEX.bz2, as a non-root

Many improvements to the --index-only/--packages-only code, particularly
in the absence of a ports tree.
* Make the --index* options more friendly to being duplicated in the rc
  file and command line. Mixing different options will still trigger an
  error, however having the same option both places will not.
* Don't do the work of handling the INDEX file if we won't need it
  (-l, --list-origins, -e, -s)
* Reorganize the final check of $pd (PORTSDIR) to properly handle the
  various combinations
* For multiple ports and -o, only test for the origin directory if
  we are not using the INDEX. If we are, check it there instead.
* Add some code to --check-depends to explicitly handle --index-only.
  It worked before by ignoring the origin test if there was no ports
  directory, but failed if --index-only was also used.
  This is better both because it doesn't fail with --index-only, but
  also because it now uses the index to validate $origin.
* Since --check-depends now works with --index-only, update usage()

Also:
* Add some whitespace to the "Installing new +CONTENTS" message
* In --clean-packages show the path in the delete prompt for stale
  packages that are not installed like we do for ones that are
* Various internal cleanups and micro-optimizations
e07527a808
Doug Barton (dougb) · 3.6.1
Remove FreeBSD 6.x specific comment
7f8d550961
Doug Barton (dougb) · 3.6.1
Update to version 3.6.1, a bugfix to the formatting for user input messages covered by the -[y|n] support added in the last version.

Feature safe:	yes
d41b9745fe
Doug Barton (dougb) · 3.6
Update to verion 3.6

New Features
============
1. The PT_NO_INSTALL_PACKAGE make variable will cause a port to always
   be compiled, instead of being installed from a package. It cannot
   be used in combination with the -PP/--packages-only option. [1]
2. All user input is now wrapped in a verification routine to make
   sure that yes means yes, etc.
3. The -e, -s, --clean-distfiles, --clean-packages, --check-depends
   and --check-port-dbdir features can now take -y and -n options to
   answer "yes" or "no" respectively to all user dialogs. This also
   allows me to deprecate the horribly hacky --clean-distfiles-all and
   --clean-packages-all in favor of -y.
4. If using a separate WRKDIRPREFIX, when the run is over use find to
   clean out the empty directories that are left behind by the ports
   infrastructure.
5. If PM_PACKAGES is set, don't bother with build depends [2]

Small Fixes And Improvements
============================
1. Update usage() in the script and the man page for the new features,
   and improve the consistency between the two.
2. When we enter -PRERELEASE phase the package-finding code should
   still be looking at -stable. [3]
3. Fix some bugs with -r:
	* In certain situations dependent ports that were otherwise
	  up to date would be missed.
	* For the purpose of not rebuilding the parent port when -R
	  is used we only care about the dependencies of the parent
	  port being up to date.
4. Error handling for INDEX fetch
5. The -e, -s, -l, -L, --list-origins, and --check-depends features
   all work fine without a ports tree
	* In -e and -s, delete_dist_list() requires the ports tree, so
	  if the user didn't use -D imply it when the ports tree is
	  missing, and hide delete_dist_list() behind that test
6. pdb and port_dbdir need default values for usage()

Inspired by:	Marco van Lienen <marco+freebsd-ports@lordsith.net> [1]
		Matthew Seaman <m.seaman@infracaninophile.co.uk> [1]

Reminded by:	ale [2]

Reported by:	Jakub Lach <jakub_lach@mailplus.pl> [3]
54f0add9db
Doug Barton (dougb) · 3.5
Fix a minor bug: When specifying 'portmaster port-1.23 dependency-of-port-2.34' the dependency would be built twice because the PM_NEEDS_UPDATE list is kept by ORIGIN. So use the same technique to validate the port in the build phase that we are using in the first pass.

Also, update the documentation on full version upgrades to encourage
users to back up any vital file in /usr/local before "making sure that
it is empty."
7b732650a2
Doug Barton (dougb) · 3.4
Bug Fixes ========= 1. Since $build_l is no longer being incremented prior to the user's +IGNOREME decision it's no longer necessary to decrement it if the user chooses not to update that port. 2. While I was reading the trace to find this bug I noticed that we are running update_build_l() (which in turn updates PM_NEEDS_UPDATE) prior to running check_state() (FORBIDDEN|DEPRECATED|BROKEN|IGNORE), 

Minor Fixes
===========
1. In read_distinfos_all() a missing DISTINFO_FILE doesn't need to be fatal
like it does in read_distinfos() since it could be caused by something
uninteresting like a MASTERDIR that exists in part of the tree that has
not been downloaded (e.g., a c[v]sup refuse file). Add some whitespace
around the message in case make also emits an error.
2. For --clean-distfiles* add a line after the "Checking" message to
make the spacing consistent
3. In usage() fill in $pd if it's empty (which it will be for -h|--help)
4. Give a more helpful error message for -o when the port to be replaced
isn't installed or listed as a dependency
9c1ff8a252
Doug Barton (dougb) · 3.3
Use PM_NEEDS_UPDATE to fix the problem introduced in 3.1 of ports being built in -a as dependencies, then built again because they were pre-scheduled for update.

Use the same method to handle the same problem in multiport(), which allows
me to remove one more list.
ebe84923ee
Doug Barton (dougb) · 3.2
Upgrade to version 3.2

Bug Fixes
=========
1. Properly handle +IGNOREME files again
2. In safe_exit() only print the restart hint if -n PM_NEEDS_UPDATE

Enhancements
============
1. For -F, a better message for spawned children, and continue the campaign
to do less irrelevant stuff.
2. Add some whitespace to the "All ports are up to date" message for -a
3. Make it clear in the docs that -e only handles single ports, and
   use the enhanced features of find_glob_dirs() to return better error
   messages if a glob doesn't match one and only one port. (Problem
   mentioned in PR.)

PR:		ports/151824
Submitted by:	Ben Grimm <freebsd-pr@bengrimm.net>
5646a0ef3d
Doug Barton (dougb) · 3.1
Update to version 3.1. In addition to the features listed below there are numerous internal reorganizations of various sections of code; and several informative messages have been updated to be more informative. :)

If you're interested in all the details you can review the svn logs at
http://svn.freebsd.org/viewvc/base/user/dougb/portmaster/

Catch Up With Ports Infrastructure
==================================
1. Switch to using DISTINFO_FILE instead of MD5_FILE
2. Use the SHA256 line from distinfo instead of MD5
3. The BEFOREPORTMK trick no longer works to list MASTER_SITES for all ports
so switch to the slightly slower but more reliable pm_make without it. This
will solve the problem of portmaster not fetching all distfiles in the
background.
4. In the case statement to select the appropriate release for package
fetching glob 9.0-CURRENT to handle snapshots as well.

Various Improvements
====================
1. If we fail, offer a suggestion for a shortcut to restart
2. In messages that refer to the INDEX file, use the variable to make it
clear what we're working with.
3. In dependency_check() be clear when we're using the INDEX
4. Dramatic (9-10 times) speedup in iport_from_origin() by making an
intelligent guess about what director{y|ies] to search in based on
the origin directory name which means we're almost always
looking in either exactly the right directory the first time, or
at worst (such as the py-* ports) a dramatically smaller subset.
5. If using --index-only and neither INDEXDIR nor PORTSDIR are set, set
INDEXDIR to $TMPDIR so that we can proceed. That makes PACKAGES the
only variable the user has to set to use --index-only and --packages-only
with no $PORTSDIR and no ports directory.

Bug Fixes
=========
1. For the determination of LOCALBASE:
	a. Don't try to use INDEX if PM_INDEX is not set
	b. Give a more meaningful error message
2. Be more careful to check that there is a line for the port in the INDEX
when working --index-only.
3. In the package fetch routine use a better string match to see if we have
already downloaded the directory listing. The previous one worked but would
match too many files for net* and x11*, especially when installing a lot of
ports. So add a '.' to differentiate these.
4. The --clean-packages and --clean-packages-all features were added just
a little too hastily, so overhaul them.
eef8da8289
Doug Barton (dougb) · 3.0
Update to version 3.0

New Features
============
1. Add an option to log actions after the run is complete. To enable
   it define PM_LOG in your rc file as the path of the file you want
   to log to. If using PM_SU_CMD make sure that the directory or file
   is writable by the unprivileged user.

2. Add the --clean-packages[-all] feature

   This works similarly to --clean-distfiles[-all] in that it searches
   the $PACKAGES directory for out of date packages, and either offers
   to delete them, or with -all deletes them without prompting. It
   also cleans out stale symlinks and empty directories.

   This necessitates moving init_packages_var() and parse_index() so
   they can be used by the new feature.

   The idea for grabbing the ORIGIN from the package's +CONTENTS file
   and checking to see if it is up to date came from:
   Alexey Markov <a.markov@complitex.ru>

3. Add an option to --clean-distfiles[-all] to allow a distfile to be
   valid if it matches ANY port in the tree, not just those installed.
   This requires building a distinfo list from all ports, so duplicate
   the relevant bits of read_distinfos() into read_distinfos_all(). The
   common elements are split into during the loop and after the loop, so
   making 4 functions total doesn't seem worth it.

   Add logic to --clean-distfiles to handle the -t option and call the
   right read_distinfos* function accordingly.

4. Add the ability to ignore failed backup package creation by setting
   PM_IGNORE_FAILED_BACKUP_PACKAGE in the environment (rc file, etc.)

5. Add the ability to skip the rebuild of the -r port by adding -R

Cleanups and Tweaks
===================
1. Finalize the deprecations of /etc/portmaster.rc, -u and -p
2. If --local-packagedir and ${LOCAL_PACKAGEDIR}/All/${new_port}.tbz
   exists just use it, don't bother dereferencing $LATEST_LINK. This
   is faster, but it also solves the problem of (for example)
   packages/Latest/perl links to perl-5.10.x, even with 5.12.x
   installed and the 5.12.x package in packages/All
3. Change the behavior of the -G option.

   In the original version of portmaster the concept of 2 distinct
   passes through the dependency tree, the first to do all the
   'make config's and the second to build everything was intrinsic to
   the design. When released publicly there were a non-trivial number
   of users who objected to the idea of 'make config' being mandatory,
   so I added the -G option to disable the whole first pass.  However
   as time went on, more and more features were added that depended on
   the first pass, so it was necessary to rethink how -G works.

   In this version, the 2-pass design is now universal, and the only
   thing -G does is suppress the actual OPTIONS dialog. This has
   several benefits:
   a. Now all features are available to -G users
   b. The new method of suppressing the OPTIONS dialog is 100%
      effective (thus it's no longer necessary to use BATCH to truly
      suppress them)
   c. The --force-config option now overrides -G so users who really
      hate OPTIONS can have -G in their rc file, but still have it
      available by using --force-config on the command line

   Lots of variables, functions, and text have been modified to
   substitute out references to "config" in favor of "first pass"
4. Use nice for the make commands that actually build stuff
5. Improve the messages for fetching and updating INDEX
6. Add some whitespace in checkdepends() after removing stale data
7. If we're doing -F don't bother to initialize $PACKAGES
8. Clean up whitespace in the code
9. Use a better, more generic method of signaling an abnormal exit
   and call safe_exit with a status of 1 from more places.

   This is likely the cause of some of the vague problem reports I have
   received in the past that include complaints of, "I used -r/f and -R
   but portmaster still rebuilt certain ports a whole bunch of times."
10. In parent_exit() if INSTALLED_LIST has content but ilist does not,
    move it over so we can display the right information about work done
11. Make parse_index() more forgiving of PORTSDIR != /usr/ports
12. If PORTSDIR exists, but isn't a ports tree, warn the user, and when
    setting PACKAGES run tests against $pd, not literal /usr/ports.
    Thanks to bf@ for these 2.
c05052db0c
Doug Barton (dougb) · 2.32
Remove portmaster from the ports tree
ab84f64b4a
Doug Barton (dougb) · 2.32
Update for version 2.32
d3a92693cd
Doug Barton (dougb) · 2.30
build_l also needs to be unset in pm_make_s()
fe8cbc143c
Doug Barton (dougb) · 2.30
Unset build_l in pm_make()
c58c9c8b9a
Doug Barton (dougb) · 2.30
Update for version 2.30
79f2597e35
Doug Barton (dougb) · 2.29
If the user specified --no-confirm don't build the list. With a lot of ports to update it can get quite large.

If there are a very large number of ports installed the grep in
iport_from_origin() can fail with "Argument list too long." It's also
theoretically possible that the grep would fail for other reasons. So
if it does, fall back to 'pkg_info -O'. My method is faster which is
why I'm still trying it first, but this is a sort of "belt and
suspenders" situation.
d133d0fe53
Doug Barton (dougb) · 2.29
Add LICENSE information to my ports where the right answer is obvious
a22b6e03bd
Doug Barton (dougb) · 2.29
Update for version 2.29
3b8ce9c778
Doug Barton (dougb) · 2.28
There is no reason for uniquify_list() to reverse the entries, and doing so can make debugging more difficult.

Add code to post_config() to make sure that things in the
build-only dependency list are not listed as run dependencies for
something already installed.

Apparently, in some circumstances it's necessary to run ldconfig -R
when one moves shared libs from /usr/local/lib to
/usr/local/lib/compat/pkg. So add that to the -w code.
af0c0b7f62
Doug Barton (dougb) · 2.28
Update for version 2.28
75ff80886b
Doug Barton (dougb) · 2.27
In delete_all_distfiles() when there is no $origin (such as when a port has moved) but there IS a /var/db/ports/<portname>/distfiles, we do not want to prompt the user if they are using -d, we just want to delete the files.

In the code to strip the port from $build_l if the user chose not to
update a port that has an +IGNOREME file, the backslash in "\t" needs
to be escaped.
a87f40fe2c
Doug Barton (dougb) · 2.27
Update for version 2.27
7b4c40e08e
Doug Barton (dougb) · 2.26
Minor Fixes And Optimizations ============================= 1. In iport_from_origin() if we don't find a match (which is normal for    ports that are not yet installed) then return immediately. 2. A little more white space after the user input for --check-port-dbdir 3. In check_for_updates() if a port has moved we should also check for    an +IGNOREME file before forcing the update. 4. For distfil
594d054da2
Doug Barton (dougb) · 2.26
Update for version 2.26
f61e8c788e
Doug Barton (dougb) · 2.25
Document the --packages-local option for version 2.26
df9dd5c51e
Doug Barton (dougb) · 2.25
Document the --packages-local option for version 2.26

Fix spelling of /usr/local/lib/compat/pkg
ENVIRONMENT is not just for make
6ea8b59832
Doug Barton (dougb) · 2.25
New Feature =========== Add a --packages-local option for those who wish to use only local packages, and never attempt to fetch from a remote site.

Bug Fix
=======
Fix a braino for --index-first and --index-only:
The cross-checking of the command line options needs to happen before
the environment variables are set.

Cleanups And Optimizations
==========================
1. LOCALBASE_COMPAT is only ever used in combination with /pkg at the
   end, so fold that into the variable to start with.
2. Indicate to the user that -p is deprecated
3. Allow setting of DISTDIR directly in .portmasterrc like the other
   widely used vars. This entails the following:
   a. Capitalize distdir every place that it's used.
   b. Add to the list of --options to check which mean we don't even
      have to try to set it. This saves us a call to make(1).
   c. Don't set it to / if DISTDIR is empty, which makes error checking
      later on easier.
   d. Mark DISTDIR (and related vars) global in a few more functions
      to make it consistent.
4. Move the test for version > 6.4 first in the list, no point in
   processing a bunch of stuff only to bail out later.
5. Unset the test_command_line function when we're done using it
6. Be smarter about whether or not to use $PM_SU_CMD to fetch the
   INDEX.bz2
7. Improve cross-option error checking for the --packages* options
de194fda07
Doug Barton (dougb) · 2.25
Update for version 2.25
aa2bb47b89
Doug Barton (dougb) · 2.24
Document the --no-index-fetch option for 2.25
50cfa26804
Doug Barton (dougb) · 2.24
New Feature ============ Add a --no-index-fetch option for people who want to use the --index* options but do not want portmaster to do the fetching.

Cleanup and Fixes
=================
1. Remove no longer necessary local variable in version()
2. Rework how some initial variables are set. Deriving the values via
   make works, but is very slow. So try to be more intelligent about
   recognizing the standard values for the ones we always need to have.
   * For PORTSDIR and PKG_DBDIR if those variables are not in the
     environment and the standard directories exist, use them.
   * Move the setting of pd (PORTSDIR) up to before the INDEX-related
     items so that we can use ${INDEXDIR:-$pd}
   * The derivation of the INDEX-related stuff wasn't working (since
     we didn't know $pd) and no one has complained, so just use the
     default values from bsd.port.mk unless the user specifies others.
   * If /var/db/ports exists, use it for port_dbdir
3. Indicate that the -[lL] options are not compatible with -FRaefnors,
   updates, or installs
4. In the test to see if we downloaded a new INDEX.bz2 file supply a
   default value for index_time so that if the file did not exist
   previously the test will not fail.
4f7044fee1
Doug Barton (dougb) · 2.24
Update for version 2.24
6485991499
Doug Barton (dougb) · 2.23
Minor Bug Fixes and Adjustments: ================================ 1. Adjust whitespace at the end of the run 2. In a couple places where default value setting is overly complex    (including a couple of the places related to the recent ro_upg_port    changes) simplify the code. 3. When checking stat(1) for the INDEX updates we really want to check    the time when the file was last modified for pe
3b53dbda12
Doug Barton (dougb) · 2.23
Update for version 2.23
79022b5afd
Doug Barton (dougb) · 2.22
Document --index-first for version 2.23
35e294816e
Doug Barton (dougb) · 2.22
New Features ============ Expand on an idea provided by mandree@ to use 'pkg_version -I' to quickly check what ports are out of date, and incorporate that check into the --index option. Feedback from users seems to indicate that this is what they expected the option to do anyway, so the minor change to the feature does not seem to be a POLA violation, especially since INDEX support is still relati

Bug Fixes
=========
1. Add more error checking for incompatible command line options.
   Add a new cross_idx() to handle checking the 3 --index* options, and
   consolidate some of the old tests that were all relative to -G.
2. We want to test the .bz2 version of INDEX to see if it's newer, and
   unzip it if it is.
3. For -o mode:
   Going back a long ways upg_port was (ab)used to indicate the currently
   installed version of the old port for -o. Originally this was safe since
   it's very rare to have the new port installed already, and it saved a
   little bit of code complexity. However, as more and more features were
   added that utilized the value of upg_port it became increasingly
   unsafe. Particularly, at this time there are 2 related bugs manifest.
   First the wrong information appears in the confirm list (upgrade of
   the old port vs. install of the new) and parsing the old port
   directory. The latter was (mostly) harmless, although in the case of
   an old port directory being DEPRECATED this resulted in a fatal error
   when trying to upgrade.

   So, make the following changes:
   a. Make upg_port an installed version of the new port, if it exists.
   b. Introduce ro_upg_port for the existing version of the old port.
   c. Factor out some code that was related to how to handle lack of an
      installed version of the old port (since now that's done higher up).
   d. In the stage after the build of the new port and before pkg_delete
      of the old port test for upg_port OR ro_upg_port and run the various
      features (lib backup for -w, pkg_delete, etc.) as needed for both.
   e. In install_failed() notify the user about the backup port for the old
      version.
   f. I discovered in regression testing that invoking -o for MOVED
      ports that we get to as dependencies was working, but the code to
      automatically invoke -o for a parent port was broken. The problem is
      that we can't just exec a new version if we're the parent, we have to
      cleanly shut down background fetches and other processes, delete temp
      files, etc. So split the parts of safe_exit() that relate to these
      elements into their own function, parent_exit(), and call it both
      from safe_exit() and when exec'ing a new version for -o in this case.
4. Add error checking to pm_mktemp, and the stray mktemp call. According
   to a private report from a user it can actually fail.
5. Add error-checking to parse_index() so that if we don't find a line for
   the port we return an error code; check for the error in the callers.
6. Improve the handling of various situations where there is no ORIGIN
   recorded in the +CONTENTS file. This is almost always an error in the
   package building process, and therefore usually needs to be flagged and
   handled as an error. There are (at least) 2 situations where it may not
   be an error; bsdpan ports, and when the user has added an +IGNOREME file
   (usually for 3rd party packages).

   a. Add code to origin_from_pdb() that tests to see that grep returned
      something, echos the result as before, then also returns successfully
      * If the port is a bsdpan port, return with an error code but let the
        caller handle the reporting as appropriate.
      * If there is no ORIGIN but there is an +IGNOREME file don't report
        the error unless we're using -v, then also report that the
        +IGNOREME file is there. Either way, return with an error code.
      * If there is no ORIGIN, and no +IGNOREME file, report the error and
        return with an error code.
   b. In several places this allows several lines of code where the
      function is called to be collapsed into:
      origin=`origin_from_pdb $iport` || continue
   c. In the main body where we parse the command line for what to work on
      convert the code that was individually testing the various conditions
      that are now handled in origin_from_pdb() to simply parse the return
      codes with a case statement.

   In the common case (there is an ORIGIN in +CONTENTS) this is almost
   certainly a minor optimization since the error handling code in
   origin_from_pdb() is never reached, and several places where things
   like "is it a bsdpan port?" and other error handling have been removed.
7. In check_for move some local variables down into the block where they
   are used.
14242d555c
Doug Barton (dougb) · 2.22
Update for version 2.22
fd2ff578da
Doug Barton (dougb) · 2.21
When NOT using --index-only the rundep list still needs to be parsed the old way. So only add spaces to the list if we're generating it from the INDEX, and let the case statement match with or without spaces.

Reported by:    avilla
aa3ee8b137
Doug Barton (dougb) · 2.21
Update for version 2.21 part 2: Document necessary environment variables
5641500ca4
Doug Barton (dougb) · 2.21
Update for version 2.21
c5298ea589
Doug Barton (dougb) · 2.20
Update for version 2.21:

Document --index and --index-only
c9e9a64014
Doug Barton (dougb) · 2.20
Update for version 2.21:

Improve markup slightly for --packages options

Document --index and --index-only

Reflect that -e now takes a glob

Add a note about the nature of glob patterns
5a310562b8
Doug Barton (dougb) · 2.20
New Features ============ 1. Introducing the new options --index and --index-only. The first    will use the INDEX file to check if a port is up to date. The    second allows the use of portmaster with no /usr/ports directory. 2. The second argument to -o and the port name for -e can now be globs 3. For the -d|-D and -b|-B options allow the command line to override    any values that might be set 

Internals
=========
1. Add a pm_sv() function to handle verbose messages for PM_SU_CMD
2. Add a find_glob_dirs() function, and use it instead of custom
   versions each place this is needed.
3. For -o, add -DDISABLE_CONFLICTS

Bug Fixes
=========
1. If running as root, unset PM_SU_VERBOSE
2. Minor tweaks to improve usage()
3e9a9e4fcb
Doug Barton (dougb) · 2.20
Update for version 2.20
6d0d00d285
Doug Barton (dougb) · 2.19
Document the --delete-packages option for version 2.20
fe743b7bba