| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package cipd | 5 package local |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "archive/zip" | 8 "archive/zip" |
| 9 "crypto/sha1" | 9 "crypto/sha1" |
| 10 "encoding/hex" | 10 "encoding/hex" |
| 11 "fmt" | 11 "fmt" |
| 12 "io" | 12 "io" |
| 13 "io/ioutil" | 13 "io/ioutil" |
| 14 "os" | 14 "os" |
| 15 |
| 16 "infra/tools/cipd/common" |
| 15 ) | 17 ) |
| 16 | 18 |
| 17 // PackageInstance represents a binary package file. | 19 // PackageInstance represents a binary package file. |
| 18 type PackageInstance interface { | 20 type PackageInstance interface { |
| 19 // Close shuts down the package and its data provider. | 21 // Close shuts down the package and its data provider. |
| 20 Close() error | 22 Close() error |
| 21 » // PackageName returns package name, as defined in the manifest. | 23 » // Pin identifies package name and concreted package instance ID of this
package file. |
| 22 » PackageName() string | 24 » Pin() common.Pin |
| 23 » // InstanceID returns id that identifies particular built of the package
. It's a hash of the package data. | |
| 24 » InstanceID() string | |
| 25 // Files returns a list of files inside the package. | 25 // Files returns a list of files inside the package. |
| 26 Files() []File | 26 Files() []File |
| 27 // DataReader returns reader that reads raw package data. | 27 // DataReader returns reader that reads raw package data. |
| 28 DataReader() io.ReadSeeker | 28 DataReader() io.ReadSeeker |
| 29 } | 29 } |
| 30 | 30 |
| 31 // OpenInstance verifies package SHA1 hash (instanceID if not empty string) and | 31 // OpenInstance verifies package SHA1 hash (instanceID if not empty string) and |
| 32 // prepares a package instance for extraction. If the call succeeds, | 32 // prepares a package instance for extraction. If the call succeeds, |
| 33 // PackageInstance takes ownership of io.ReadSeeker. If it also implements | 33 // PackageInstance takes ownership of io.ReadSeeker. If it also implements |
| 34 // io.Closer, it will be closed when package.Close() is called. If an error is | 34 // io.Closer, it will be closed when package.Close() is called. If an error is |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 inst.data = nil | 179 inst.data = nil |
| 180 } | 180 } |
| 181 inst.dataSize = 0 | 181 inst.dataSize = 0 |
| 182 inst.instanceID = "" | 182 inst.instanceID = "" |
| 183 inst.zip = nil | 183 inst.zip = nil |
| 184 inst.files = []File{} | 184 inst.files = []File{} |
| 185 inst.manifest = Manifest{} | 185 inst.manifest = Manifest{} |
| 186 return nil | 186 return nil |
| 187 } | 187 } |
| 188 | 188 |
| 189 func (inst *packageInstance) InstanceID() string { return inst.instanceID
} | 189 func (inst *packageInstance) Pin() common.Pin { |
| 190 func (inst *packageInstance) PackageName() string { return inst.manifest.P
ackageName } | 190 » return common.Pin{ |
| 191 » » PackageName: inst.manifest.PackageName, |
| 192 » » InstanceID: inst.instanceID, |
| 193 » } |
| 194 } |
| 195 |
| 191 func (inst *packageInstance) Files() []File { return inst.files } | 196 func (inst *packageInstance) Files() []File { return inst.files } |
| 192 func (inst *packageInstance) DataReader() io.ReadSeeker { return inst.data } | 197 func (inst *packageInstance) DataReader() io.ReadSeeker { return inst.data } |
| 193 | 198 |
| 194 //////////////////////////////////////////////////////////////////////////////// | 199 //////////////////////////////////////////////////////////////////////////////// |
| 195 // Utilities. | 200 // Utilities. |
| 196 | 201 |
| 197 // readManifestFile decodes manifest file zipped inside the package. | 202 // readManifestFile decodes manifest file zipped inside the package. |
| 198 func readManifestFile(f File) (Manifest, error) { | 203 func readManifestFile(f File) (Manifest, error) { |
| 199 r, err := f.Open() | 204 r, err := f.Open() |
| 200 if err != nil { | 205 if err != nil { |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 r io.ReadSeeker | 265 r io.ReadSeeker |
| 261 } | 266 } |
| 262 | 267 |
| 263 func (r *readerAt) ReadAt(data []byte, off int64) (int, error) { | 268 func (r *readerAt) ReadAt(data []byte, off int64) (int, error) { |
| 264 _, err := r.r.Seek(off, os.SEEK_SET) | 269 _, err := r.r.Seek(off, os.SEEK_SET) |
| 265 if err != nil { | 270 if err != nil { |
| 266 return 0, err | 271 return 0, err |
| 267 } | 272 } |
| 268 return r.r.Read(data) | 273 return r.r.Read(data) |
| 269 } | 274 } |
| OLD | NEW |