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

Reply via email to