diffmask -- a clean package.unmask handling helper


diffmask should be called with one of the following actions:

  • -a or --add to unmask one or more packages passed as arguments,
  • -d or --delete to delete an unmask from package.unmask file,
  • -u or --update to try to sync unmasks with package.mask files,
  • -v or --vimdiff in order to vimdiff a merged package.mask file
    with the package.unmask file.

All of them can be combined with --unmask-file specifying an alternate package.unmask file location. If that option is not specified, diffmask defaults to either using /etc/portage/package.unmask or /etc/portage/package.unmask/diffmask if the former is a directory.

The add action

When the add action is used, diffmask uses the Portage API to find masked packages matching the passed atoms. If a particular matching package is masked using package.mask (and package.mask only), diffmask tries to match it with existing package.mask entry and copies that entry into your package.unmask file.

Thus, if you would like to try development snapshots of Opera, you'd call:

diffmask -a opera

If you would like diffmask to unmask a package which is masked both using package.mask and because of missing keywords, you need to add it to your package.keywords first, e.g. using:

flagedit foo -- '**'

The delete action

The delete action is simply a reverse of add. It takes any amount of package atoms, matches them against visible packages in portdb and tries to find a matching mask entry in package.unmask.

If you'd like to remove the entry you've added before, you can type:

diffmask -d opera

The update action

The update action is supposed to help keeping a clean and up-to-date package.unmask file using various package.mask files. It assumes that each entry in the former file is supposed to correspond to a similar entry in one of the package.mask files.

Thus, it tries to match all of the package.unmask file entries with an entry in package.mask file. If a match occurs, the package.unmask entry is updated as necessary. Otherwise, it is removed.

In other words, if you have unmasked the development snapshots of Opera, and the package maintainer has added a new snapshot and added it to the masking entry, you call:

diffmask -u

And the new version should be unmasked as well. Feel free to call that from within your postsync.d.

Please note, however, that the update action is going to remove all unmatched entries. This is required to remove outdated unmask entries (e.g. when a package was masked for testing and is no longer masked). If you'd like to keep an additional (unmatching) package.unmask entries, please make your /etc/portage/package.unmask a directory and keep them in a file different than diffmask, e.g.:

mv /etc/portage/package.unmask /tmp/custom-unmasks mkdir /etc/portage/package.unmask mv /tmp/custom-unmasks /etc/portage/package.unmask/

The vimdiff action

The vimdiff action merges all package.mask files applying at the moment to a temporary file and calls vimdiff to compare-edit it with your package.unmask file.

<!-- vim:se syn=markdown : -->