mirror of
https://github.com/garethgeorge/backrest.git
synced 2026-05-04 03:50:30 +00:00
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
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:
@@ -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" +
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ message RestoreSnapshotRequest {
|
||||
}
|
||||
|
||||
message ListSnapshotFilesRequest {
|
||||
string repo_id = 1;
|
||||
string repo_guid = 1;
|
||||
string snapshot_id = 2;
|
||||
string path = 3;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -229,6 +229,7 @@ export const OperationRow = ({
|
||||
snapshotId={snapshotOp.snapshot!.id}
|
||||
snapshotOpId={operation.id}
|
||||
repoId={operation.repoId}
|
||||
repoGuid={operation.repoGuid}
|
||||
planId={operation.planId}
|
||||
/>
|
||||
),
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user