The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/distrobuilder/pull/357
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === Luet is the new PMS of Sabayon Linux and of Mocaccino OS (not yet officially released)
From 944814569f40e1b43a26e738a58fa54cf2b3cd0d Mon Sep 17 00:00:00 2001 From: Daniele Rondina <gea...@sabayonlinux.org> Date: Mon, 23 Dec 2019 17:21:28 +0100 Subject: [PATCH] managers: Add luet pms Signed-off-by: Daniele Rondina <gea...@sabayonlinux.org> --- managers/luet.go | 85 ++++++++++++++++++++++++++++++++++++++++++++ managers/manager.go | 2 ++ shared/definition.go | 1 + 3 files changed, 88 insertions(+) create mode 100644 managers/luet.go diff --git a/managers/luet.go b/managers/luet.go new file mode 100644 index 0000000..bda6c0f --- /dev/null +++ b/managers/luet.go @@ -0,0 +1,85 @@ +package managers + +import ( + "fmt" + "os" + "path/filepath" + "strings" + + lxd "github.com/lxc/lxd/shared" + + "github.com/lxc/distrobuilder/shared" +) + +func luetRepoCaller(repo shared.DefinitionPackagesRepository) error { + var targetFile string + + if repo.Name == "" { + return fmt.Errorf("Invalid repository name") + } + + if repo.URL == "" { + return fmt.Errorf("Invalid repository url") + } + + if strings.HasSuffix(repo.Name, ".yml") { + targetFile = filepath.Join("/etc/luet/repos.conf.d", repo.Name) + } else { + targetFile = filepath.Join("/etc/luet/repos.conf.d", repo.Name + ".yml") + } + + if !lxd.PathExists(filepath.Dir(targetFile)) { + err := os.MkdirAll(filepath.Dir(targetFile), 0755) + if err != nil { + return err + } + } + + f, err := os.OpenFile(targetFile, os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return err + } + defer f.Close() + + // NOTE: repo.URL is not an URL but the content of the file. + _, err = f.WriteString(repo.URL) + if err != nil { + return err + } + + return nil +} + +// NewLuet create a new Manager instance +func NewLuet() *Manager { + return &Manager{ + commands: ManagerCommands{ + clean: "luet", + install: "luet", + refresh: "luet", + remove: "luet", + update: "luet", + }, + flags: ManagerFlags{ + global: []string{}, + clean: []string{ + "cleanup", + }, + install: []string{ + "install", + }, + refresh: []string{ + "repo", "update", + }, + remove: []string{ + "uninstall", + }, + update: []string{ + "upgrade", + }, + }, + RepoHandler: func(repoAction shared.DefinitionPackagesRepository) error { + return luetRepoCaller(repoAction) + }, + } +} diff --git a/managers/manager.go b/managers/manager.go index 274ea72..675d2f3 100644 --- a/managers/manager.go +++ b/managers/manager.go @@ -58,6 +58,8 @@ func Get(name string) *Manager { return NewYum() case "equo": return NewEquo() + case "luet": + return NewLuet() case "zypper": return NewZypper() } diff --git a/shared/definition.go b/shared/definition.go index 7fd341c..5512cfe 100644 --- a/shared/definition.go +++ b/shared/definition.go @@ -354,6 +354,7 @@ func (d *Definition) Validate() error { "equo", "xbps", "zypper", + "luet", } if !shared.StringInSlice(strings.TrimSpace(d.Packages.Manager), validManagers) { return fmt.Errorf("packages.manager must be one of %v", validManagers)
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel