From e5e6533f4f838f1f604cf9665cbe643fa2d9d1c2 Mon Sep 17 00:00:00 2001 From: Aly Raffauf Date: Sat, 18 Jul 2026 17:30:15 -0400 Subject: [PATCH] repo_delete: make record fetch non-fatal for already deleted records --- internal/cli/repo_delete.go | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/internal/cli/repo_delete.go b/internal/cli/repo_delete.go index 2f8e6f0..da4a25b 100644 --- a/internal/cli/repo_delete.go +++ b/internal/cli/repo_delete.go @@ -35,31 +35,34 @@ var repoDeleteCmd = &cobra.Command{ return fmt.Errorf("repo %q has no knot", handle+"/"+name) } rkey := extractRKey(repo.URI) - existingRecord, err := atClient.GetRecord(ctx, did, "sh.tangled.repo", rkey) - if err != nil { - return fmt.Errorf("get repository record: %w", err) - } + existingRecord, getErr := atClient.GetRecord(ctx, did, "sh.tangled.repo", rkey) + // getErr is non-fatal: the record may already be deleted. Only + // call DeleteRecord if it still exists. token, err := atClient.GetServiceAuth(ctx, "did:web:"+repo.Value.Knot, "sh.tangled.repo.delete") if err != nil { return fmt.Errorf("get knot authorization: %w", err) } - if err := atClient.DeleteRecord(ctx, atproto.DeleteRecordInput{ - Repo: did, - Collection: "sh.tangled.repo", - Rkey: rkey, - }); err != nil { - return fmt.Errorf("delete repository record: %w", err) + if getErr == nil { + if err := atClient.DeleteRecord(ctx, atproto.DeleteRecordInput{ + Repo: did, + Collection: "sh.tangled.repo", + Rkey: rkey, + }); err != nil { + return fmt.Errorf("delete repository record: %w", err) + } } if err := knot.New(repo.Value.Knot, token).DeleteRepo(ctx, knot.DeleteRepoInput{ DID: did, Name: name, Rkey: rkey, }); err != nil { - if _, _, restoreErr := atClient.PutRecord(ctx, atproto.PutRecordInput{ - Repo: did, Collection: "sh.tangled.repo", Rkey: rkey, Record: existingRecord.Value, - }); restoreErr != nil { - return fmt.Errorf("delete knot repository: %w; restore repository record: %v", err, restoreErr) + if getErr == nil { + if _, _, restoreErr := atClient.PutRecord(ctx, atproto.PutRecordInput{ + Repo: did, Collection: "sh.tangled.repo", Rkey: rkey, Record: existingRecord.Value, + }); restoreErr != nil { + return fmt.Errorf("delete knot repository: %w; restore repository record: %v", err, restoreErr) + } } return err } -- 2.51.2