diff --git a/dnf-json b/dnf-json index 6b3a1b971..2f65cd747 100644 --- a/dnf-json +++ b/dnf-json @@ -11,16 +11,9 @@ def timestamp_to_rfc3339(timestamp): return d.strftime('%Y-%m-%dT%H:%M:%SZ') -# base.sack.query().filter(provides=str(reldep)) - - -try: - command = sys.argv[1] - arguments = sys.argv[2:] -except IndexError: - command = "list" - arguments = [] - +call = json.load(sys.stdin) +command = call["command"] +arguments = call.get("arguments", {}) base = dnf.Base() diff --git a/internal/rpmmd/repository.go b/internal/rpmmd/repository.go index 72817069b..e117a5028 100644 --- a/internal/rpmmd/repository.go +++ b/internal/rpmmd/repository.go @@ -39,10 +39,22 @@ type PackageSpec struct { Arch string `json:"arch,omitempty"` } -func runDNF(command string, arguments []string, result interface{}) error { - argv := append([]string{"dnf-json", command}, arguments...) +func runDNF(command string, arguments interface{}, result interface{}) error { + 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 stdout, err := cmd.StdoutPipe() if err != nil { @@ -54,6 +66,12 @@ func runDNF(command string, arguments []string, result interface{}) error { return err } + err = json.NewEncoder(stdin).Encode(call) + if err != nil { + return err + } + stdin.Close() + err = json.NewDecoder(stdout).Decode(result) if err != nil { return err @@ -69,8 +87,11 @@ func FetchPackageList(repo RepoConfig) (PackageList, error) { } func Depsolve(specs ...string) ([]PackageSpec, error) { + var arguments = struct { + PackageSpecs []string `json:"package-specs"` + }{ specs } var dependencies []PackageSpec - err := runDNF("depsolve", specs, &dependencies) + err := runDNF("depsolve", arguments, &dependencies) return dependencies, err }