// Copyright © 2020 Ettore Di Giacinto // Daniele Rondina // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see . package cmd_helpers import ( "errors" "fmt" "regexp" "strings" "github.com/mudler/luet/pkg/api/core/types" _gentoo "github.com/Sabayon/pkgs-checker/pkg/gentoo" "github.com/mudler/luet/cmd/util" ) func CreateRegexArray(rgx []string) ([]*regexp.Regexp, error) { ans := make([]*regexp.Regexp, len(rgx)) if len(rgx) > 0 { for idx, reg := range rgx { re := regexp.MustCompile(reg) if re == nil { return nil, errors.New("Invalid regex " + reg + "!") } ans[idx] = re } } return ans, nil } func packageData(p string) (string, string) { cat := "" name := "" if strings.Contains(p, "/") { packagedata := strings.Split(p, "/") cat = packagedata[0] name = packagedata[1] } else { name = p } return cat, name } func packageHasGentooSelector(v string) bool { return (strings.HasPrefix(v, "=") || strings.HasPrefix(v, ">") || strings.HasPrefix(v, "<")) } func gentooVersion(gp *_gentoo.GentooPackage) string { condition := gp.Condition.String() if condition == "=" { condition = "" } pkgVersion := fmt.Sprintf("%s%s%s", condition, gp.Version, gp.VersionSuffix, ) if gp.VersionBuild != "" { pkgVersion = fmt.Sprintf("%s%s%s+%s", condition, gp.Version, gp.VersionSuffix, gp.VersionBuild, ) } return pkgVersion } func ParsePackageStr(p string) (*types.Package, error) { if packageHasGentooSelector(p) { gp, err := _gentoo.ParsePackageStr(p) if err != nil { return nil, err } if gp.Version == "" { gp.Version = "0" gp.Condition = _gentoo.PkgCondGreaterEqual } return &types.Package{ Name: gp.Name, Category: gp.Category, Version: gentooVersion(gp), Uri: make([]string, 0), }, nil } ver := ">=0" cat := "" name := "" if strings.Contains(p, "@") { packageinfo := strings.Split(p, "@") ver = packageinfo[1] cat, name = packageData(packageinfo[0]) } else { cat, name = packageData(p) } return &types.Package{ Name: name, Category: cat, Version: ver, Uri: make([]string, 0), }, nil } func CheckErr(err error) { if err != nil { util.DefaultContext.Fatal(err) } }