• Samuel Huang's avatar
    [Zucchini] Introduce Ensemble Patching. · 4627b83b
    Samuel Huang authored
    This CL adds ensemble patching (AKA Layer 3 patching) to Zucchini, where
    patches are generated and applied on "old" and "new" archives that
    contain uncompressed executable "elements", which need to be detected
    and matched first.
    - HeuristicEnsembleMatcher performs element detection and matching.
      - Resulting matched "elements" undergo architecture-specific patching
        (AKA Layer 2 patching), but on failure, raw patching (AKA Layer 1
        patching) is used.
    - "Gaps" are contents in archives that are not elements. These use
       raw patching, and are computed separately from element patching to
       reduce peak memory (since these require suffix array of the entire
       "old" archive).
    - In the patch format, "gaps" are represented as "no-op" elements,
      i.e., raw patches without references.
    - This CL focuses on Zucchini-gen, since Zucchini-apply already supports
      Ensemble patch application.
    - After this CL, Zucchini will be equally usable as Courgette.
    
    Bug: 729154
    Change-Id: Id828186cda74885ee6992b17f641e491efe79c40
    Reviewed-on: https://chromium-review.googlesource.com/891489
    Commit-Queue: Samuel Huang <huangs@chromium.org>
    Reviewed-by: default avatarGreg Thompson <grt@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#533734}
    4627b83b
zucchini_gen.cc 20.2 KB