diff --git a/cmd.go b/cmd.go index 7e629e7a..acc94ed4 100644 --- a/cmd.go +++ b/cmd.go @@ -561,3 +561,30 @@ func passToMakepkg(dir string, args ...string) (err error) { } return } + +func passToMakepkgCapture(dir string, args ...string) (string, string, error) { + var outbuf, errbuf bytes.Buffer + + if config.NoConfirm { + args = append(args) + } + + mflags := strings.Fields(config.MFlags) + args = append(args, mflags...) + + cmd := exec.Command(config.MakepkgBin, args...) + cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr + cmd.Dir = dir + cmd.Stdout = &outbuf + cmd.Stderr = &errbuf + + err := cmd.Run() + stdout := outbuf.String() + stderr := errbuf.String() + + if err == nil { + _ = saveVCSInfo() + } + + return stdout, stderr, err +} diff --git a/install.go b/install.go index 385cdb9d..fd63d720 100644 --- a/install.go +++ b/install.go @@ -28,7 +28,6 @@ func install(parser *arguments) error { removeMake := false srcinfosStale := make(map[string]*gopkg.PKGBUILD) - srcinfos := make(map[string]*gopkg.PKGBUILD) //remotenames: names of all non repo packages on the system _, _, localNames, remoteNames, err := filterPackages() @@ -246,12 +245,7 @@ func install(parser *arguments) error { return err } - err = parseSRCINFOGenerate(dc.Aur, srcinfos, dc.Bases) - if err != nil { - return err - } - - err = buildInstallPkgBuilds(dc.Aur, srcinfos, parser.targets, parser, dc.Bases, incompatible) + err = buildInstallPkgBuilds(dc.Aur, srcinfosStale, parser.targets, parser, dc.Bases, incompatible) if err != nil { return err } @@ -323,6 +317,24 @@ nextpkg: return incompatible, nil } +func getVersionFromPkgbuild(dir string) (string, error) { + stdout, stderr, err := passToMakepkgCapture(dir, "--packagelist") + + if err != nil { + return "", fmt.Errorf("%s%s", stderr, err) + } + + line := strings.Split(stdout, "\n")[0] + split := strings.Split(line, "-") + + if len(split) < 4 { + return "", fmt.Errorf("Can not parse version from: %s", split) + } + //pkg-name-pkgver-pkgrel-arch: extract pkgver-pkgrel + ver := split[len(split)-3] + "-" + split[len(split)-2] + return ver, nil +} + func cleanEditNumberMenu(pkgs []*rpc.Pkg, bases map[string][]*rpc.Pkg, installed stringSet) ([]*rpc.Pkg, []*rpc.Pkg, error) { toPrint := "" askClean := false @@ -349,7 +361,6 @@ func cleanEditNumberMenu(pkgs []*rpc.Pkg, bases map[string][]*rpc.Pkg, installed fmt.Print(toPrint) - if askClean { fmt.Println(bold(green(arrow + " Packages to cleanBuild?"))) fmt.Println(bold(green(arrow) + cyan(" [N]one ") + "[A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)")) @@ -579,7 +590,7 @@ func downloadPkgBuilds(pkgs []*rpc.Pkg, targets stringSet, bases map[string][]*r func downloadPkgBuildsSources(pkgs []*rpc.Pkg, bases map[string][]*rpc.Pkg, incompatable stringSet) (err error) { for _, pkg := range pkgs { dir := config.BuildDir + pkg.PackageBase + "/" - args := []string{"--nobuild", "--nocheck", "--noprepare", "--nodeps"} + args := []string{"--verifysource", "-Ccf"} if incompatable.get(pkg.PackageBase) { args = append(args, "--ignorearch") @@ -605,17 +616,27 @@ func buildInstallPkgBuilds(pkgs []*rpc.Pkg, srcinfos map[string]*gopkg.PKGBUILD, built := true srcinfo := srcinfos[pkg.PackageBase] - version := srcinfo.CompleteVersion() + + //pkgver bump + err := passToMakepkg(dir, "--nobuild", "-fCc") + if err != nil { + return fmt.Errorf("Error making: %s", pkg.Name) + } + + version, err := getVersionFromPkgbuild(dir) + if err != nil { + return err + } if config.ReBuild == "no" || (config.ReBuild == "yes" && !targets.get(pkg.Name)) { for _, split := range bases[pkg.PackageBase] { - file, err := completeFileName(dir, split.Name+"-"+version.String()+"-"+arch+".pkg") + file, err := completeFileName(dir, split.Name+"-"+version+"-"+arch+".pkg") if err != nil { return err } if file == "" { - file, err = completeFileName(dir, split.Name+"-"+version.String()+"-"+"any"+".pkg") + file, err = completeFileName(dir, split.Name+"-"+version+"-"+"any"+".pkg") if err != nil { return err } @@ -631,7 +652,7 @@ func buildInstallPkgBuilds(pkgs []*rpc.Pkg, srcinfos map[string]*gopkg.PKGBUILD, if built { fmt.Println(bold(yellow(arrow)), - cyan(pkg.Name+"-"+pkg.Version) + bold(" Already made -- skipping build")) + cyan(pkg.Name+"-"+version)+bold(" Already made -- skipping build")) } else { args := []string{"-Ccf", "--noconfirm"} @@ -671,20 +692,20 @@ func buildInstallPkgBuilds(pkgs []*rpc.Pkg, srcinfos map[string]*gopkg.PKGBUILD, localNamesCache := sliceToStringSet(localNames) for _, split := range bases[pkg.PackageBase] { - file, err := completeFileName(dir, split.Name+"-"+version.String()+"-"+arch+".pkg") + file, err := completeFileName(dir, split.Name+"-"+version+"-"+arch+".pkg") if err != nil { return err } if file == "" { - file, err = completeFileName(dir, split.Name+"-"+version.String()+"-"+"any"+".pkg") + file, err = completeFileName(dir, split.Name+"-"+version+"-"+"any"+".pkg") if err != nil { return err } } if file == "" { - return fmt.Errorf("Could not find built package " + split.Name + "-" + version.String() + "-" + arch + ".pkg") + return fmt.Errorf("Could not find built package " + split.Name + "-" + version + "-" + arch + ".pkg") } arguments.addTarget(file)