From da6843f9b7902ac85b309a52f8eff6ee267a6be2 Mon Sep 17 00:00:00 2001 From: Mikhail Klementev Date: Thu, 11 May 2023 20:08:08 +0000 Subject: [PATCH] Add command to populate debian cache --- debian.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 1 + 2 files changed, 60 insertions(+) create mode 100644 debian.go diff --git a/debian.go b/debian.go new file mode 100644 index 0000000..512f922 --- /dev/null +++ b/debian.go @@ -0,0 +1,59 @@ +package main + +import ( + "github.com/rs/zerolog/log" + + "code.dumpstack.io/tools/out-of-tree/distro/debian" + "code.dumpstack.io/tools/out-of-tree/distro/debian/snapshot" +) + +type DebianCmd struct { + Cache DebianCacheCmd `cmd:"" help:"populate cache"` +} + +type DebianCacheCmd struct { + Path string `help:"path to cache" default:"debian.cache"` +} + +func (cmd *DebianCacheCmd) Run() (err error) { + c, err := debian.NewCache(cmd.Path) + if err != nil { + log.Error().Err(err).Msg("cache") + return + } + defer c.Close() + + versions, err := snapshot.SourcePackageVersions("linux") + if err != nil { + log.Error().Err(err).Msg("get source package versions") + return + } + + for i, version := range versions { + slog := log.With().Str("version", version).Logger() + slog.Info().Msgf("%03d/%03d", i, len(versions)) + + _, err = c.Get(version) + if err == nil { + slog.Info().Msgf("found in cache") + continue + } + + var dk debian.DebianKernel + dk, err = debian.GetDebianKernel(version) + if err != nil { + slog.Error().Err(err).Msg("get debian kernel") + continue + } + + err = c.Put(dk) + if err != nil { + slog.Error().Err(err).Msg("put to cache") + return + } + + slog.Info().Msgf("%s cached", version) + } + + return +} diff --git a/main.go b/main.go index 6dcde49..6e5a3d3 100644 --- a/main.go +++ b/main.go @@ -42,6 +42,7 @@ type CLI struct { Gen GenCmd `cmd:"" help:"generate .out-of-tree.toml skeleton"` Image ImageCmd `cmd:"" help:"manage images"` Container ContainerCmd `cmd:"" help:"manage containers"` + Debian DebianCmd `cmd:"" help:"" hidden:""` Version VersionFlag `name:"version" help:"print version information and quit"`