diff --git a/install.go b/install.go index 3b53627b..c506b805 100644 --- a/install.go +++ b/install.go @@ -52,18 +52,13 @@ func install(parser *arguments) error { } //only error if direct targets or deps are missing - missing := make(stringSet) - for missingName := range dt.Missing { + for missingName := range dt.Missing { if !remoteNamesCache.get(missingName) { - missing.set(missingName) + return fmt.Errorf(boldRedFgBlackBg(arrow+" Error: ") + + blackBg("Could not find all required package")) } } - if len(missing) > 0 { - printMissing(missing) - return fmt.Errorf("Could not find all required packages") - } - //create the arguments to pass for the repo install arguments := parser.copy() arguments.delArg("u", "sysupgrade") @@ -124,7 +119,7 @@ func install(parser *arguments) error { if len(arguments.targets) > 0 { err := passToPacman(arguments) if err != nil { - fmt.Println("Error installing repo packages.") + fmt.Errorf("Error installing repo packages.") } } @@ -176,22 +171,33 @@ func install(parser *arguments) error { return err } }*/ - - if arguments.existsArg("gendb") { - fmt.Println("GenDB finished. No packages were installed") - return nil - } - + // if !continueTask("Proceed with install?", "nN") { // return fmt.Errorf("Aborting due to user") // } + //this downloads the package build sources but also causes + //a version bumb for vsc packages + //that should not edit the sources so we should be safe to skip + //it and parse the srcinfo at the current version + if arguments.existsArg("gendb") { + err = parsesrcinfosFile(dc.Aur, srcinfos, dc.Bases) + if err != nil { + return err + } + + + fmt.Println(boldGreenFg(arrow+" GenDB finished. No packages were installed")) + return nil + } + err = downloadPkgBuildsSources(dc.Aur) if err != nil { return err } - err = parsesrcinfos(dc.Aur, srcinfos) + + err = parsesrcinfosGenerate(dc.Aur, srcinfos, dc.Bases) if err != nil { return err } @@ -329,10 +335,67 @@ func askEditPkgBuilds(pkgs []*rpc.Pkg, bases map[string][]*rpc.Pkg) error { return nil } -func parsesrcinfos(pkgs []*rpc.Pkg, srcinfos map[string]*gopkg.PKGBUILD) error { - for _, pkg := range pkgs { +func updateVSCdb(pkgbuild *gopkg.PKGBUILD) { + for _, pkgsource := range pkgbuild.Source { + owner, repo := parseSource(pkgsource) + if owner != "" && repo != "" { + err := branchInfo(pkgbuild.Pkgbase, owner, repo) + if err != nil { + fmt.Println(err) + } + } + } +} + +func parsesrcinfosFile(pkgs []*rpc.Pkg, srcinfos map[string]*gopkg.PKGBUILD, bases map[string][]*rpc.Pkg) error { + for k, pkg := range pkgs { dir := config.BuildDir + pkg.PackageBase + "/" + str := boldCyanFg("::") + boldFg(" Parsing SRCINFO (%d/%d): %s-%s") + str2 := "" + if len(bases[pkg.PackageBase]) > 1 || pkg.PackageBase != pkg.Name { + str2 += " (" + for _, split := range bases[pkg.PackageBase] { + str2 += split.Name + " " + } + str2 = str2[:len(str2)-1] + ")" + } + fmt.Printf(str, k+1, len(pkgs), pkg.PackageBase, pkg.Version) + fmt.Print(str2) + fmt.Println() + + + pkgbuild, err := gopkg.ParseSRCINFO(dir + ".SRCINFO") + if err != nil { + return fmt.Errorf("%s: %s", pkg.Name, err) + } + + srcinfos[pkg.PackageBase] = pkgbuild + updateVSCdb(pkgbuild) + } + + return nil +} + +func parsesrcinfosGenerate(pkgs []*rpc.Pkg, srcinfos map[string]*gopkg.PKGBUILD, bases map[string][]*rpc.Pkg) error { + for k, pkg := range pkgs { + dir := config.BuildDir + pkg.PackageBase + "/" + + str := "Parsing SRCINFO (%d/%d): %s-%s" + str2 := "" + if len(bases[pkg.PackageBase]) > 1 || pkg.PackageBase != pkg.Name { + str2 += " (" + for _, split := range bases[pkg.PackageBase] { + str2 += split.Name + " " + } + str2 = str2[:len(str2)-1] + ")" + } + fmt.Printf(str, k+1, len(pkgs), pkg.PackageBase, pkg.Version) + fmt.Print(str2) + fmt.Println() + + + cmd := exec.Command(config.MakepkgBin, "--printsrcinfo") cmd.Stderr = os.Stderr cmd.Dir = dir @@ -348,33 +411,27 @@ func parsesrcinfos(pkgs []*rpc.Pkg, srcinfos map[string]*gopkg.PKGBUILD) error { } srcinfos[pkg.PackageBase] = pkgbuild - - for _, pkgsource := range pkgbuild.Source { - owner, repo := parseSource(pkgsource) - if owner != "" && repo != "" { - err = branchInfo(pkg.Name, owner, repo) - if err != nil { - return err - } - } - } + updateVSCdb(pkgbuild) } return nil } func dowloadPkgBuilds(pkgs []*rpc.Pkg, bases map[string][]*rpc.Pkg) (err error) { - for _, pkg := range pkgs { + for k, pkg := range pkgs { //todo make pretty - str := "Downloading: " + pkg.PackageBase + "-" + pkg.Version + str := boldCyanFg("::") + boldFg(" Downloading (%d/%d): %s-%s") + str2 := "" if len(bases[pkg.PackageBase]) > 1 || pkg.PackageBase != pkg.Name { - str += " (" + str2 += " (" for _, split := range bases[pkg.PackageBase] { - str += split.Name + " " + str2 += split.Name + " " } - str = str[:len(str)-1] + ")" + str2 = str2[:len(str2)-1] + ")" } - fmt.Println(str) + fmt.Printf(str, k+1, len(pkgs), pkg.PackageBase, pkg.Version) + fmt.Print(str2) + fmt.Println() err = downloadAndUnpack(baseURL+pkg.URLPath, config.BuildDir, false) if err != nil {