From f7c1e461e6ec1919f304d43f098b36aac203adc7 Mon Sep 17 00:00:00 2001 From: Alexander Lazarenko Date: Sat, 10 May 2025 01:23:36 +0300 Subject: [PATCH] Refactor snapshot methods to use active directory context Updated `SaveSnapshot` and `RestoreSnapshot` methods to reference the active directory via `BlobStore`. Introduced `RestoreSnapshotToDir` for granular restore operations. Additionally, updated dependencies in `go.mod` to their latest versions for compatibility and maintenance. --- api.go | 34 +++++++++++++++++++++++++++++----- go.mod | 10 +++++----- go.sum | 10 ++++++++++ 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/api.go b/api.go index 53515d2..17201a7 100644 --- a/api.go +++ b/api.go @@ -98,7 +98,7 @@ func New(options AgateOptions) (*Agate, error) { }, nil } -// SaveSnapshot creates a new snapshot from the current state of the work directory. +// SaveSnapshot creates a new snapshot from the current state of the active directory. // If parentID is provided, it will be set as the parent of the new snapshot. // Returns the ID of the created snapshot. func (a *Agate) SaveSnapshot(ctx context.Context, name string, parentID string) (string, error) { @@ -110,7 +110,7 @@ func (a *Agate) SaveSnapshot(ctx context.Context, name string, parentID string) } // Create the snapshot - snapshot, err := a.manager.CreateSnapshot(ctx, a.options.WorkDir, name, parentID) + snapshot, err := a.manager.CreateSnapshot(ctx, a.options.BlobStore.GetActiveDir(), name, parentID) if err != nil { return "", fmt.Errorf("failed to create snapshot: %w", err) } @@ -125,7 +125,7 @@ func (a *Agate) SaveSnapshot(ctx context.Context, name string, parentID string) return snapshot.ID, nil } -// RestoreSnapshot extracts a snapshot to the work directory. +// RestoreSnapshot extracts a snapshot to the active directory. func (a *Agate) RestoreSnapshot(ctx context.Context, snapshotID string) error { // Call CloseFunc if provided if a.options.CloseFunc != nil { @@ -135,13 +135,37 @@ func (a *Agate) RestoreSnapshot(ctx context.Context, snapshotID string) error { } // Extract the snapshot - if err := a.manager.ExtractSnapshot(ctx, snapshotID, a.options.WorkDir); err != nil { + if err := a.manager.ExtractSnapshot(ctx, snapshotID, a.options.BlobStore.GetActiveDir()); err != nil { return fmt.Errorf("failed to extract snapshot: %w", err) } // Call OpenFunc if provided if a.options.OpenFunc != nil { - if err := a.options.OpenFunc(a.options.WorkDir); err != nil { + if err := a.options.OpenFunc(a.options.BlobStore.GetActiveDir()); err != nil { + return fmt.Errorf("failed to open resources after restore: %w", err) + } + } + + return nil +} + +// RestoreSnapshot extracts a snapshot to the directory. +func (a *Agate) RestoreSnapshotToDir(ctx context.Context, snapshotID string, dir string) error { + // Call CloseFunc if provided + if a.options.CloseFunc != nil { + if err := a.options.CloseFunc(); err != nil { + return fmt.Errorf("failed to close resources before restore: %w", err) + } + } + + // Extract the snapshot + if err := a.manager.ExtractSnapshot(ctx, snapshotID, dir); err != nil { + return fmt.Errorf("failed to extract snapshot: %w", err) + } + + // Call OpenFunc if provided + if a.options.OpenFunc != nil { + if err := a.options.OpenFunc(dir); err != nil { return fmt.Errorf("failed to open resources after restore: %w", err) } } diff --git a/go.mod b/go.mod index 671f209..9dc2571 100644 --- a/go.mod +++ b/go.mod @@ -6,14 +6,14 @@ require ( github.com/google/uuid v1.6.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 github.com/mattn/go-sqlite3 v1.14.28 - google.golang.org/genproto/googleapis/api v0.0.0-20250422160041-2d3770c4ea7f + google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 google.golang.org/grpc v1.72.0 google.golang.org/protobuf v1.36.6 ) require ( - golang.org/x/net v0.39.0 // indirect - golang.org/x/sys v0.32.0 // indirect - golang.org/x/text v0.24.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250422160041-2d3770c4ea7f // indirect + golang.org/x/net v0.40.0 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/text v0.25.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 // indirect ) diff --git a/go.sum b/go.sum index 1224fcb..01a3e5c 100644 --- a/go.sum +++ b/go.sum @@ -26,14 +26,24 @@ go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= google.golang.org/genproto/googleapis/api v0.0.0-20250422160041-2d3770c4ea7f h1:tjZsroqekhC63+WMqzmWyW5Twj/ZfR5HAlpd5YQ1Vs0= google.golang.org/genproto/googleapis/api v0.0.0-20250422160041-2d3770c4ea7f/go.mod h1:Cd8IzgPo5Akum2c9R6FsXNaZbH3Jpa2gpHlW89FqlyQ= +google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 h1:vPV0tzlsK6EzEDHNNH5sa7Hs9bd7iXR7B1tSiPepkV0= +google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:pKLAc5OolXC3ViWGI62vvC0n10CpwAtRcTNCFwTKBEw= google.golang.org/genproto/googleapis/rpc v0.0.0-20250422160041-2d3770c4ea7f h1:N/PrbTw4kdkqNRzVfWPrBekzLuarFREcbFOiOLkXon4= google.golang.org/genproto/googleapis/rpc v0.0.0-20250422160041-2d3770c4ea7f/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 h1:IqsN8hx+lWLqlN+Sc3DoMy/watjofWiU8sRFgQ8fhKM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM= google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=