• Show log

    Commit

  • Hash : 89a34828
    Author : Patrick Steinhardt
    Date : 2017-06-16T13:34:43

    diff: implement function to calculate patch ID
    
    The upstream git project provides the ability to calculate a so-called
    patch ID. Quoting from git-patch-id(1):
    
        A "patch ID" is nothing but a sum of SHA-1 of the file diffs
        associated with a patch, with whitespace and line numbers ignored."
    
    Patch IDs can be used to identify two patches which are probably the
    same thing, e.g. when a patch has been cherry-picked to another branch.
    
    This commit implements a new function `git_diff_patchid`, which gets a
    patch and derives an OID from the diff. Note the different terminology
    here: a patch in libgit2 are the differences in a single file and a diff
    can contain multiple patches for different files. The implementation
    matches the upstream implementation and should derive the same OID for
    the same diff. In fact, some code has been directly derived from the
    upstream implementation.
    
    The upstream implementation has two different modes to calculate patch
    IDs, which is the stable and unstable mode. The old way of calculating
    the patch IDs was unstable in a sense that a different ordering the
    diffs was leading to different results. This oversight was fixed in git
    1.9, but as git tries hard to never break existing workflows, the old
    and unstable way is still default. The newer and stable way does not
    care for ordering of the diff hunks, and in fact it is the mode that
    should probably be used today. So right now, we only implement the
    stable way of generating the patch ID.