From ac6add9d3b969cf14ff364310c5c71b854675bb8 Mon Sep 17 00:00:00 2001 From: zzzzzzzzzy9 Date: Sat, 11 Oct 2025 10:27:33 +0800 Subject: [PATCH] If parsing repository.json failed, delete it Signed-off-by: zzzzzzzzzy9 --- .../image-check/daemon/commands/commands.go | 2 +- .../image-check/reference/store.go | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/image_recover_tool/image-check/daemon/commands/commands.go b/image_recover_tool/image-check/daemon/commands/commands.go index eb809dc..963ba5b 100644 --- a/image_recover_tool/image-check/daemon/commands/commands.go +++ b/image_recover_tool/image-check/daemon/commands/commands.go @@ -36,7 +36,7 @@ func NewDaemon(context *cli.Context) (*Daemon, error) { return nil, fmt.Errorf("Failed to load image: %v", err) } - d.ReferenceStore, err = reference.NewReferenceStore(d.daemonConfigFile.Root, d.daemonConfigFile.GraphDriver) + d.ReferenceStore, err = reference.NewReferenceStore(d.daemonConfigFile.Root, d.daemonConfigFile.GraphDriver, context.Bool("quiet"), context.Bool("remove")) if err != nil { return nil, fmt.Errorf("Couldn't create Tag store repositories: %s", err) } diff --git a/image_recover_tool/image-check/reference/store.go b/image_recover_tool/image-check/reference/store.go index 07587c6..aeacb50 100644 --- a/image_recover_tool/image-check/reference/store.go +++ b/image_recover_tool/image-check/reference/store.go @@ -67,7 +67,7 @@ func (a lexicalAssociations) Less(i, j int) bool { return a[i].Ref.String() < a[ // NewReferenceStore creates a new reference store, tied to a file path where // the set of references are serialized in JSON format. -func NewReferenceStore(root, driver string) (Store, error) { +func NewReferenceStore(root, driver string, quiet, remove bool) (Store, error) { abspath, err := filepath.Abs(filepath.Join(root, "image", driver, "repositories.json")) if err != nil { return nil, err @@ -79,8 +79,18 @@ func NewReferenceStore(root, driver string) (Store, error) { referencesByIDCache: make(map[digest.Digest]map[string]Named), } // Load the json file if it exists, otherwise create it. - if err := store.reload(); err != nil { - return nil, err + if err := store.reload(); err != nil && !os.IsNotExist(err) { + if !remove { + return nil, err + } + if !quiet { + fmt.Printf("Couldn't load Tag store repositories: %v, removing %s\n", err, abspath) + } + logrus.Errorf("Couldn't load Tag store repositories: %v, removing %s", err, abspath) + if err = os.RemoveAll(abspath); err != nil { + logrus.Errorf("Failed to remove %s: %v", abspath, err) + return nil, fmt.Errorf("Failed to remove %s: %v", abspath, err) + } } return store, nil } -- Gitee