MCPcopy Create free account
hub / github.com/aptly-dev/aptly / GetContentsFromDeb

Function GetContentsFromDeb

deb/deb.go:151–231  ·  view source on GitHub ↗

GetContentsFromDeb returns list of files installed by .deb package

(file io.Reader, packageFile string)

Source from the content-addressed store, hash-verified

149
150// GetContentsFromDeb returns list of files installed by .deb package
151func GetContentsFromDeb(file io.Reader, packageFile string) ([]string, error) {
152 library := ar.NewReader(file)
153 for {
154 header, err := library.Next()
155 if err == io.EOF {
156 return nil, fmt.Errorf("unable to find data.tar.* part in %s", packageFile)
157 }
158 if err != nil {
159 return nil, errors.Wrapf(err, "unable to read .deb archive from %s", packageFile)
160 }
161
162 if strings.HasPrefix(header.Name, "data.tar") {
163 bufReader := bufio.NewReader(library)
164 signature, err := bufReader.Peek(270)
165
166 var isTar bool
167 if err == nil {
168 isTar = matchers.Tar(signature)
169 }
170
171 var tarInput io.Reader
172
173 switch header.Name {
174 case "data.tar":
175 tarInput = bufReader
176 case "data.tar.gz":
177 if isTar {
178 tarInput = bufReader
179 } else {
180 ungzip, err := gzip.NewReader(bufReader)
181 if err != nil {
182 return nil, errors.Wrapf(err, "unable to ungzip data.tar.gz from %s", packageFile)
183 }
184 defer func() { _ = ungzip.Close() }()
185 tarInput = ungzip
186 }
187 case "data.tar.bz2":
188 tarInput = bzip2.NewReader(bufReader)
189 case "data.tar.xz":
190 unxz, err := xz.NewReader(bufReader)
191 if err != nil {
192 return nil, errors.Wrapf(err, "unable to unxz data.tar.xz from %s", packageFile)
193 }
194 defer func() { _ = unxz.Close() }()
195 tarInput = unxz
196 case "data.tar.lzma":
197 unlzma := lzma.NewReader(bufReader)
198 defer func() { _ = unlzma.Close() }()
199 tarInput = unlzma
200 case "data.tar.zst":
201 unzstd, err := zstd.NewReader(bufReader)
202 if err != nil {
203 return nil, errors.Wrapf(err, "unable to unzstd %s from %s", header.Name, packageFile)
204 }
205 defer unzstd.Close()
206 tarInput = unzstd
207 default:
208 return nil, fmt.Errorf("unsupported tar compression in %s: %s", packageFile, header.Name)

Callers 2

CalculateContentsMethod · 0.85

Calls 2

HasPrefixMethod · 0.65
CloseMethod · 0.65

Tested by 1