// given a Suite, create a new Package Writer, configured with // the appropriate Hashing, and targeting a new file blob in the // underlying blobstore. func newIndexWriter(suite *Suite) (*IndexWriter, error) { handle, err := suite.archive.Store.Create() if err != nil { return nil, err } writer, hashers, err := getHashers(suite) if err != nil { return nil, err } encoder, err := control.NewEncoder(io.MultiWriter(writer, handle)) if err != nil { handle.Close() return nil, err } return &IndexWriter{ archive: suite.archive, closer: handle.Close, encoder: encoder, handle: handle, hashers: hashers, }, nil }
// Given a control.Marshal'able object, encode it to the blobstore, while // also clearsigning the data. func (a Archive) encodeClearsigned(data interface{}) (*blobstore.Object, error) { if a.signingKey == nil { return nil, fmt.Errorf("No signing key loaded") } fd, err := a.Store.Create() if err != nil { return nil, err } defer fd.Close() wc, err := clearsign.Encode(fd, a.signingKey.PrivateKey, &packet.Config{ DefaultHash: crypto.SHA512, }) if err != nil { return nil, err } encoder, err := control.NewEncoder(wc) if err != nil { return nil, err } if err := encoder.Encode(data); err != nil { return nil, err } if err := wc.Close(); err != nil { return nil, err } return a.Store.Commit(*fd) }
func (ce FlagsConfigEntry) String() string { buf := &bytes.Buffer{} e, err := control.NewEncoder(buf) if err == nil { err = e.Encode(&ce) if err == nil { return buf.String() } } return "" }
// Encode a given control.Marshal'able object into the Blobstore, and return // a handle to its object. // // The optinal argument `tap` will be written to as the object gets sent into // the blobstore. This may be useful if you wish to have a copy of the data // going into the store. func (a Archive) encode(data interface{}, tap io.Writer) (*blobstore.Object, error) { fd, err := a.Store.Create() if err != nil { return nil, err } var writer io.Writer = fd if tap != nil { writer = io.MultiWriter(fd, tap) } encoder, err := control.NewEncoder(writer) if err != nil { return nil, err } if err := encoder.Encode(data); err != nil { return nil, err } return a.Store.Commit(*fd) }