refactored Repository API

This commit is contained in:
Jarek Kowalski
2017-09-15 18:35:27 -07:00
parent 91e43b6842
commit b5a7d05adf
17 changed files with 97 additions and 97 deletions

View File

@@ -24,7 +24,7 @@ func runCatCommand(context *kingpin.ParseContext) error {
if err != nil {
return err
}
r, err := rep.Open(oid)
r, err := rep.Objects.Open(oid)
if err != nil {
return err
}

View File

@@ -18,7 +18,7 @@ func init() {
func listMetadataItems(context *kingpin.ParseContext) error {
rep := mustOpenRepository(nil)
entries, err := rep.ListMetadata(*metadataListPrefix)
entries, err := rep.Metadata.List(*metadataListPrefix)
if err != nil {
return err
}

View File

@@ -14,5 +14,5 @@ func init() {
func removeMetadataItem(context *kingpin.ParseContext) error {
rep := mustOpenRepository(nil)
return rep.RemoveMany(*metadataRemoveItems)
return rep.Metadata.RemoveMany(*metadataRemoveItems)
}

View File

@@ -22,7 +22,7 @@ func init() {
func showMetadataObject(context *kingpin.ParseContext) error {
rep := mustOpenRepository(nil)
b, err := rep.MetadataManager.GetMetadata(*metadataShowID)
b, err := rep.Metadata.GetMetadata(*metadataShowID)
if err != nil {
return err
}

View File

@@ -32,7 +32,7 @@ func runMountCommand(context *kingpin.ParseContext) error {
for {
select {
case <-time.After(*mountCacheRefreshInterval):
rep.RefreshCache()
rep.Metadata.RefreshCache()
// TODO - cancel the loop perhaps?
}
}

View File

@@ -121,7 +121,7 @@ type cleanupContext struct {
}
func findAliveBlocks(ctx *cleanupContext, wi *cleanupWorkItem) error {
blks, err := ctx.repo.GetStorageBlocks(wi.oid)
blks, err := ctx.repo.Objects.GetStorageBlocks(wi.oid)
if err != nil {
return err
}

View File

@@ -47,7 +47,7 @@ func runShowCommand(context *kingpin.ParseContext) error {
func showObject(r *repo.Repository, oid repo.ObjectID) error {
var rd io.ReadCloser
rd, err := r.Open(oid)
rd, err := r.Objects.Open(oid)
if err != nil {
return err
}

View File

@@ -15,7 +15,7 @@ func runOptimizeCommand(context *kingpin.ParseContext) error {
rep := mustOpenRepository(nil)
defer rep.Close()
return rep.Optimize(time.Now().Add(-*optimizeMinAge))
return rep.Objects.Optimize(time.Now().Add(-*optimizeMinAge))
}
func init() {

View File

@@ -208,7 +208,7 @@ func runExpireCommand(context *kingpin.ParseContext) error {
}
if *snapshotExpireDelete == "yes" {
fmt.Fprintf(os.Stderr, "Deleting %v snapshots...\n", len(toDelete))
if err := rep.RemoveMany(toDelete); err != nil {
if err := rep.Metadata.RemoveMany(toDelete); err != nil {
return err
}
} else {

View File

@@ -87,7 +87,7 @@ func Connect(ctx context.Context, configFile string, st blob.Storage, creds auth
return err
}
cfg, err := r.connectionConfiguration()
cfg, err := r.Metadata.connectionConfiguration()
if err != nil {
return err
}
@@ -130,9 +130,9 @@ func connect(ctx context.Context, st blob.Storage, creds auth.Credentials, optio
}
return &Repository{
ObjectManager: om,
MetadataManager: mm,
Storage: st,
Objects: om,
Metadata: mm,
Storage: st,
}, nil
}

View File

@@ -66,8 +66,8 @@ type MetadataManager struct {
authData []byte // additional data to authenticate
}
// PutMetadata saves the specified metadata content under a provided name.
func (mm *MetadataManager) PutMetadata(itemID string, content []byte) error {
// Put saves the specified metadata content under a provided name.
func (mm *MetadataManager) Put(itemID string, content []byte) error {
if err := checkReservedName(itemID); err != nil {
return err
}
@@ -139,9 +139,9 @@ func (mm *MetadataManager) GetMetadata(itemID string) ([]byte, error) {
return mm.readEncryptedBlock(itemID)
}
// MultiGetMetadata gets the contents of a specified multiple metadata items efficiently.
// MultiGet gets the contents of a specified multiple metadata items efficiently.
// The results are returned as a map, with items that are not found not present in the map.
func (mm *MetadataManager) MultiGetMetadata(itemIDs []string) (map[string][]byte, error) {
func (mm *MetadataManager) MultiGet(itemIDs []string) (map[string][]byte, error) {
type singleReadResult struct {
id string
contents []byte
@@ -205,19 +205,19 @@ func (mm *MetadataManager) putJSON(id string, content interface{}) error {
return mm.writeEncryptedBlock(id, j)
}
// ListMetadata returns the list of metadata items matching the specified prefix.
func (mm *MetadataManager) ListMetadata(prefix string) ([]string, error) {
// List returns the list of metadata items matching the specified prefix.
func (mm *MetadataManager) List(prefix string) ([]string, error) {
return mm.cache.ListBlocks(prefix)
}
// ListMetadataContents retrieves metadata contents for all items starting with a given prefix.
func (mm *MetadataManager) ListMetadataContents(prefix string) (map[string][]byte, error) {
itemIDs, err := mm.ListMetadata(prefix)
// ListContents retrieves metadata contents for all items starting with a given prefix.
func (mm *MetadataManager) ListContents(prefix string) (map[string][]byte, error) {
itemIDs, err := mm.List(prefix)
if err != nil {
return nil, err
}
return mm.MultiGetMetadata(itemIDs)
return mm.MultiGet(itemIDs)
}
// Config returns a configuration of storage its credentials that's suitable
@@ -236,8 +236,8 @@ func (mm *MetadataManager) connectionConfiguration() (*config.RepositoryConnecti
}, nil
}
// RemoveMetadata removes the specified metadata item.
func (mm *MetadataManager) RemoveMetadata(itemID string) error {
// Remove removes the specified metadata item.
func (mm *MetadataManager) Remove(itemID string) error {
if err := checkReservedName(itemID); err != nil {
return err
}
@@ -258,7 +258,7 @@ func (mm *MetadataManager) RemoveMany(itemIDs []string) error {
defer wg.Done()
for id := range ch {
if err := mm.RemoveMetadata(id); err != nil {
if err := mm.Remove(id); err != nil {
errch <- err
}
}

View File

@@ -62,13 +62,13 @@ func TestMetadataManager(t *testing.T) {
return
}
if err := v.PutMetadata("foo", []byte("test1")); err != nil {
if err := v.Put("foo", []byte("test1")); err != nil {
t.Errorf("error putting: %v", err)
}
if err := v.PutMetadata("bar", []byte("test2")); err != nil {
if err := v.Put("bar", []byte("test2")); err != nil {
t.Errorf("error putting: %v", err)
}
if err := v.PutMetadata("baz", []byte("test3")); err != nil {
if err := v.Put("baz", []byte("test3")); err != nil {
t.Errorf("error putting: %v", err)
}
@@ -87,7 +87,7 @@ func TestMetadataManager(t *testing.T) {
assertReservedName(t, v, formatBlockID)
assertReservedName(t, v, repositoryConfigBlockID)
v.RemoveMetadata("bar")
v.Remove("bar")
assertMetadataItem(t, v, "foo", "test1")
assertMetadataItemNotFound(t, v, "bar")
@@ -100,13 +100,13 @@ func TestMetadataManager(t *testing.T) {
assertMetadataItems(t, v, "baz", []string{"baz"})
assertMetadataItems(t, v, "bazx", nil)
v.RemoveMetadata("baz")
v.Remove("baz")
assertMetadataItemNotFound(t, v, "baz")
v.RemoveMetadata("baz")
v.Remove("baz")
assertMetadataItemNotFound(t, v, "baz")
assertMetadataItem(t, v, "foo", "test1")
if err := v.PutMetadata("baz", []byte("test4")); err != nil {
if err := v.Put("baz", []byte("test4")); err != nil {
t.Errorf("error putting: %v", err)
}
assertMetadataItem(t, v, "baz", "test4")
@@ -146,8 +146,8 @@ func assertMetadataItemNotFound(t *testing.T, v *MetadataManager, itemID string)
func assertReservedName(t *testing.T, v *MetadataManager, itemID string) {
_, err := v.GetMetadata(itemID)
assertReservedNameError(t, "Get", itemID, err)
assertReservedNameError(t, "Put", itemID, v.PutMetadata(itemID, nil))
assertReservedNameError(t, "Remove", itemID, v.RemoveMetadata(itemID))
assertReservedNameError(t, "Put", itemID, v.Put(itemID, nil))
assertReservedNameError(t, "Remove", itemID, v.Remove(itemID))
}
func assertReservedNameError(t *testing.T, method string, itemID string, err error) {
@@ -163,7 +163,7 @@ func assertReservedNameError(t *testing.T, method string, itemID string, err err
func assertMetadataItems(t *testing.T, v *MetadataManager, prefix string, expected []string) {
t.Helper()
res, err := v.ListMetadata(prefix)
res, err := v.List(prefix)
if err != nil {
t.Errorf("error listing items beginning with %v: %v", prefix, err)
}

View File

@@ -69,7 +69,7 @@ func TestWriters(t *testing.T) {
for _, c := range cases {
data, repo := setupTest(t)
writer := repo.NewWriter(WriterOptions{
writer := repo.Objects.NewWriter(WriterOptions{
BlockNamePrefix: "X",
})
@@ -81,7 +81,7 @@ func TestWriters(t *testing.T) {
continue
}
repo.writeBackWG.Wait()
repo.Objects.writeBackWG.Wait()
if !objectIDsEqual(result, c.objectID) {
t.Errorf("incorrect result for %v, expected: %v got: %v %#v", c.data, c.objectID.String(), result.String(), result.BinaryContent)
@@ -109,7 +109,7 @@ func TestWriterCompleteChunkInTwoWrites(t *testing.T) {
_, repo := setupTest(t)
bytes := make([]byte, 100)
writer := repo.NewWriter(WriterOptions{
writer := repo.Objects.NewWriter(WriterOptions{
BlockNamePrefix: "X",
})
writer.Write(bytes[0:50])
@@ -129,7 +129,7 @@ func TestPackingSimple(t *testing.T) {
content2 := "hi, how are you?"
content3 := "thank you!"
if err := repo.BeginPacking(); err != nil {
if err := repo.Objects.BeginPacking(); err != nil {
t.Fatalf("error in BeginPacking: %v", err)
}
@@ -138,9 +138,9 @@ func TestPackingSimple(t *testing.T) {
oid2a := writeObject(t, repo, []byte(content2), "packed-object-2a")
oid2b := writeObject(t, repo, []byte(content2), "packed-object-2b")
repo.FinishPacking()
repo.Objects.FinishPacking()
if err := repo.BeginPacking(); err != nil {
if err := repo.Objects.BeginPacking(); err != nil {
t.Fatalf("error in BeginPacking: %v", err)
}
@@ -151,7 +151,7 @@ func TestPackingSimple(t *testing.T) {
oid2c := writeObject(t, repo, []byte(content2), "packed-object-2c")
oid1c := writeObject(t, repo, []byte(content1), "packed-object-1c")
repo.FinishPacking()
repo.Objects.FinishPacking()
if got, want := oid1a.String(), oid1b.String(); got != want {
t.Errorf("oid1a(%q) != oid1b(%q)", got, want)
@@ -189,7 +189,7 @@ func TestPackingSimple(t *testing.T) {
verify(t, repo, oid2a, []byte(content2), "packed-object-2")
verify(t, repo, oid3a, []byte(content3), "packed-object-3")
if err := repo.Optimize(time.Now().Add(10 * time.Second)); err != nil {
if err := repo.Objects.Optimize(time.Now().Add(10 * time.Second)); err != nil {
t.Errorf("optimize error: %v", err)
}
data, repo = setupTestWithData(t, data, func(n *NewRepositoryOptions) {
@@ -200,7 +200,7 @@ func TestPackingSimple(t *testing.T) {
verify(t, repo, oid2a, []byte(content2), "packed-object-2")
verify(t, repo, oid3a, []byte(content3), "packed-object-3")
if err := repo.Optimize(time.Now().Add(-10 * time.Second)); err != nil {
if err := repo.Objects.Optimize(time.Now().Add(-10 * time.Second)); err != nil {
t.Errorf("optimize error: %v", err)
}
data, repo = setupTestWithData(t, data, func(n *NewRepositoryOptions) {
@@ -217,7 +217,7 @@ func verifyIndirectBlock(t *testing.T, r *Repository, oid ObjectID) {
direct := *oid.Indirect
oid = direct
rd, err := r.Open(direct)
rd, err := r.Objects.Open(direct)
if err != nil {
t.Errorf("unable to open %v: %v", oid.String(), err)
return
@@ -262,7 +262,7 @@ func TestIndirection(t *testing.T) {
contentBytes := make([]byte, c.dataLength)
writer := repo.NewWriter(WriterOptions{})
writer := repo.Objects.NewWriter(WriterOptions{})
writer.Write(contentBytes)
result, err := writer.Result()
if err != nil {
@@ -277,7 +277,7 @@ func TestIndirection(t *testing.T) {
t.Errorf("unexpected block count for %v: %v, expected %v", c.dataLength, got, want)
}
b, err := repo.GetStorageBlocks(result)
b, err := repo.Objects.GetStorageBlocks(result)
if err != nil {
t.Errorf("error getting storage blocks for %q: %v", result, err)
}
@@ -303,7 +303,7 @@ func TestHMAC(t *testing.T) {
_, repo := setupTest(t)
w := repo.NewWriter(WriterOptions{})
w := repo.Objects.NewWriter(WriterOptions{})
w.Write(content)
result, err := w.Result()
if result.String() != "D999732b72ceff665b3f7608411db66a4" {
@@ -340,7 +340,7 @@ func TestReader(t *testing.T) {
continue
}
reader, err := repo.Open(objectID)
reader, err := repo.Objects.Open(objectID)
if err != nil {
t.Errorf("cannot create reader for %v: %v", objectID, err)
continue
@@ -375,7 +375,7 @@ func TestMalformedStoredData(t *testing.T) {
continue
}
reader, err := repo.Open(objectID)
reader, err := repo.Objects.Open(objectID)
if err == nil || reader != nil {
t.Errorf("expected error for %x", c)
}
@@ -389,7 +389,7 @@ func TestReaderStoredBlockNotFound(t *testing.T) {
if err != nil {
t.Errorf("cannot parse object ID: %v", err)
}
reader, err := repo.Open(objectID)
reader, err := repo.Objects.Open(objectID)
if err != blob.ErrBlockNotFound || reader != nil {
t.Errorf("unexpected result: reader: %v err: %v", reader, err)
}
@@ -403,7 +403,7 @@ func TestEndToEndReadAndSeek(t *testing.T) {
randomData := make([]byte, size)
cryptorand.Read(randomData)
writer := repo.NewWriter(WriterOptions{
writer := repo.Objects.NewWriter(WriterOptions{
BlockNamePrefix: "X",
})
writer.Write(randomData)
@@ -429,7 +429,7 @@ func TestEndToEndReadAndSeek(t *testing.T) {
}
func writeObject(t *testing.T, repo *Repository, data []byte, testCaseID string) ObjectID {
w := repo.NewWriter(WriterOptions{})
w := repo.Objects.NewWriter(WriterOptions{})
if _, err := w.Write(data); err != nil {
t.Fatalf("can't write object %q - write failed: %v", testCaseID, err)
@@ -443,7 +443,7 @@ func writeObject(t *testing.T, repo *Repository, data []byte, testCaseID string)
}
func verify(t *testing.T, repo *Repository, objectID ObjectID, expectedData []byte, testCaseID string) {
reader, err := repo.Open(objectID)
reader, err := repo.Objects.Open(objectID)
if err != nil {
t.Errorf("cannot get reader for %v (%v): %v %v", testCaseID, objectID, err, string(debug.Stack()))
return
@@ -523,7 +523,7 @@ func TestFormats(t *testing.T) {
for k, v := range c.oids {
bytesToWrite := []byte(k)
w := repo.NewWriter(WriterOptions{})
w := repo.Objects.NewWriter(WriterOptions{})
w.Write(bytesToWrite)
oid, err := w.Result()
if err != nil {
@@ -533,7 +533,7 @@ func TestFormats(t *testing.T) {
t.Errorf("invalid oid for #%v\ngot:\n%#v\nexpected:\n%#v", caseIndex, oid.String(), v.String())
}
rc, err := repo.Open(oid)
rc, err := repo.Objects.Open(oid)
if err != nil {
t.Errorf("open failed: %v", err)
continue

View File

@@ -6,9 +6,9 @@
// Repository represents storage where both content-addressable and user-addressable data is kept.
type Repository struct {
*ObjectManager
*MetadataManager
Storage blob.Storage
Objects *ObjectManager
Metadata *MetadataManager
Storage blob.Storage
ConfigFile string
CacheDirectory string
@@ -36,27 +36,27 @@ type StatusInfo struct {
// Stats returns repository-wide statistics.
func (r *Repository) Stats() Stats {
return r.ObjectManager.stats
return r.Objects.stats
}
// Status returns a snapshot of repository-wide statistics plus some general information about repository configuration.
func (r *Repository) Status() StatusInfo {
s := StatusInfo{
Stats: r.ObjectManager.stats,
Stats: r.Objects.stats,
MetadataManagerVersion: r.MetadataManager.format.Version,
UniqueID: hex.EncodeToString(r.MetadataManager.format.UniqueID),
MetadataEncryptionAlgorithm: r.MetadataManager.format.EncryptionAlgorithm,
KeyDerivationAlgorithm: r.MetadataManager.format.KeyDerivationAlgorithm,
MetadataManagerVersion: r.Metadata.format.Version,
UniqueID: hex.EncodeToString(r.Metadata.format.UniqueID),
MetadataEncryptionAlgorithm: r.Metadata.format.EncryptionAlgorithm,
KeyDerivationAlgorithm: r.Metadata.format.KeyDerivationAlgorithm,
ObjectManagerVersion: fmt.Sprintf("%v", r.ObjectManager.format.Version),
ObjectFormat: r.ObjectManager.format.ObjectFormat,
Splitter: r.ObjectManager.format.Splitter,
MinBlockSize: r.ObjectManager.format.MinBlockSize,
AvgBlockSize: r.ObjectManager.format.AvgBlockSize,
MaxBlockSize: r.ObjectManager.format.MaxBlockSize,
ObjectManagerVersion: fmt.Sprintf("%v", r.Objects.format.Version),
ObjectFormat: r.Objects.format.ObjectFormat,
Splitter: r.Objects.format.Splitter,
MinBlockSize: r.Objects.format.MinBlockSize,
AvgBlockSize: r.Objects.format.AvgBlockSize,
MaxBlockSize: r.Objects.format.MaxBlockSize,
MaxPackedContentLength: r.ObjectManager.format.MaxPackedContentLength,
MaxPackedContentLength: r.Objects.format.MaxPackedContentLength,
}
if s.Splitter == "" {
@@ -68,7 +68,7 @@ func (r *Repository) Status() StatusInfo {
// Close closes the repository and releases all resources.
func (r *Repository) Close() error {
if err := r.ObjectManager.Close(); err != nil {
if err := r.Objects.Close(); err != nil {
return err
}
if err := r.Storage.Close(); err != nil {
@@ -79,11 +79,11 @@ func (r *Repository) Close() error {
// Flush waits for all in-flight writes to complete.
func (r *Repository) Flush() error {
r.ObjectManager.writeBackWG.Wait()
r.Objects.writeBackWG.Wait()
return nil
}
// ResetStats resets all repository-wide statistics to zero values.
func (r *Repository) ResetStats() {
r.ObjectManager.stats = Stats{}
r.Objects.stats = Stats{}
}

View File

@@ -33,7 +33,7 @@ type Manager struct {
// ListSources lists all snapshot sources.
func (m *Manager) ListSources() ([]*SourceInfo, error) {
names, err := m.repository.ListMetadata(snapshotPrefix)
names, err := m.repository.Metadata.List(snapshotPrefix)
if err != nil {
return nil, err
}
@@ -64,7 +64,7 @@ func (m *Manager) ListSources() ([]*SourceInfo, error) {
// ListSnapshots lists all snapshots for a given source.
func (m *Manager) ListSnapshots(si *SourceInfo) ([]*Manifest, error) {
names, err := m.repository.ListMetadata(m.snapshotIDPrefix(si))
names, err := m.repository.Metadata.List(m.snapshotIDPrefix(si))
if err != nil {
return nil, err
}
@@ -74,7 +74,7 @@ func (m *Manager) ListSnapshots(si *SourceInfo) ([]*Manifest, error) {
// LoadSnapshot loads and parses a snapshot with a given ID.
func (m *Manager) LoadSnapshot(manifestID string) (*Manifest, error) {
b, err := m.repository.GetMetadata(manifestID)
b, err := m.repository.Metadata.GetMetadata(manifestID)
if err != nil {
return nil, fmt.Errorf("error loading previous backup: %v", err)
}
@@ -99,7 +99,7 @@ func (m *Manager) SaveSnapshot(manifest *Manifest) (string, error) {
return "", fmt.Errorf("cannot marshal backup manifest to JSON: %v", err)
}
if err := m.repository.PutMetadata(manifestID, b); err != nil {
if err := m.repository.Metadata.Put(manifestID, b); err != nil {
return "", err
}
@@ -147,7 +147,7 @@ func (m *Manager) ListSnapshotManifests(src *SourceInfo) ([]string, error) {
prefix = m.snapshotIDPrefix(src)
}
return m.repository.ListMetadata(prefix)
return m.repository.Metadata.List(prefix)
}
// GetEffectivePolicy calculates effective snapshot policy for a given source by combining the source-specifc policy (if any)
@@ -228,12 +228,12 @@ func (m *Manager) SavePolicy(p *Policy) error {
return fmt.Errorf("cannot marshal policy to JSON: %v", err)
}
return m.repository.PutMetadata(m.policyID(&p.Source), b)
return m.repository.Metadata.Put(m.policyID(&p.Source), b)
}
// RemovePolicy removes the policy for a given source
func (m *Manager) RemovePolicy(src *SourceInfo) error {
return m.repository.RemoveMetadata(m.policyID(src))
return m.repository.Metadata.Remove(m.policyID(src))
}
// GetPolicy retrieves the Policy for a given source, if defined.
@@ -251,7 +251,7 @@ func (m *Manager) policyID(src *SourceInfo) string {
}
func (m *Manager) getPolicyItem(itemID string) (*Policy, error) {
b, err := m.repository.GetMetadata(itemID)
b, err := m.repository.Metadata.GetMetadata(itemID)
if err == repo.ErrMetadataNotFound {
return nil, ErrPolicyNotFound
}
@@ -270,7 +270,7 @@ func (m *Manager) getPolicyItem(itemID string) (*Policy, error) {
// ListPolicies returns a list of all snapshot policies.
func (m *Manager) ListPolicies() ([]*Policy, error) {
names, err := m.repository.ListMetadata(policyPrefix)
names, err := m.repository.Metadata.List(policyPrefix)
if err != nil {
return nil, err
}
@@ -311,7 +311,7 @@ func (m *Manager) ListPolicies() ([]*Policy, error) {
func NewManager(r *repo.Repository) *Manager {
return &Manager{
r,
r.DeriveKey([]byte("snapshot-id"), 32),
r.DeriveKey([]byte("policyID-id"), 32),
r.Metadata.DeriveKey([]byte("snapshot-id"), 32),
r.Metadata.DeriveKey([]byte("policyID-id"), 32),
}
}

View File

@@ -40,7 +40,7 @@ type repositorySymlink struct {
}
func (rd *repositoryDirectory) Readdir() (fs.Entries, error) {
r, err := rd.repo.Open(rd.metadata.ObjectID)
r, err := rd.repo.Objects.Open(rd.metadata.ObjectID)
if err != nil {
return nil, err
}
@@ -60,7 +60,7 @@ func (rd *repositoryDirectory) Readdir() (fs.Entries, error) {
}
func (rf *repositoryFile) Open() (fs.Reader, error) {
r, err := rf.repo.Open(rf.metadata.ObjectID)
r, err := rf.repo.Objects.Open(rf.metadata.ObjectID)
if err != nil {
return nil, err
}
@@ -69,7 +69,7 @@ func (rf *repositoryFile) Open() (fs.Reader, error) {
}
func (rsl *repositorySymlink) Readlink() (string, error) {
r, err := rsl.repo.Open(rsl.metadata.ObjectID)
r, err := rsl.repo.Objects.Open(rsl.metadata.ObjectID)
if err != nil {
return "", err
}

View File

@@ -91,7 +91,7 @@ func (u *Uploader) uploadFileInternal(f fs.File, relativePath string) (*dir.Entr
}
defer file.Close()
writer := u.repo.NewWriter(repo.WriterOptions{
writer := u.repo.Objects.NewWriter(repo.WriterOptions{
Description: "FILE:" + f.Metadata().Name,
})
defer writer.Close()
@@ -131,7 +131,7 @@ func (u *Uploader) uploadSymlinkInternal(f fs.Symlink, relativePath string) (*di
return nil, 0, fmt.Errorf("unable to read symlink: %v", err)
}
writer := u.repo.NewWriter(repo.WriterOptions{
writer := u.repo.Objects.NewWriter(repo.WriterOptions{
Description: "SYMLINK:" + f.Metadata().Name,
})
defer writer.Close()
@@ -219,11 +219,11 @@ func (u *Uploader) uploadFile(file fs.File) (repo.ObjectID, error) {
func (u *Uploader) uploadDir(dir fs.Directory) (repo.ObjectID, repo.ObjectID, error) {
var err error
if err := u.repo.BeginPacking(); err != nil {
if err := u.repo.Objects.BeginPacking(); err != nil {
return repo.NullObjectID, repo.NullObjectID, err
}
mw := u.repo.NewWriter(repo.WriterOptions{
mw := u.repo.Objects.NewWriter(repo.WriterOptions{
Description: "HASHCACHE:" + dir.Metadata().Name,
BlockNamePrefix: "H",
PackGroup: "HC",
@@ -244,7 +244,7 @@ func (u *Uploader) uploadDir(dir fs.Directory) (repo.ObjectID, repo.ObjectID, er
}
hcid, err := mw.Result()
if err := u.repo.FinishPacking(); err != nil {
if err := u.repo.Objects.FinishPacking(); err != nil {
return repo.NullObjectID, repo.NullObjectID, fmt.Errorf("can't finish packing: %v", err)
}
return oid, hcid, err
@@ -265,7 +265,7 @@ func uploadDirInternal(
return repo.NullObjectID, err
}
writer := u.repo.NewWriter(repo.WriterOptions{
writer := u.repo.Objects.NewWriter(repo.WriterOptions{
Description: "DIR:" + relativePath,
PackGroup: "DIR",
})
@@ -399,7 +399,7 @@ func (u *Uploader) Upload(
u.cacheReader = hashcache.Open(nil)
u.stats = Stats{}
if old != nil {
if r, err := u.repo.Open(old.HashCacheID); err == nil {
if r, err := u.repo.Objects.Open(old.HashCacheID); err == nil {
u.cacheReader = hashcache.Open(r)
}
}