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

Reply via email to