Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Packed-refs v2 Part IV: abstract some parts of the v1 file format #26

Closed
wants to merge 4 commits into from

Commits on Nov 3, 2022

  1. refs: extract packfile format to new file

    In preparation for adding a new packed-refs file format, extract all
    code from refs/packed-backend.c that involves knowledge of the plaintext
    file format. This includes any parsing logic that cares about the
    header, plaintext lines of the form "<oid> <ref>" or "^<peeled>", and
    the error messages when there is an issue in the file. This also
    includes the writing logic that writes the header or the individual
    references.
    
    Future changes will perform more refactoring to abstract away more of
    the writing process to be more generic, but this is enough of a chunk of
    code movement.
    
    Signed-off-by: Derrick Stolee <derrickstolee@github.com>
    derrickstolee committed Nov 3, 2022
    Configuration menu
    Copy the full SHA
    a171a84 View commit details
    Browse the repository at this point in the history
  2. packed-backend: extract add_write_error()

    The write_with_updates() method uses a write_error label to jump to code
    that adds an error message before exiting with an error. This appears
    both when the packed-refs file header is written, but also when a ref
    line is written to the packed-refs file.
    
    A future change will abstract the loop that writes the refs out of
    write_with_updates(), making the goto an inconvenient pattern. For now,
    remove the distinction between "goto write_error" and "goto error" by
    adding the message in-line using the new static method
    add_write_error(). This is functionally equivalent, but will make the
    next step easier.
    
    Signed-off-by: Derrick Stolee <derrickstolee@github.com>
    derrickstolee committed Nov 3, 2022
    Configuration menu
    Copy the full SHA
    f141d85 View commit details
    Browse the repository at this point in the history
  3. packed-backend: extract iterator/updates merge

    TBD
    
    Signed-off-by: Derrick Stolee <derrickstolee@github.com>
    derrickstolee committed Nov 3, 2022
    Configuration menu
    Copy the full SHA
    cca445c View commit details
    Browse the repository at this point in the history
  4. packed-backend: create abstraction for writing refs

    The packed-refs file is a plaintext file format that starts with a
    header line, then each ref is given as one or two lines (two if there is
    a peeled value). These lines are written as part of a sequence of
    updates which are merged with the existing ref iterator in
    merge_iterator_and_updates(). That method is currently tied directly to
    write_packed_entry_v1().
    
    When creating a new version of the packed-file format, it would be
    valuable to use this merging logic in an identical way. Create a new
    function pointer type, write_ref_fn, and use that type in
    merge_iterator_and_updates().
    
    Notably, the function pointer type no longer depends on a FILE pointer,
    but instead takes an arbitrary "void *write_data" parameter. This
    flexibility will be critical in the future, since the planned v2 format
    will use the chunk-format API and need a more complicated structure than
    the output FILE.
    
    Signed-off-by: Derrick Stolee <derrickstolee@github.com>
    derrickstolee committed Nov 3, 2022
    Configuration menu
    Copy the full SHA
    a3819f6 View commit details
    Browse the repository at this point in the history