dnf-json: read arguments as JSON from stdin
This allows us to have more expressive input arguments.
This commit is contained in:
parent
0feb4e4d44
commit
cae1fdd04d
2 changed files with 28 additions and 14 deletions
13
dnf-json
13
dnf-json
|
|
@ -11,16 +11,9 @@ def timestamp_to_rfc3339(timestamp):
|
||||||
return d.strftime('%Y-%m-%dT%H:%M:%SZ')
|
return d.strftime('%Y-%m-%dT%H:%M:%SZ')
|
||||||
|
|
||||||
|
|
||||||
# base.sack.query().filter(provides=str(reldep))
|
call = json.load(sys.stdin)
|
||||||
|
command = call["command"]
|
||||||
|
arguments = call.get("arguments", {})
|
||||||
try:
|
|
||||||
command = sys.argv[1]
|
|
||||||
arguments = sys.argv[2:]
|
|
||||||
except IndexError:
|
|
||||||
command = "list"
|
|
||||||
arguments = []
|
|
||||||
|
|
||||||
|
|
||||||
base = dnf.Base()
|
base = dnf.Base()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,10 +39,22 @@ type PackageSpec struct {
|
||||||
Arch string `json:"arch,omitempty"`
|
Arch string `json:"arch,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func runDNF(command string, arguments []string, result interface{}) error {
|
func runDNF(command string, arguments interface{}, result interface{}) error {
|
||||||
argv := append([]string{"dnf-json", command}, arguments...)
|
var call = struct {
|
||||||
|
Command string `json:"command"`
|
||||||
|
Arguments interface{} `json:"arguments,omitempty"`
|
||||||
|
}{
|
||||||
|
command,
|
||||||
|
arguments,
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := exec.Command("python3", "dnf-json")
|
||||||
|
|
||||||
|
stdin, err := cmd.StdinPipe()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
cmd := exec.Command("python3", argv...)
|
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
stdout, err := cmd.StdoutPipe()
|
stdout, err := cmd.StdoutPipe()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -54,6 +66,12 @@ func runDNF(command string, arguments []string, result interface{}) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = json.NewEncoder(stdin).Encode(call)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
stdin.Close()
|
||||||
|
|
||||||
err = json.NewDecoder(stdout).Decode(result)
|
err = json.NewDecoder(stdout).Decode(result)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -69,8 +87,11 @@ func FetchPackageList(repo RepoConfig) (PackageList, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Depsolve(specs ...string) ([]PackageSpec, error) {
|
func Depsolve(specs ...string) ([]PackageSpec, error) {
|
||||||
|
var arguments = struct {
|
||||||
|
PackageSpecs []string `json:"package-specs"`
|
||||||
|
}{ specs }
|
||||||
var dependencies []PackageSpec
|
var dependencies []PackageSpec
|
||||||
err := runDNF("depsolve", specs, &dependencies)
|
err := runDNF("depsolve", arguments, &dependencies)
|
||||||
return dependencies, err
|
return dependencies, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue