===========
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
============
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.
================================
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 pedantic value, although
in this scenario the practical effect was the same.
4. In --check-port-dbdir we now need to check if the values in the loop
are directories, since origin_from_pdb() now emits an error if it can't
find ORIGIN.
============
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 relatively new. Add the --index-first option to do what --index used
to do in case anyone cares.
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.
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
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
============
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 in .portmasterrc
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()
===========
Add a --delete-packages option so that after a package is installed
it will be deleted.
User-Visible Change
===================
Warn the user if they have an /etc/portmaster.rc file. This location
is deprecated in favor of PREFIX/etc.
Minor Updates
=============
1. Add -m1 to grep lines that can only have one match
2. Additional debugging help and error checking
3. Introduce init_packages_var() to initialize the PACKAGES variable,
and use it in some places where init_packages() was being overloaded.
4. Improve the logic of when, and when not to initialize the
packages directories.
5. Bring in some internal changes from the latest svn version for
diff reduction.
6. Add $PM_SU_CMD to a few places where it's needed
Bug Fixes
=========
1. In pm_cd_pd() the error message should reference $1, not $origin
2. The -r option should take a glob as input
============
1. Add a --no-term-title option to avoid updating the xterm title bar
Bug Fixes
=========
1. Add code to prevent duplicate entries in the list of things to be
done for the user to confirm after config is done.
2. Add code so that if a user has an +IGNOREME file for a port that
is a dependency and chooses not to update it we will not falsely claim
that it will be udpated in post_config().
3. If we are running on a cons25 terminal let term_printf() return
instead of trying to printf the escapes which won't work and will
annoy users.
4. Fix 2 places where sudo privileges might be needed but the non-sudo
version of the command was called. [1]
5. If a user chose -G don't print the (${dep_of_deps}/${num_of_deps})
in the xterm title since the latter will not be incremented. This has
the pleasant side effect of allowing better indenting of the code.
Submitted by: N.J. Mann <njm@njm.me.uk> [1] (for pkg_delete)
New Features:
=============
1. When running through the config phase a list of things to be installed
and/or upgraded will be generated. This list will then be presented to
the user for confirmation before proceeding.
2. Add a --no-confirm option to suppress this new feature.
3. When using portmaster in an X terminal window that supports updating
the title you will now see a status update for what port is being
built, and as appropriate what dependency of that port and an (N/M)
counter. Thanks to ehaupt for the push on this, as well as some testing
and sample code.
4. Make the "yes or no" prompts (hopefully) more clear by adding "y/n"
to the text of the message, e.g., "===>>> Do you want to live? y/n [y] "
Feature expansion:
==================
Do a more thorough job of tracking things that should fall into the
--packages-build/--delete-build-only category. I.e., if something is
a run dependency of a port or ports that themselves are only build
dependencies, add it to the build_only_dl_g anyway.
New internals:
=============
1. Add a uniquify_list function so that internal lists of variables
can be made unique. Start using it for some of the new stuff, and
in clean_build_only_list().
2. Add a pm_cd_pd() which will cd into the port directory or error out
with an appropriate message.
3. Start using pm_cd_pd() where appropriate, including in a couple of
new places where we have to go back to the port directory after cd'ing
around elsewhere due to the new update_build_l().
4. Make some other cd/pm_cd invocations consistent
Cleanups:
=========
1. Instead of saving some of the new variables unconditionally in
safe_exit() move the things that are only done in the config phase
to that section, and move build_deps_il to the !config section.
2. Since $new_port may be set as a side effect of the new "Terminal
title" feature, conditionalize it for the "main" process.
3. Remove the old RCS Id stuff since I'm not using it
Bug fix:
========
In safe_exit() when doing multiports and we interrupt the process
the attempt to print the INSTALLED_LIST was not successful. So move
all of the related code into a test for INSTALLED_LIST's existence,
and just print the whole list (even if it has only one item) in both
the -a (as it was already) and multiport cases.
1. Versions of pkg_add in FreeBSD older than 6.4-RELEASE will not have
the proper options available, so warn the user if they try to use
package-related code.[1]
2. Highlight some different features
Reported by: Miroslav Lachman <000.fbsd@quip.cz>[1]
====================
1. We only want to set PM_BUILD_ONLY_LIST=pm_bol in the command line
parser if we are the parent port. Otherwise proper build dep detection
will not occur.
2. Versions of pkg_add in FreeBSD older than 6.4-RELEASE will not have
the proper options available, so warn the user if they try to use
package-related code.[1]
Reported by: Miroslav Lachman <000.fbsd@quip.cz>[1]
Feature Update
==============
1. Further update the --packages-build and --delete-build-only options
to work with -a:
a. Create a new function clean_build_only_list() from code that
was already in dependency_check() and use it both there and at
the end of the config mode in -a.
b. Properly initialize the variables related to these two features
in the same spot as all the other global vars are initialized rather
than doing it in different locations.
Major Cleanups
==============
1. 9-CURRENT has its own package repo now, hurray!
2. Instead of having a pca() to describe the post-config action
collect the stuff that always runs after config is done into a
function, and use the pca() logic to determine what to print. This
also restores the whitespace to consistency between the modes
(one port, multiport, -a).
3. Instead of fetching the directory listing for each port category
(devel, ports-mgmt, etc.) every time we need to check a port, fetch
it once and save it to a temporary file. This lets us do several
cool things:
a. Save a lot of time not having to re-fetch each iteration
b. Run the sed code to fix %2c -> , up front
c. Add a sed pattern to fix %2b -> +
d. Run a variety of different patterns to try and find the
latest_pv
4. We only want to run the logic tree on whether $latest_pv is up to
date or not if that variable has a value, so add appropriate tests.
Minor Cleanups
==============
1. Make it easier to include the --packages-build and --delete-build-only
options in a portmaster rc file by setting the PM_BUILD_ONLY_LIST variable
(which is used by both options) in the script if either of the two
options is detected.
2. More robust error-handling for package directory creation in
pm_pkg_create().
3. Move the error message for "no package in -PP mode" to a variable
for both reuse and code readability.
Bug Fixes
=========
1. Not finding a package (or even a package repo) should only fail()
if we are using -PP, not if we're just using -P.
=========
1. In the test for -PP being alone on the command line I forgot the
-dash at the beginning of the second test so it was falsely picking
up ports with names like p5-Devel-PPPort.
2. If you are building more than one port on the command line, and you
use --packages-build and/or --delete-build-only, and one of the ports
on the command line would otherwise qualfiy as a build-only dep, it was
falsely being treated as such. Solve this problem by adding all ports
on the command line to the run_dl_g list in multiport().
3. With the new parser if you use -v with --check-port-dbdir it's going
to be $1, not $2.
4. Don't unset the packages_init function till we're actually done using it
5. If you are using -g plus one of the --packages* options then creation
of the new package will fail since there is nothing for 'make package'
to work with. So change backup_package() to a more generic form called
pm_pkg_create and use that for both making backup packages and making
a new local package from an installed package.
6. In order to facilitate 5, update the dependency information in an
installed package's +CONTENTS file before creating the new package.
Minor Tweaks
============
1. Include the [-v] in the detailed usage() for --check-port-dbdir too
2. Make the output of --version more clear to everyone who isn't me :)
3. If DISTDIR is its own zfs filesystem then the code to delete empty
DIST_SUBDIRs can cause problems, so special case it in its own function.
4. Remove some white space
2. In the procedure for using portmaster to re-install after a major
version upgrade, list "re-install portmaster" as an actual step. [1]
Submitted by: Kevin Oberman <oberman@es.net> [1]
1. Document the new package-related features for version 2.13
2. Remove the requirement that --options be first on the command line
3. Deprecate the -p option
4. Improve the prose in a few sections, mostly removing commas and
simplifying sentences.
5. Small markup tweaks
6. Clearly indicate that +IGNOREME files only work on installed ports
7. Document that -x will work on the origin directory if there is
no installed version.
8. In the example .portmasterrc file the verbose variable needed a value
This is svn version r200206.
New Features
============
1. Support for the following new options:
a. --packages|-P and --packages-only|-PP
b. --packages-build
c. --packages-if-newer
d. --delete-build-only
e. --always-fetch
f. --local-packagedir
In addition to the new code this also involved making some existing
messages more generic, and customizing some others to be aware of
whether packages are in use or not.
2. New command line parser allows placement of --long-options
anywhere in the command line
Minor Tweaks and Fixes
======================
1. Make fail() less finicky about how the message is input
2. Start the process of deprecating -p since it isn't useful
any longer
3. Fix parsing of PKG_DBDIR so that we don't depend on it having
exactly 3 components. This also saves 2 external calls to cut.
4. For the --clean-distfiles[-all] options sort the list before
printing to make it easier to see when files are related.
5. Instead of repeating the tests on when to run read_distinfos()
do them once in the initialization phase then rely on whether or
not DI_FILES is set.
6. Improve some messages to make their meaning more clear
Excellent beta testing and feedback by: Christer Solskogen
Major funding for the package code, including the --packages-build
and --packages-if-newer options was provided by Modirum MDpay.
Additional funding provided by (in no particular order):
Jan Hornyak
Christer Solskogen
R Koole
Michael Proto
Bard Skaflestad
Paul Lambert
Societe ToDoo
Andrew Belashov
Yoriyuki Sakai
Flemming Jacobsen
Julian Stecklina
Douglas Berry
Beat Gatzi
Christopher Dawkins
Mark Boolootian
Soeren Schroeder
Christoph Sold
More information on sponsorship is available at:
http://dougbarton.us/portmaster-proposal.html
My deepest appreciation to the FreeBSD community for the outpouring
of support that allowed me to complete this portion of the project.
Add OPTIONS to install programmable completion files for Bash and zsh.
The Bash file is mine, the zsh file and installation suggestions are
from the PR. Additional testing for the zsh completions from garga.
PR: ports/127319
Submitted by: Shota Iwazaki <iwazaki8@yahoo.co.jp>
============
1. The -x option can now be specified more than once.
2. The --list-origins option will list origins from root and leaf ports
for use in rebuilding all ports (for example after a major version upgrade).
This requires moving ports_by_category() up into the --features section
Improvements
============
1. Error checking for -f and -i now fails instead of silently unsetting -i
2. In dependency_check():
a. Switch to $origin instead of $d_port in several places to make the
messages to the user more clear and consistent
b. $origin is also better for check_interactive()
c. Move check_exclude down to after CONFLICTS check, and use $iport
if it exists. This is more consistent with how check_exclude() usually
works
3. Prefix DEPTH, PARENT_PID and EXCL environment variables with PM_
4. Tighten up multiport by saving confirmed directories into a temporary
list, then running check_exclude() and check_interactive() against
each item of the temporary list, then adding to the final list
5. Execute make in a subshell and unset some of the more unwieldy
environment variables in that shell. (Suggestions and testing by avg)
Details for -x:
===============
1. Since there may be multiple arguments for PM_EXCL, use export not $ARGS
2. Move the error checking into getopts
3. In check_exclude() go through each pattern in turn
users to the EXAMPLES section.
2. Expand the EXAMPLES with some more commonly used features.
3. Minor tweaks to other texts.
This version will go out with portmaster version 2.11 but the changes
are not specific to that version.
to make the code match the equivalent code in the main command line
parser, but I missed one which meant that if you specified multiple
glob patterns on the command line it no longer matched anything.
"Hey this doesn't work anymore" by: Florian Smeets <flo@smeets.im>
"I will do global searches for even small variable changes" x 1000: me
=========
1. Rework the NO_DEP_UPDATES feature which is an optimization when you
are updating or installing a port whose dependencies are all up to date.
a. Stop using a temporary file for this feature, and instead utilize the
existing IPC_SAVE mechanism
b. Focus the toggling of this flag in update_port() so that it will always
be unset when it needs to be (and not when it doesn't)
[This is the actual bug fix]
c. Add a flag that is global but not exported in dependency_check() so
that the toggle in update_port() will know when (and when not) to fire
2. Set PM_BUILDING when it needs to be set in multiport()
Enhancements
============
1. Use globstrip() in multiport(), change the variable to match the parser,
and add notes in the parser and multiport() to keep the code in synch
(it's _just_ different enough so that a function doesn't make sense atm)
2. Replace globstrip sed kludge with more effcient shell pattern
3. Make the PM_BUILDING values more explicit to aid in debugging
when using the -i option. This is a minor inconvenience for those users
that give a list of specific ports on the command line, but a huge
benefit for users who use a glob pattern that can easily match things
that don't need to be rebuilt.
===============
1. For the -[rf] and -R options:
a. Do not delete the flag files that indicate a port has been updated
until the -[rf] process is successful.
b. Update the wording in usage() to be more clear about what -R does
c. If a user starts -[rf] without -R, and there are flag files present,
ask if they would like to delete them, or enable -R mode.
2. Add a globstrip() function and use it to clean up inputs to -x
(and in the input parser where the idea originated)
3. Improve the wording of the message in -s mode about what to do if
they choose not to remove a port with an empty +REQUIRED_BY file
4. Tell the user how many fetches we are waiting for in -F
Removed Feature
===============
Remove the -u option. It did very little, and not what users expected.
1. Document the --check-port-dbdir
2. Add a paragraph about why it's not possible for portmaster to continue
when there is an error.
3. Update the suggested alias for portmaster -L
4. Update the process of deleting and reinstalling ports to include the
new --check-port-dbdir option, and to check /var/db/pkg
===========
1. Add --check-port-dbdir to clean stale entries from /var/db/ports [1]
Since the definition of PORT_DBDIR is now used in more than one place,
add it to the initialization routine at the top.
General Improvements
====================
1. Add a 'nonfatal' option to find_moved_port() so that when it's
called in a context where we don't care about a port that has been
deleted (such as distfile listing) it doesn't exit. Add some code to
that function to tell -L that the port has been deleted.
2. Deal with ports that require user interaction to fetch by checking
first whether MASTER_SITES is empty before running 'make checksum'.
This should solve the problem of portmaster unintentionally deleting
the distfiles for java ports, inter alia. [2]
3. Improve kill_bad_children() by using process group id [3]
4. Don't call kill_bad_children() in safe_exit() without reason.
a. Implement this for the distinfo child process by flagging the first
line of the file and checking for a file with -s instead of just -e.
b. Implement this for -F mode by flagging when all the background
processes have finished.
This should result in less of those annoying 'Terminated' messages
5. Move the start of read_distinfos() until after we are sure that we
are going to try building the port.
Small Fixups
============
1. When update_contents() finds something odd when updating a port
suggest using --check-depends to clean it up.
2. In check_for_update() avoid having variables that differ only by case
3. In update_port() recurse with just the port to update [3]
4. In dependency_check() run check_interactive() for installed
versions that need updating.
5. Update copyright
Concept by: RW <fbsd06@mlists.homeunix.com> [1]
Fix Suggested by: ale [2]
Suggested by: Geraint Edwards <gedge@yadn.org> [3]
============
1. You can now specify multiple globs for directories in /var/db/pkg on the
command line (along with full names of directories/paths from /usr/ports
and/or /var/db/pkg, as before)
2. When calling check_interactive or update_port from check_for_updates
tell the user what updated version is available. [1]
Bug Fixes
=========
1. Don't set show_list to "all" for -a unless there is somthing to show
2. Add K (don't postclean) to getopts [2]
Other Improvements
==================
1. In check_dependency_files() don't let ro_opd be empty for the purpose
of the egrep expression. It works now, but it apparently violates the
spec and could case problems down the road (e.g., for bsdgrep).
2. Since the BSDPAN pseudo-ports do not exist in the ports tree there
is nothing for portmaster to do with them. Therefore ignore them when
appropriate, notifying the user when necessary. [3]
Submitted by: Geraint Edwards <gedge@yadn.org> [1]
PR: ports/126006 [2]
Submitted by: ahze [2]
Pointy hat: moi [2]
Problem pointed out by: Bapt <baptiste.daroussin@gmail.com> [3]
PR: ports/125428 [3]
=========
1. Fix -a mode by moving the update of CONFIG_SEEN_LIST to after the port
has been checked for available updates. The old way worked as a side
effect to one of the things I fixed in version 2.4. This is probably
how it should have been done all along, but since the old way worked
I was hesitant to change it.
2. Now that we are using a different format for the INSTALLED_LIST,
fix the bit that always displays the list if we are using -a.
=================
Print a list of ports that will be worked on when doing multiple
ports, either from a glob or listed on the command line.
Bug Fixes
=========
1. When working multiple ports, if a port that is specified on the
command line is reached as a dependency for another port that is on
the command line (either specifically or from a glob) that port
should be rebuilt the first time through, even if it is up to date.
2. By the same token, only rebuild that dependent port once if it
was not up to date. Implement these features by keeping lists of
what needs to be, and has been built specific to the multiport
context.
3. In multiport() declare local variables to be local
4. When reading a glob pattern from the command line do not run
the multiport feature if there is only one match, just pass it on.
Minor Enhancements
==================
1. Save the list of work done using \t and \n and print with echo -e
2. Now that we are properly updating CONFIG_SEEN_LIST at the end of
the config run remove the old update to that list from
dependency_check()
1. A glob pattern on the command line now updates all ports that match
2. Clarify that we rebuild the port(s) on the command line by default
3. Document -K option
4. Note the move of /etc/portmaster.rc -> /usr/local/etc/portmaster.rc
5. Document that you need to look in the script to find values to place
in the *rc files. TODO: List potentially useful variables
5. Fix the Xr for sudo
===========
1. By popular demand, change the command line behavior of 'portmaster blah*'
to update all ports in /var/db/pkg which match the glob.
2. Add the -K flag to avoid cleaning the work directory after the build.[1]
Bug Fixes
=========
1. Instead of /etc/portmaster.rc we should be reading
/usr/local/etc/portmaster.rc.[2] Begin introducing support for that.
2. If using the -n option, don't try to fetch the distfiles.[3]
3. When I added the optimization to only run 'make -V CONFLICTS' if
it existed in the Makefile I neglected to unset the value of $conflicts
in the script between ports.[4]
4. I ran into a port which set VERBOSE to a value that it needed to use
in its build process, and since I was using the -v option for portmaster
(which sets VERBOSE=yes) the build failed. To work around this, prefix
the variable names for common English words (VERBOSE, FORCE, BUILDING)
with PM_.
5. To aid future debugging (as in 4. above) change the values of flag
variables to something meaningful instead of just "yes."
6. Automatically handle the case where the parent port has MOVED instead
of asking the user to re-run portmaster with the right options.
Submitted by: pav [1]
Submitted by: Miroslav Lachman 000.fbsd@quip.cz [2]
Submitted by: Jiawei Ye <leafy7382@gmail.com> [3]
PR: ports/124271 [4]
Submitted by: James Kelly <jjk@tilted.net> [4]
==================
The previous code tried to handle moved ports in much the same way
as it handled replacing a port with the -o option, but this would
sometimes create problems if we are deep in a dependency graph.
So rather than re-implement only a portion of the -o code, use the
whole thing instead.
We accomplish this by either exec'ing ourselves with the proper -o
options if we are in the dependency tree, or by asking the user to
restart with the proper -o options if they specified the moved port
on the command line. The latter is necessary to avoid having to
duplicate all the "initialize the parent process" code. This allows
me to simplify the code in a few places since -o is now the only
special case.
Bug Fixes
=========
1. Don't try to derive $portdir from $upg_port if using -o
2. Don't try to build a port with an +IGNOREME file if we are doing
the dependent ports in -r mode
Minor tweak: Add some whitespace after a warning message
your ports, I had:
pkg_delete *
which works for me because of a local bash completion, but doesn't
work for most users. So, correct that to be:
pkg_delete '*'
instead.
a. If you specify a glob pattern in /var/db/pkg, there will always
be a prompt, even with the -u flag.
b. Try to discourage people from using -u, it doesn't seem to do what
people expect it to do.
c. You cannot upgrade sudo with PM_SU_CMD if sudo is your PM_SU_CMD
2. s/Dq/Qq/
3. Add .Ev tags to environment variables
in several cases totally rewritten. I am also glad to say that
all of the advertised features now work as advertised. :)
The most exciting new feature is the completely new dependency
updater. I finally took the time to write the line-oriented version
of update_contents() that I wanted to write in the first place, so
no more sed, and no more warnings sent to $PAGER. This version relies
entirely on exact matches to DEPORIGIN to do its work, so it's 100%
reliable.
So what else is new? A lot of micro-optimizations have been done to
eliminate duplicated work, avoid using external commands when not
necessary, etc. There are also some not-so-micro optimizations, which
means that this version is noticably faster.
Totally new features:
1. --check-depends, which as described above calls the new functions
to parse existing +CONTENTS files for dependency data, uses that data
to update +REQUIRED_BY, and updates the +CONTENTS files. These same
routines are also used for updating ports.
2. A "fetch only" feature (-F) that will go get distfiles for new
versions of installed ports by default, and can also be used to get
the files for all of your installed ports, or certain branches by
using the -aft options.
3. An option to hide the build and install process by saving it to a
log (-H). These logs are deleted on successful install, and saved if
the update process aborts.
4. We now keep track of all the ports that get updated or installed in
a given invocation, and print the list at the very end of the process.
5. There is now a little "map" to show you where you are in the
process of the form "parent >> child >> grandchild >> etc."
6. Support for running as an unprivileged user (via sudo) has been
added. See the man page for details on how to configure this.
Improved features:
1. When showing the pkg-message/+DISPLAY files at the end of the
process, all files are grouped together and spit out to $PAGER (or
just cat if -u). If there is an error, there is a pause first
(unless -u).
2. There is now much more sanity checking on user input so that we can
bail out early if there is a problem.
3. The error messages have been completely re-done to be more
informative, and many of them include helpful suggestions on how to
fix the problems.
4. In the expunge (-e) feature, if there is dependency data for the
port you want to delete we now offer you the chance to delete that
instead of just aborting. (Use at your own risk!)
5. The "save old shared libs" feature (-w) is now a lot more
efficient, only runs ldconfig when it has to, and uses
/etc/rc.d/ldconfig.
6. The /var/db/pkg/*/+IGNOREME file now has more functions associated
with it. See the man page for details.
7. When using the -L feature, there is a warning printed if the port
has been set to FORBIDDEN, DEPRECATED, BROKEN, or IGNORE.
8. If you have a real /usr/X11R6 directory (not a symlink) this is
added to the PATH. Otherwise it's assumed that LOCALBASE == X11BASE.
9. Backup packages of existing ports are now saved to
/usr/ports/packages/portmaster-backup, and left there if -b is used.
This way you can create backup packages of a port without disturbing
existing packages with the same version.
There are numerous other things that are not user-visible which have
been cleaned, polished, made more efficient, etc.
===========+
1. If an +IGNOREME file is present for a package that has a new
version, let the user know.
2. Use printf to display BROKEN/FORBIDDEN/IGNORE messages so that
multi-line messages with embedded newlines will display properly.
Typo Fix
========
Fix two typos in the "it's interactive" message
... on the same line
... in two consecutive words. A new personal record.
I did run through the rest of the script with aspell and didn't
notice anything else, but who knows?
===============
1. In delete_all_distfiles(), $distdir already contains a trailing slash
2. Only print the "no new versions" message for -L, not -l
Big bug fix
===========
1. cd back to the port directory before trying to run 'make install'
pointy_hat_supply++
Approved by: portmgr (marcus)
to bottom read through prompted by a user reporting bug #1 below.
Fortunately I only found that one additional instance of forgetting
to virtualize a value we derive from bsd.port.mk, but I did find and
fix a few more things as well.
Bug Fixes
=========
1. Virtualize an occurrence of $distdir instead of using $pd/distfiles
2. Make all variables in read_distinfos() local
3. When specifying multiple ports on the command line, the test for
PARENT_PID to start read_distinfos() would always fail, so start it
in the initial PARENT_PID block instead. This also implies pulling the
DI_FILES creation up into that same block.
Non-Functional Changes
======================
1. Adjust whitespace in the code, and the script output in a few places
2. Use a shell expansion instead of sed to trim multiple results
3. Remove one redundant error check
4. Replace the name find_contents_distfiles() with find_dl_distfiles()
since the info is not in +CONTENTS anymore
5. Add/update comments to the existing code
Small changes to actual behavior
================================
1. When dealing with unrecorded dependencies pipe the results to
'less -F'
2. Minor optimization: In read_distinfos(), check to see if we're
upgrading an existing port, and if so do that port first so we're
sure the right distfiles will be in DI_FILES even if the function
doesn't complete before the port is done building/installling
3. Add a message to -L to indicate when there are no new versions
4. Move the checks for run-depends after installation of the parent
port so that if a run-depends port has a build-depends on the parent,
it will work. This is a supported, but apparently not recommended
configuration. To make this work do the install with -DNO_DEPENDS so
that we can take charge of the run-depends installs.
===================
1. When I changed how the MOVED file was treated in version 1.19
I accidentally typed a literal /usr/ports/. Change that to the
variable for PORTSDIR as it should be. [1]
2. When using the --show-work feature and the port has no dependencies,
exit immediately instead of recursing.
Submitted by: Jason C. Wells <jcw@highperformance.net> [1]
=========
1. For all values derived from bsd.port.mk, assert that they are not empty.
This helps prevent problems when running 'find $value ...'
2. Don't try to append to the master list of distfiles if we're using -D
Refinements for /var/db/ports/$name/distfiles
=============================================
1. Only create a distfiles file if the port has distfiles
2. Delete the distfiles list and try to delete PORT_DBDIR when we pkg_delete.
(The latter will fail if there is an options file present.)
3. Define the distfiles list even if we are using -D
============
1. Switch to saving distfile info in /var/db/ports/$name/distfiles
ala PR http://www.freebsd.org/cgi/query-pr.cgi?pr=106483
2. Keep track of distfiles we've already examined so we won't have to
do them again (or print the "keeping" message for -v more than once).
This has more benefit the more distfiles a port has.
3. Add all distfiles for the new port to DI_FILES after install.
This only makes a difference in a few cases, but it's easy to do.
Bug Fixes
=========
1. Make sure that $distdir always has a trailing slash in case it
is a symlink. [1]
2. In delete_stale(), test whether or not a file is in the _current_
distfile list to make sure that it is not auto_deleted by mistake. [1]
3. When building DI_FILES, only use lines starting with MD5 to avoid
adding every file > 1 time.
4. Only run read_distinfos() when we really need it.
[1] Inspired by ...
PR: ports/116298
Submitted by: NIIMI Satoshi <sa2c@sa2c.net>
===========
1. Before calling pkg_create for the installed version of the port,
cd into the PKGREPOSITORY directory. This not only simplifies the code,
it helps handle the problems of ports trees mounted read-only. [1]
2. Factor out initialization of the $pkgrep directory into a function.
Bug fixes
=========
1. Before calling 'find ${pkgrep}/ ... -delete' assert that $pkgrep is
not empty.
2. Make sure that $pkgrep is initialized everywhere it's needed.
Suggested by: Hans Lambermont <hans@lambermont.dyndns.org> [1]
the DESTDIR changes today.
2. Export pd, pdb, and distdir to avoid having to look them up each time
3. Streamline find_moved() by grepping for lines, and then recursing
4. Further streamline by using variable stripping instead of cut
=========
1. If we are doing --show-work, don't launch background processes
that are only useful for real builds.
2. Fix a rather obscure bug that can only happen:
IFF you are doing an install of a new port, and
IFF you have a dependency "early" in the list with an +IGNOREME file, and
IFF you have one or more dependencies "late" in the list that are not
installed. The bug is a false positive on the +IGNOREME for the uninstalled
ports. The solution is to reset the "port to test for +IGNOREME file"
variable each time through the loop. This will usually be a noop, but it
costs almost nothing in any case.
============
1. Keep a temporary flag that indicates a port has already been upgraded
during a -r or -f update, and add a -R (retry) option to let the user
skip those ports on subsequent attempts if the first update is interrupted.
2. Change the default behavior to use 'make config-conditional' to
take advantage of the recent enhancements to the OPTIONS functionality.
3. Add a new --force-config flag to use the old behavior of doing
'make config' for every port.
4. Don't delete backup packages until the original (parent) portmaster
process has finished successfully. That way if an update fails, the user
can back out the whole thing.
5. Add -w option to save old shared libraries from an installed port.
6. Add -x option to avoid building ports that match the glob pattern.
7. Split tracking of build and run depends to before and after the
port build respectively.
Enhancements
============
1. If the user interrupts the update, search for errant dialog
processes as well as errant portmaster child processes.
2. Avoid invoking pkg_version in check_for_updates() if the installed
version is already up to date.
3. Call pkg_info for seemingly stale dependencies (-s) so user has
a better idea what he's being asked to delete.
4. Use -DBATCH when calling 'make checksum' in the background so that
ports that have pre-everything dialogs no longer cause runaway dialog
processes.
5. Add BEFOREPORTMK=yes where it can be used to speed things up.
Thanks to Stephen Montgomery-Smith <stephen@math.missouri.edu>
6. Be smarter about not starting read_distinfos in the background if
there is no need to, and be more aggressive in killing it off when
we're done.
7. Make read_distinfos quieter to avoid printing confusing messages
out of synch with the foreground process.
Changes
=======
1. Use the PKGREPOSITORY directory for all packages, create it if it
doesn't already exist.
2. If we fail(), call one of {trap|safe}_exit to do a better job of
cleaning up after ourselves.
3. Make failures of various commands silent when we provide our own
error message.
4. Make killing background processes generally much quieter.
Bug Fixes
=========
1. In check_for_updates(), when FORCE is on, don't skip an up to date
port.
2. Change MAKE_ARGS to PM_MAKE_ARGS to avoid collisions with ports that
use the former already.
3. Fix grammar in a usage() line, add details for --show-work, and
other various improvements.
4. Move the clean target to after (optional) 'make package' to avoid
having to rebuild the port.
5. Only try to update the +CONTENTS file if it exists.