• Joe Tsai's avatar
    archive/tar: support reporting and selecting the format · 9d3d3706
    Joe Tsai authored
    The Reader and Writer are now at feature parity,
    meaning that everything that can be parsed by the Reader,
    can also be composed by the Writer.
    
    This position enables us to support selection of the format
    in a backwards compatible way, since it ensures that everything
    that can be read can also be round-trip written.
    
    As such, we add the following new API:
        type Format int
                const FormatUnknown Format = 0 ...
        type Header struct { ...; Format Format }
    
    The new Header.Format field is populated by the Reader on the
    best guess on what the format is. Note that the Reader is very liberal
    in what it permits, so a hybrid TAR file using aspects of multiple
    formats can still be decoded, but will be reported as FormatUnknown.
    
    Even though Reader has full support for V7 and basic support for STAR,
    it will still report those formats as unknown (and the constants for
    those formats are not even exported). The reasons for this is because
    the Writer has no support for V7 or STAR. Leaving it as unknown allows
    the Writer to choose a format usually USTAR or GNU that can encode
    the equivalent Header.
    
    When writing, the Header.allowedFormats will take the Format field
    into consideration if it is a known format.
    
    Fixes #18710
    
    Change-Id: I00980c475d067c6969d3414e1ff0224fdd89cd49
    Reviewed-on: https://go-review.googlesource.com/58230
    Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    9d3d3706