Adds two new flags to make_incremental_zucchini.py:
* --generate-hashes: writes a hashes.json file alongside manifest.json,
keyed by dest_mar with {from_mar_files: {rel_path: sha256}, to_mar_files:
{rel_path: sha256}} for every file in each from-mar and the to-mar.
* --patch-cache-dir: loads a hashes.json from the given directory, extracts
the matching cached partial mar for each from-mar processed, and short-
circuits the per-file diff path when both the from and to sha256 hashes
match a cache entry (copies {rel_path}.patch or {rel_path} out of the
extracted cached mar and writes the same manifest line). Any miss falls
back silently to the existing zucchini path with an INFO log.
get_hash gains an algo="sha512" parameter so the same helper covers both
the existing sha512 mar-level digests and the new per-file sha256 hashes.
Adds unit tests at tools/update-packaging/test/ covering _hash_dir and the
_maybe_use_cached_file happy paths plus all miss paths.
Differential Revision: https://phabricator.services.mozilla.com/D297891
This directory contains a tool for generating update packages for the update system described here: http://wiki.mozilla.org/Software_Update