func maybeDecompress(rs io.ReadSeeker) (io.Reader, error) { // TODO(jonboulle): this is a bit redundant with detectValType typ, err := aci.DetectFileType(rs) if err != nil { return nil, err } if _, err := rs.Seek(0, 0); err != nil { return nil, err } var r io.Reader switch typ { case aci.TypeGzip: r, err = gzip.NewReader(rs) if err != nil { return nil, fmt.Errorf("error reading gzip: %v", err) } case aci.TypeBzip2: r = bzip2.NewReader(rs) case aci.TypeXz: r = aci.XzReader(rs) case aci.TypeTar: r = rs case aci.TypeUnknown: return nil, errors.New("unknown filetype") default: // should never happen panic(fmt.Sprintf("bad type returned from DetectFileType: %v", typ)) } return r, nil }
func decompress(rs io.Reader, typ aci.FileType) (io.Reader, error) { var ( dr io.Reader err error ) switch typ { case aci.TypeGzip: dr, err = gzip.NewReader(rs) if err != nil { return nil, err } case aci.TypeBzip2: dr = bzip2.NewReader(rs) case aci.TypeXz: dr = aci.XzReader(rs) case aci.TypeTar: dr = rs case aci.TypeUnknown: return nil, errors.New("error: unknown image filetype") default: return nil, errors.New("no type returned from DetectFileType?") } return dr, nil }