fix: can't browse snapshots of repos removed and readded under a different name
Release Please / release-please (push) Has been cancelled
Release Preview / call-reusable-release (push) Has been cancelled
Test / test-nix (push) Has been cancelled
Test / test-win (push) Has been cancelled
Update Restic / update-restic-version (push) Has been cancelled

This commit is contained in:
Gareth
2025-11-05 22:58:24 -08:00
parent 11cab856a3
commit 259af2e429
6 changed files with 35 additions and 17 deletions
+6 -6
View File
@@ -529,7 +529,7 @@ func (x *RestoreSnapshotRequest) GetTarget() string {
type ListSnapshotFilesRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"`
RepoGuid string `protobuf:"bytes,1,opt,name=repo_guid,json=repoGuid,proto3" json:"repo_guid,omitempty"`
SnapshotId string `protobuf:"bytes,2,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"`
Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"`
unknownFields protoimpl.UnknownFields
@@ -566,9 +566,9 @@ func (*ListSnapshotFilesRequest) Descriptor() ([]byte, []int) {
return file_v1_service_proto_rawDescGZIP(), []int{7}
}
func (x *ListSnapshotFilesRequest) GetRepoId() string {
func (x *ListSnapshotFilesRequest) GetRepoGuid() string {
if x != nil {
return x.RepoId
return x.RepoGuid
}
return ""
}
@@ -1182,9 +1182,9 @@ const file_v1_service_proto_rawDesc = "" +
"\vsnapshot_id\x18\x02 \x01(\tR\n" +
"snapshotId\x12\x12\n" +
"\x04path\x18\x03 \x01(\tR\x04path\x12\x16\n" +
"\x06target\x18\x04 \x01(\tR\x06target\"h\n" +
"\x18ListSnapshotFilesRequest\x12\x17\n" +
"\arepo_id\x18\x01 \x01(\tR\x06repoId\x12\x1f\n" +
"\x06target\x18\x04 \x01(\tR\x06target\"l\n" +
"\x18ListSnapshotFilesRequest\x12\x1b\n" +
"\trepo_guid\x18\x01 \x01(\tR\brepoGuid\x12\x1f\n" +
"\vsnapshot_id\x18\x02 \x01(\tR\n" +
"snapshotId\x12\x12\n" +
"\x04path\x18\x03 \x01(\tR\x04path\"V\n" +
+13 -1
View File
@@ -305,7 +305,19 @@ func (s *BackrestHandler) ListSnapshots(ctx context.Context, req *connect.Reques
func (s *BackrestHandler) ListSnapshotFiles(ctx context.Context, req *connect.Request[v1.ListSnapshotFilesRequest]) (*connect.Response[v1.ListSnapshotFilesResponse], error) {
query := req.Msg
repo, err := s.orchestrator.GetRepoOrchestrator(query.RepoId)
// Lookup the repo by GUID to handle reimports correctly.
cfg, err := s.config.Get()
if err != nil {
return nil, fmt.Errorf("failed to get config: %w", err)
}
repoCfg := config.FindRepoByGUID(cfg, query.RepoGuid)
if repoCfg == nil {
return nil, fmt.Errorf("repo not found: %q", query.RepoGuid)
}
// Get the orchestrator for the repo if its configuration is available.
repo, err := s.orchestrator.GetRepoOrchestrator(repoCfg.Id)
if err != nil {
return nil, fmt.Errorf("failed to get repo: %w", err)
}
+1 -1
View File
@@ -119,7 +119,7 @@ message RestoreSnapshotRequest {
}
message ListSnapshotFilesRequest {
string repo_id = 1;
string repo_guid = 1;
string snapshot_id = 2;
string path = 3;
}
+3 -3
View File
@@ -21,7 +21,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file v1/service.proto.
*/
export const file_v1_service: GenFile = /*@__PURE__*/
fileDesc("ChB2MS9zZXJ2aWNlLnByb3RvEgJ2MSK/AgoKT3BTZWxlY3RvchILCgNpZHMYASADKAMSGAoLaW5zdGFuY2VfaWQYBiABKAlIAIgBARIkChdvcmlnaW5hbF9pbnN0YW5jZV9rZXlpZBgIIAEoCUgBiAEBEhYKCXJlcG9fZ3VpZBgHIAEoCUgCiAEBEhQKB3BsYW5faWQYAyABKAlIA4gBARIYCgtzbmFwc2hvdF9pZBgEIAEoCUgEiAEBEhQKB2Zsb3dfaWQYBSABKANIBYgBARIWCgltb2Rub19ndGUYCSABKANIBogBAUIOCgxfaW5zdGFuY2VfaWRCGgoYX29yaWdpbmFsX2luc3RhbmNlX2tleWlkQgwKCl9yZXBvX2d1aWRCCgoIX3BsYW5faWRCDgoMX3NuYXBzaG90X2lkQgoKCF9mbG93X2lkQgwKCl9tb2Rub19ndGUiwAEKEURvUmVwb1Rhc2tSZXF1ZXN0Eg8KB3JlcG9faWQYASABKAkSKAoEdGFzaxgCIAEoDjIaLnYxLkRvUmVwb1Rhc2tSZXF1ZXN0LlRhc2sicAoEVGFzaxINCglUQVNLX05PTkUQABIYChRUQVNLX0lOREVYX1NOQVBTSE9UUxABEg4KClRBU0tfUFJVTkUQAhIOCgpUQVNLX0NIRUNLEAMSDgoKVEFTS19TVEFUUxAEEg8KC1RBU0tfVU5MT0NLEAUiTAoTQ2xlYXJIaXN0b3J5UmVxdWVzdBIgCghzZWxlY3RvchgBIAEoCzIOLnYxLk9wU2VsZWN0b3ISEwoLb25seV9mYWlsZWQYAiABKAgiRgoNRm9yZ2V0UmVxdWVzdBIPCgdyZXBvX2lkGAEgASgJEg8KB3BsYW5faWQYAiABKAkSEwoLc25hcHNob3RfaWQYAyABKAkiOAoUTGlzdFNuYXBzaG90c1JlcXVlc3QSDwoHcmVwb19pZBgBIAEoCRIPCgdwbGFuX2lkGAIgASgJIkgKFEdldE9wZXJhdGlvbnNSZXF1ZXN0EiAKCHNlbGVjdG9yGAEgASgLMg4udjEuT3BTZWxlY3RvchIOCgZsYXN0X24YAiABKAMibQoWUmVzdG9yZVNuYXBzaG90UmVxdWVzdBIPCgdwbGFuX2lkGAEgASgJEg8KB3JlcG9faWQYBSABKAkSEwoLc25hcHNob3RfaWQYAiABKAkSDAoEcGF0aBgDIAEoCRIOCgZ0YXJnZXQYBCABKAkiTgoYTGlzdFNuYXBzaG90RmlsZXNSZXF1ZXN0Eg8KB3JlcG9faWQYASABKAkSEwoLc25hcHNob3RfaWQYAiABKAkSDAoEcGF0aBgDIAEoCSJHChlMaXN0U25hcHNob3RGaWxlc1Jlc3BvbnNlEgwKBHBhdGgYASABKAkSHAoHZW50cmllcxgCIAMoCzILLnYxLkxzRW50cnkiHQoOTG9nRGF0YVJlcXVlc3QSCwoDcmVmGAEgASgJIpYBCgdMc0VudHJ5EgwKBG5hbWUYASABKAkSDAoEdHlwZRgCIAEoCRIMCgRwYXRoGAMgASgJEgsKA3VpZBgEIAEoAxILCgNnaWQYBSABKAMSDAoEc2l6ZRgGIAEoAxIMCgRtb2RlGAcgASgDEg0KBW10aW1lGAggASgJEg0KBWF0aW1lGAkgASgJEg0KBWN0aW1lGAogASgJIjUKEVJ1bkNvbW1hbmRSZXF1ZXN0Eg8KB3JlcG9faWQYASABKAkSDwoHY29tbWFuZBgCIAEoCSK1BQoYU3VtbWFyeURhc2hib2FyZFJlc3BvbnNlEjwKDnJlcG9fc3VtbWFyaWVzGAEgAygLMiQudjEuU3VtbWFyeURhc2hib2FyZFJlc3BvbnNlLlN1bW1hcnkSPAoOcGxhbl9zdW1tYXJpZXMYAiADKAsyJC52MS5TdW1tYXJ5RGFzaGJvYXJkUmVzcG9uc2UuU3VtbWFyeRITCgtjb25maWdfcGF0aBgKIAEoCRIRCglkYXRhX3BhdGgYCyABKAka7gIKB1N1bW1hcnkSCgoCaWQYASABKAkSHQoVYmFja3Vwc19mYWlsZWRfMzBkYXlzGAIgASgDEiMKG2JhY2t1cHNfd2FybmluZ19sYXN0XzMwZGF5cxgDIAEoAxIjChtiYWNrdXBzX3N1Y2Nlc3NfbGFzdF8zMGRheXMYBCABKAMSIQoZYnl0ZXNfc2Nhbm5lZF9sYXN0XzMwZGF5cxgFIAEoAxIfChdieXRlc19hZGRlZF9sYXN0XzMwZGF5cxgGIAEoAxIXCg90b3RhbF9zbmFwc2hvdHMYByABKAMSGQoRYnl0ZXNfc2Nhbm5lZF9hdmcYCCABKAMSFwoPYnl0ZXNfYWRkZWRfYXZnGAkgASgDEhsKE25leHRfYmFja3VwX3RpbWVfbXMYCiABKAMSQAoOcmVjZW50X2JhY2t1cHMYCyABKAsyKC52MS5TdW1tYXJ5RGFzaGJvYXJkUmVzcG9uc2UuQmFja3VwQ2hhcnQagwEKC0JhY2t1cENoYXJ0Eg8KB2Zsb3dfaWQYASADKAMSFAoMdGltZXN0YW1wX21zGAIgAygDEhMKC2R1cmF0aW9uX21zGAMgAygDEiMKBnN0YXR1cxgEIAMoDjITLnYxLk9wZXJhdGlvblN0YXR1cxITCgtieXRlc19hZGRlZBgFIAMoAzKnCQoIQmFja3Jlc3QSMQoJR2V0Q29uZmlnEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GgoudjEuQ29uZmlnIgASJQoJU2V0Q29uZmlnEgoudjEuQ29uZmlnGgoudjEuQ29uZmlnIgASLwoPQ2hlY2tSZXBvRXhpc3RzEggudjEuUmVwbxoQLnR5cGVzLkJvb2xWYWx1ZSIAEiEKB0FkZFJlcG8SCC52MS5SZXBvGgoudjEuQ29uZmlnIgASLgoKUmVtb3ZlUmVwbxISLnR5cGVzLlN0cmluZ1ZhbHVlGgoudjEuQ29uZmlnIgASRAoSR2V0T3BlcmF0aW9uRXZlbnRzEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GhIudjEuT3BlcmF0aW9uRXZlbnQiADABEj4KDUdldE9wZXJhdGlvbnMSGC52MS5HZXRPcGVyYXRpb25zUmVxdWVzdBoRLnYxLk9wZXJhdGlvbkxpc3QiABJDCg1MaXN0U25hcHNob3RzEhgudjEuTGlzdFNuYXBzaG90c1JlcXVlc3QaFi52MS5SZXN0aWNTbmFwc2hvdExpc3QiABJSChFMaXN0U25hcHNob3RGaWxlcxIcLnYxLkxpc3RTbmFwc2hvdEZpbGVzUmVxdWVzdBodLnYxLkxpc3RTbmFwc2hvdEZpbGVzUmVzcG9uc2UiABI2CgZCYWNrdXASEi50eXBlcy5TdHJpbmdWYWx1ZRoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIAEj0KCkRvUmVwb1Rhc2sSFS52MS5Eb1JlcG9UYXNrUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIAEjUKBkZvcmdldBIRLnYxLkZvcmdldFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiABI/CgdSZXN0b3JlEhoudjEuUmVzdG9yZVNuYXBzaG90UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIAEjUKBkNhbmNlbBIRLnR5cGVzLkludDY0VmFsdWUaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiABI0CgdHZXRMb2dzEhIudjEuTG9nRGF0YVJlcXVlc3QaES50eXBlcy5CeXRlc1ZhbHVlIgAwARI4CgpSdW5Db21tYW5kEhUudjEuUnVuQ29tbWFuZFJlcXVlc3QaES50eXBlcy5JbnQ2NFZhbHVlIgASOQoOR2V0RG93bmxvYWRVUkwSES50eXBlcy5JbnQ2NFZhbHVlGhIudHlwZXMuU3RyaW5nVmFsdWUiABJBCgxDbGVhckhpc3RvcnkSFy52MS5DbGVhckhpc3RvcnlSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgASOwoQUGF0aEF1dG9jb21wbGV0ZRISLnR5cGVzLlN0cmluZ1ZhbHVlGhEudHlwZXMuU3RyaW5nTGlzdCIAEk0KE0dldFN1bW1hcnlEYXNoYm9hcmQSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaHC52MS5TdW1tYXJ5RGFzaGJvYXJkUmVzcG9uc2UiAEIsWipnaXRodWIuY29tL2dhcmV0aGdlb3JnZS9iYWNrcmVzdC9nZW4vZ28vdjFiBnByb3RvMw", [file_v1_config, file_v1_restic, file_v1_operations, file_types_value, file_google_protobuf_empty, file_google_api_annotations]);
fileDesc("ChB2MS9zZXJ2aWNlLnByb3RvEgJ2MSK/AgoKT3BTZWxlY3RvchILCgNpZHMYASADKAMSGAoLaW5zdGFuY2VfaWQYBiABKAlIAIgBARIkChdvcmlnaW5hbF9pbnN0YW5jZV9rZXlpZBgIIAEoCUgBiAEBEhYKCXJlcG9fZ3VpZBgHIAEoCUgCiAEBEhQKB3BsYW5faWQYAyABKAlIA4gBARIYCgtzbmFwc2hvdF9pZBgEIAEoCUgEiAEBEhQKB2Zsb3dfaWQYBSABKANIBYgBARIWCgltb2Rub19ndGUYCSABKANIBogBAUIOCgxfaW5zdGFuY2VfaWRCGgoYX29yaWdpbmFsX2luc3RhbmNlX2tleWlkQgwKCl9yZXBvX2d1aWRCCgoIX3BsYW5faWRCDgoMX3NuYXBzaG90X2lkQgoKCF9mbG93X2lkQgwKCl9tb2Rub19ndGUiwAEKEURvUmVwb1Rhc2tSZXF1ZXN0Eg8KB3JlcG9faWQYASABKAkSKAoEdGFzaxgCIAEoDjIaLnYxLkRvUmVwb1Rhc2tSZXF1ZXN0LlRhc2sicAoEVGFzaxINCglUQVNLX05PTkUQABIYChRUQVNLX0lOREVYX1NOQVBTSE9UUxABEg4KClRBU0tfUFJVTkUQAhIOCgpUQVNLX0NIRUNLEAMSDgoKVEFTS19TVEFUUxAEEg8KC1RBU0tfVU5MT0NLEAUiTAoTQ2xlYXJIaXN0b3J5UmVxdWVzdBIgCghzZWxlY3RvchgBIAEoCzIOLnYxLk9wU2VsZWN0b3ISEwoLb25seV9mYWlsZWQYAiABKAgiRgoNRm9yZ2V0UmVxdWVzdBIPCgdyZXBvX2lkGAEgASgJEg8KB3BsYW5faWQYAiABKAkSEwoLc25hcHNob3RfaWQYAyABKAkiOAoUTGlzdFNuYXBzaG90c1JlcXVlc3QSDwoHcmVwb19pZBgBIAEoCRIPCgdwbGFuX2lkGAIgASgJIkgKFEdldE9wZXJhdGlvbnNSZXF1ZXN0EiAKCHNlbGVjdG9yGAEgASgLMg4udjEuT3BTZWxlY3RvchIOCgZsYXN0X24YAiABKAMibQoWUmVzdG9yZVNuYXBzaG90UmVxdWVzdBIPCgdwbGFuX2lkGAEgASgJEg8KB3JlcG9faWQYBSABKAkSEwoLc25hcHNob3RfaWQYAiABKAkSDAoEcGF0aBgDIAEoCRIOCgZ0YXJnZXQYBCABKAkiUAoYTGlzdFNuYXBzaG90RmlsZXNSZXF1ZXN0EhEKCXJlcG9fZ3VpZBgBIAEoCRITCgtzbmFwc2hvdF9pZBgCIAEoCRIMCgRwYXRoGAMgASgJIkcKGUxpc3RTbmFwc2hvdEZpbGVzUmVzcG9uc2USDAoEcGF0aBgBIAEoCRIcCgdlbnRyaWVzGAIgAygLMgsudjEuTHNFbnRyeSIdCg5Mb2dEYXRhUmVxdWVzdBILCgNyZWYYASABKAkilgEKB0xzRW50cnkSDAoEbmFtZRgBIAEoCRIMCgR0eXBlGAIgASgJEgwKBHBhdGgYAyABKAkSCwoDdWlkGAQgASgDEgsKA2dpZBgFIAEoAxIMCgRzaXplGAYgASgDEgwKBG1vZGUYByABKAMSDQoFbXRpbWUYCCABKAkSDQoFYXRpbWUYCSABKAkSDQoFY3RpbWUYCiABKAkiNQoRUnVuQ29tbWFuZFJlcXVlc3QSDwoHcmVwb19pZBgBIAEoCRIPCgdjb21tYW5kGAIgASgJIrUFChhTdW1tYXJ5RGFzaGJvYXJkUmVzcG9uc2USPAoOcmVwb19zdW1tYXJpZXMYASADKAsyJC52MS5TdW1tYXJ5RGFzaGJvYXJkUmVzcG9uc2UuU3VtbWFyeRI8Cg5wbGFuX3N1bW1hcmllcxgCIAMoCzIkLnYxLlN1bW1hcnlEYXNoYm9hcmRSZXNwb25zZS5TdW1tYXJ5EhMKC2NvbmZpZ19wYXRoGAogASgJEhEKCWRhdGFfcGF0aBgLIAEoCRruAgoHU3VtbWFyeRIKCgJpZBgBIAEoCRIdChViYWNrdXBzX2ZhaWxlZF8zMGRheXMYAiABKAMSIwobYmFja3Vwc193YXJuaW5nX2xhc3RfMzBkYXlzGAMgASgDEiMKG2JhY2t1cHNfc3VjY2Vzc19sYXN0XzMwZGF5cxgEIAEoAxIhChlieXRlc19zY2FubmVkX2xhc3RfMzBkYXlzGAUgASgDEh8KF2J5dGVzX2FkZGVkX2xhc3RfMzBkYXlzGAYgASgDEhcKD3RvdGFsX3NuYXBzaG90cxgHIAEoAxIZChFieXRlc19zY2FubmVkX2F2ZxgIIAEoAxIXCg9ieXRlc19hZGRlZF9hdmcYCSABKAMSGwoTbmV4dF9iYWNrdXBfdGltZV9tcxgKIAEoAxJACg5yZWNlbnRfYmFja3VwcxgLIAEoCzIoLnYxLlN1bW1hcnlEYXNoYm9hcmRSZXNwb25zZS5CYWNrdXBDaGFydBqDAQoLQmFja3VwQ2hhcnQSDwoHZmxvd19pZBgBIAMoAxIUCgx0aW1lc3RhbXBfbXMYAiADKAMSEwoLZHVyYXRpb25fbXMYAyADKAMSIwoGc3RhdHVzGAQgAygOMhMudjEuT3BlcmF0aW9uU3RhdHVzEhMKC2J5dGVzX2FkZGVkGAUgAygDMqcJCghCYWNrcmVzdBIxCglHZXRDb25maWcSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaCi52MS5Db25maWciABIlCglTZXRDb25maWcSCi52MS5Db25maWcaCi52MS5Db25maWciABIvCg9DaGVja1JlcG9FeGlzdHMSCC52MS5SZXBvGhAudHlwZXMuQm9vbFZhbHVlIgASIQoHQWRkUmVwbxIILnYxLlJlcG8aCi52MS5Db25maWciABIuCgpSZW1vdmVSZXBvEhIudHlwZXMuU3RyaW5nVmFsdWUaCi52MS5Db25maWciABJEChJHZXRPcGVyYXRpb25FdmVudHMSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaEi52MS5PcGVyYXRpb25FdmVudCIAMAESPgoNR2V0T3BlcmF0aW9ucxIYLnYxLkdldE9wZXJhdGlvbnNSZXF1ZXN0GhEudjEuT3BlcmF0aW9uTGlzdCIAEkMKDUxpc3RTbmFwc2hvdHMSGC52MS5MaXN0U25hcHNob3RzUmVxdWVzdBoWLnYxLlJlc3RpY1NuYXBzaG90TGlzdCIAElIKEUxpc3RTbmFwc2hvdEZpbGVzEhwudjEuTGlzdFNuYXBzaG90RmlsZXNSZXF1ZXN0Gh0udjEuTGlzdFNuYXBzaG90RmlsZXNSZXNwb25zZSIAEjYKBkJhY2t1cBISLnR5cGVzLlN0cmluZ1ZhbHVlGhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgASPQoKRG9SZXBvVGFzaxIVLnYxLkRvUmVwb1Rhc2tSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgASNQoGRm9yZ2V0EhEudjEuRm9yZ2V0UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIAEj8KB1Jlc3RvcmUSGi52MS5SZXN0b3JlU25hcHNob3RSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgASNQoGQ2FuY2VsEhEudHlwZXMuSW50NjRWYWx1ZRoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIAEjQKB0dldExvZ3MSEi52MS5Mb2dEYXRhUmVxdWVzdBoRLnR5cGVzLkJ5dGVzVmFsdWUiADABEjgKClJ1bkNvbW1hbmQSFS52MS5SdW5Db21tYW5kUmVxdWVzdBoRLnR5cGVzLkludDY0VmFsdWUiABI5Cg5HZXREb3dubG9hZFVSTBIRLnR5cGVzLkludDY0VmFsdWUaEi50eXBlcy5TdHJpbmdWYWx1ZSIAEkEKDENsZWFySGlzdG9yeRIXLnYxLkNsZWFySGlzdG9yeVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiABI7ChBQYXRoQXV0b2NvbXBsZXRlEhIudHlwZXMuU3RyaW5nVmFsdWUaES50eXBlcy5TdHJpbmdMaXN0IgASTQoTR2V0U3VtbWFyeURhc2hib2FyZBIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRocLnYxLlN1bW1hcnlEYXNoYm9hcmRSZXNwb25zZSIAQixaKmdpdGh1Yi5jb20vZ2FyZXRoZ2VvcmdlL2JhY2tyZXN0L2dlbi9nby92MWIGcHJvdG8z", [file_v1_config, file_v1_restic, file_v1_operations, file_types_value, file_google_protobuf_empty, file_google_api_annotations]);
/**
* OpSelector is a message that can be used to select operations e.g. by query.
@@ -277,9 +277,9 @@ export const RestoreSnapshotRequestSchema: GenMessage<RestoreSnapshotRequest> =
*/
export type ListSnapshotFilesRequest = Message<"v1.ListSnapshotFilesRequest"> & {
/**
* @generated from field: string repo_id = 1;
* @generated from field: string repo_guid = 1;
*/
repoId: string;
repoGuid: string;
/**
* @generated from field: string snapshot_id = 2;
+1
View File
@@ -229,6 +229,7 @@ export const OperationRow = ({
snapshotId={snapshotOp.snapshot!.id}
snapshotOpId={operation.id}
repoId={operation.repoId}
repoGuid={operation.repoGuid}
planId={operation.planId}
/>
),
+11 -6
View File
@@ -2,6 +2,7 @@ import React, { useEffect, useMemo, useState } from "react";
import { Button, Dropdown, Form, Input, Modal, Space, Spin, Tree } from "antd";
import type { DataNode, EventDataNode } from "antd/es/tree";
import {
ListSnapshotFilesRequestSchema,
ListSnapshotFilesResponse,
ListSnapshotFilesResponseSchema,
LsEntry,
@@ -74,6 +75,7 @@ const findInTree = (curNode: DataNode, key: string): DataNode | null => {
export const SnapshotBrowser = ({
repoId,
repoGuid,
planId, // optional: purely to link restore operations to the right plan.
snapshotId,
snapshotOpId,
@@ -81,6 +83,7 @@ export const SnapshotBrowser = ({
snapshotId: string;
snapshotOpId?: bigint;
repoId: string;
repoGuid: string;
planId?: string;
}>) => {
const alertApi = useAlertApi();
@@ -118,7 +121,7 @@ export const SnapshotBrowser = ({
})
)
);
}, [repoId, snapshotId]);
}, [repoId, repoGuid, snapshotId]);
const onLoadData = async ({ key, children }: EventDataNode<DataNode>) => {
if (children) {
@@ -130,11 +133,13 @@ export const SnapshotBrowser = ({
path += "/";
}
const resp = await backrestService.listSnapshotFiles({
path,
repoId,
snapshotId,
});
const resp = await backrestService.listSnapshotFiles(
create(ListSnapshotFilesRequestSchema, {
path,
repoGuid,
snapshotId,
})
);
setTreeData((treeData) => {
let toUpdate: DataNode | null = null;