/
gen-metadata.go
127 lines (101 loc) · 3.19 KB
/
gen-metadata.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
Copyright (C) 2017-2021 Daniele Rondina <geaaru@sabayonlinux.org>
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 3 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 <http://www.gnu.org/licenses/>.
*/
package portage
import (
"fmt"
"os"
"github.com/Sabayon/pkgs-checker/pkg/gentoo"
"github.com/spf13/cobra"
)
func newGenMetadataCommand() *cobra.Command {
var cmd = &cobra.Command{
Use: "gen-metadata cat/pkg[:slot] ... catN/pkgN[:slot] [OPTIONS]",
Short: "Generate metadata of a package to a specific path.",
Args: cobra.OnlyValidArgs,
PreRun: func(cmd *cobra.Command, args []string) {
if len(args) == 0 {
fmt.Fprintf(os.Stderr, "No packages defined.\n")
os.Exit(1)
}
dbPkgsDir, _ := cmd.Flags().GetString("db-pkgs-dir-path")
if dbPkgsDir == "" {
fmt.Println("Invalid Path of the portage metadata.")
os.Exit(1)
}
to, _ := cmd.Flags().GetString("to")
if to == "" {
fmt.Println("Invalid path where generate metadata.")
os.Exit(1)
}
},
Run: func(cmd *cobra.Command, args []string) {
dbPkgsDir, _ := cmd.Flags().GetString("db-pkgs-dir-path")
verbose, _ := cmd.Flags().GetBool("verbose")
to, _ := cmd.Flags().GetString("to")
quiet, _ := cmd.Flags().GetBool("quiet")
var err error
var opts *gentoo.PortageUseParseOpts = &gentoo.PortageUseParseOpts{
UseFilters: []string{},
Categories: []string{},
Packages: []string{},
}
for _, pkg := range args {
gp, err := gentoo.ParsePackageStr(pkg)
if err != nil {
fmt.Println(fmt.Sprintf("Invalid pkg %s: %s",
pkg, err.Error()))
os.Exit(1)
}
opts.Packages = append(opts.Packages, gp.GetPackageNameWithSlot())
opts.AddCategory(gp.Category)
}
opts.Verbose = verbose
pkgs, err := gentoo.ParseMetadataDir(dbPkgsDir, opts)
if err != nil {
fmt.Println("ERROR: " + err.Error())
os.Exit(1)
}
if len(pkgs) == 0 {
fmt.Println("No packages matched.")
os.Exit(1)
}
for _, p := range pkgs {
fmt.Println(
fmt.Sprintf("Generate metadata to dir %s for package %s-%s:%s",
to, p.GetPackageName(), p.GetPVR(), p.Slot),
)
if len(p.CONTENTS) > 0 && !quiet {
fmt.Println("CONTENTS:")
for _, e := range p.CONTENTS {
fmt.Println(e)
}
}
err = p.WriteMetadata2Dir(to, opts)
if err != nil {
fmt.Println(
fmt.Sprintf("Error on generate metadata for %s: %s",
p.GetPackageNameWithSlot(), err.Error()))
os.Exit(1)
}
}
},
}
var flags = cmd.Flags()
flags.String("to", "/gen-metadata",
"Generate medata tree to the specified path.")
flags.StringP("db-pkgs-dir-path", "p", "/var/db/pkg",
"Path of the portage metadata.")
flags.Bool("quiet", false, "Quiet output.")
return cmd
}