This is a proposal (primarily) to change the output of pkg(1) when -v is
not used for package operations. When -v is not used, an 'update
summary' would be displayed instead at the install-hold level. It also
attempts to improve messaging in the 'No updates available' case.
It is believed that by changing the default output to include a
high-level update summary we can help prevent "user surprise" when
updates take the system to a version the user did not anticipate and
they did not specify a version to upgrade to.
This proposed solution attempts to empower the user by providing them
with the information they need to decide whether the update they
expected happened as the package system cannot automatically determine
what their intent was when updating.
In the examples below, I intentionally chose to label the version fields
displayed as I believed the current output (X -> Y) is not immediately
obvious for new users and the new output is more likely to fit in 80
columns. Example:
# pkg update -n
...
UPDATE SUMMARY
solaris
entire
0.5.11,5.11-0.175.0.0.0.2.0:20111020T143822Z ->
0.5.11,5.11-0.175.0.1.0.4.0:20111110T225628Z
(0.5.11,5.11-0.175.0.2.0.3.0:20111201T182924Z)
As you can see, the above output is a bit hard to follow. The wrapping
above should also match what a user would see in 80 columns. As a
result, the examples below are in a more verbose format. While the
format chosen does use more lines to show the same information, this was
believed to be acceptable since it shows a summary of version changes
instead of every single package that is changing.
END-USER EXAMPLES
=================
These examples assume 'entire' is installed and nothing has been
version-unlocked:
# pkg update -n
...
UPDATE SUMMARY
solaris
entire
Installed 0.5.11,5.11-0.175.0.0.0.2.0:20111020T143822Z
Proposed 0.5.11,5.11-0.175.0.2.0.3.0:20111201T182924Z
...
Shows an update from S11 release to the latest SRU. 'entire' is shown
because it is the top-level of the install-hold chain (in this case,
'core-os'). The other incorporations are hidden even though they are
changing because they are incorporated by the package delivering the
'core-os' install hold.
# pkg update -n
...
UPDATE SUMMARY
solaris
entire
Installed 0.5.11,5.11-0.175.0.0.0.2.0:20111020T143822Z
Proposed 0.5.11,5.11-0.175.0.1.0.4.0:20111110T225628Z
Latest 0.5.11,5.11-0.175.0.2.0.3.0:20111201T182924Z
...
Shows an update from release to a newer SRU, but not the latest which
has been blocked by a pkg freeze, unbundled product, or some other
package. 'entire' is shown because it is the top-level of the
install-hold chain (in this case, 'core-os'). The other incorporations
are hidden even though they are changing because they are incorporated
by the package delivering the 'core-os' install hold. The Latest
version is only shown if the proposed version is older.
# pkg update -n
...
UPDATE SUMMARY
solaris
ips-incorporation
Installed 0.5.11,5.11-0.175.0.0.0.2.0:20111020T143822Z
Proposed 0.5.11,5.11-0.175.0.2.0.3.0:20111201T182924Z
...
Shows an update of a single consolidation's incorporation to a newer
version under the theory that it is not incorporated by 'entire' or is
allowed by 'entire'. 'ips-incorporation' is shown because it is
changing and 'entire' is not.
# pkg update -n
...
UPDATE SUMMARY
solaris
entire
Installed 0.5.11,5.11-0.175.0.0.0.2.0:20111020T143822Z
Latest 0.5.11,5.11-0.175.0.2.0.3.0:20111201T182924Z
No updates possible. If updates were expected, execute the command
again and specify each package listed above with the desired version for
more information.
...
Shows a case where newer packages are available, but cannot be updated
to because they have been blocked by a pkg freeze, unbundled product, or
some other package. 'entire' is shown because it is the top-level of
the install-hold chain (in this case, 'core-os') of the installed
incorporations. (This failure to update is not considered an error
because it is impossible to determine whether the result is intentional
without explicit user input.)
Also note that it says 'possible' instead of 'available' and that pkg(1)
would exit with code 6 in this case (a new code used to indicate that no
changes were made but potential updates are available). Currently,
pkg(1) would only show the message 'No updates available.' and then exit
with code 4.
I considered having pkg(1) display the example command line for a user
to execute for the above case, but I think the more text we print, the
more likely the user is to simply ignore it. I really don't want them
to simply copy and paste what's printed without reading the message --
they need to think about what they type next.
DEVELOPER EXAMPLES
==================
These examples assume 'entire' has been removed:
# pkg update -n
...
UPDATE SUMMARY
on-nightly
osnet-incorporation
Installed 0.5.11,5.11-0.175.1.0.0.6.18318:20111220T132736Z
Proposed 0.5.11,5.11-0.175.1.0.0.6.18339:20111222T133041Z
pkg5-nightly
consolidation/ips/ips-incorporation
Installed 0.5.11,5.11-0.175.1.0.0.0.2603:20111220T130654Z
Proposed 0.5.11,5.11-0.175.1.0.0.0.2603:20111222T130712Z
...
Shows an update from a previous nightly to a newer one.
'osnet-incorporation' is shown because it is the top-level of the
install-hold chain (in this case, 'core-os.os-net') and
'ips-incorporation' because it is also at the top-level ('core-os.ips').
No other incorporations are changing so they are not listed.
# pkg update -n
...
UPDATE SUMMARY
on-nightly
osnet-incorporation
Installed 0.5.11,5.11-0.175.1.0.0.6.18318:20111220T132736Z
Proposed 0.5.11,5.11-0.175.1.0.0.6.18320:20111221T132729Z
Latest 0.5.11,5.11-0.175.1.0.0.6.18339:20111222T133041Z
pkg5-nightly
consolidation/ips/ips-incorporation
Installed 0.5.11,5.11-0.175.1.0.0.0.2603:20111220T130654Z
Proposed 0.5.11,5.11-0.175.1.0.0.0.2603:20111221T130623Z
Latest 0.5.11,5.11-0.175.1.0.0.0.2603:20111222T130712Z
...
Shows an update from a previous nightly to a newer one in the case where
an update to the latest version of each incorporation has been
prevented. The Latest version is only shown if the proposed version is
older. Only the packages delivering the top-level
pkg.depend.install-holds that are changing are shown. (In this case,
'core-os.osnet' and 'core-os.ips'.)
MORE DEVELOPER EXAMPLES
=======================
These examples assume 'entire' is installed and 'osnet-incorporation' is
version-unlocked:
# pkg update -n
...
UPDATE SUMMARY
on-nightly
osnet-incorporation
Installed 0.5.11,5.11-0.175.1.0.0.6.18318:20111220T132736Z
Proposed 0.5.11,5.11-0.175.1.0.0.6.18339:20111222T133041Z
...
Shows an update from a previous nightly to the latest nightly.
'osnet-incorporation' is shown because it is not incorporated by the
top-level install-hold package (because of the facet version unlock) and
delivers an install-hold that is changing. Other incorporations are not
shown because they are not changing and they are incorporated by 'entire'.
# pkg update -n
...
UPDATE SUMMARY
on-nightly
osnet-incorporation
Installed 0.5.11,5.11-0.175.1.0.0.6.18318:20111220T132736Z
Proposed 0.5.11,5.11-0.175.1.0.0.6.18339:20111222T133041Z
pkg5-nightly
consolidation/ips/ips-incorporation
Installed 0.5.11,5.11-0.175.1.0.0.0.2603:20111220T130654Z
Proposed 0.5.11,5.11-0.175.1.0.0.0.2603:20111222T130712Z
...
Shows an update from a previous nightly to the latest nightly.
'osnet-incorporation' is shown because it is not incorporated by the
top-level install-hold package (because of the facet version unlock) and
delivers an install-hold that is changing. 'ips-incorporation' is shown
because 'entire' is not changing and it delivers an install-hold
('core-os.ips').
# pkg update -n
...
UPDATE SUMMARY
solaris
entire
Installed 0.5.11,5.11-0.175.0.0.0.2.0:20111020T143822Z
Proposed 0.5.11,5.11-0.175.0.2.0.3.0:20111201T182924Z
on-nightly
osnet-incorporation
Installed 0.5.11,5.11-0.175.1.0.0.6.18318:20111220T132736Z
Proposed 0.5.11,5.11-0.175.1.0.0.6.18339:20111222T133041Z
...
Shows an update from a previous nightly to a newer nightly, but not the
latest which has been blocked by a pkg freeze, unbundled product, or
some other package. 'entire' is shown because it is the top-level of
the install-hold structure (in this case, 'core-os'). The other
incorporations are hidden even though they are changing because they are
incorporated by the package delivering the 'core-os' install hold. The
Latest version is only shown if the proposed version is older.
REFERENCE MATERIAL
==================
Update summary rules:
* only packages that deliver an install-hold are shown in the
update summary (yes, unbundled packages are essentially ignored)
* the highest-level install-hold package that is changing is shown
* lower-level install-hold packages are shown if they are changing and:
-- the higher-level one is not
-- they are not 'incorporate'd by the higher-level
Example structure of our current install-holds:
core-os ('entire')
...
.osnet ('osnet-incorporation')
.ips ('ips-incorporation')
...
Related bug:
735 install/image-update/uninstall -n uninformative
http://defect.opensolaris.org/bz/show_bug.cgi?id=735
Feedback appreciated,
-Shawn
_______________________________________________
pkg-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/pkg-discuss