Merge pull request #1061 from Jguer/enforce-lint

Enforce lint in CI
This commit is contained in:
J Guerreiro 2019-10-13 23:37:35 +01:00 committed by GitHub
commit 96dd1d3ce2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 192 additions and 68 deletions

View file

@ -9,6 +9,7 @@ RUN pacman -Syu --overwrite=* --needed --noconfirm \
gcc gnupg libldap go git tar make awk linux-api-headers pacman-contrib && paccache -rfk0 gcc gnupg libldap go git tar make awk linux-api-headers pacman-contrib && paccache -rfk0
# Dependency for linting # Dependency for linting
RUN curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b /bin v1.20.0
RUN go get golang.org/x/lint/golint && mv /root/go/bin/golint /bin/ RUN go get golang.org/x/lint/golint && mv /root/go/bin/golint /bin/
ENV ARCH=$BUILD_ARCH ENV ARCH=$BUILD_ARCH

View file

@ -82,6 +82,11 @@ test-vendor: vendor
exit 1; \ exit 1; \
fi; fi;
.PHONY: lint
lint:
golangci-lint run
golint -set_exit_status . ./pkg/...
.PHONY: fmt .PHONY: fmt
fmt: fmt:
#go fmt -mod=vendor $(GOFILES) ./... Doesn't work yet but will be supported soon #go fmt -mod=vendor $(GOFILES) ./... Doesn't work yet but will be supported soon

View file

@ -25,7 +25,7 @@ func questionCallback(question alpm.QuestionAny) {
size := 0 size := 0
qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error { _ = qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
size++ size++
return nil return nil
}) })
@ -36,7 +36,7 @@ func questionCallback(question alpm.QuestionAny) {
size = 1 size = 1
var db string var db string
qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error { _ = qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
thisDB := pkg.DB().Name() thisDB := pkg.DB().Name()
if db != thisDB { if db != thisDB {

View file

@ -23,7 +23,10 @@ func removeVCSPackage(pkgs []string) {
} }
if updated { if updated {
saveVCSInfo() err := saveVCSInfo()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
} }
} }
@ -42,13 +45,16 @@ func cleanDependencies(removeOptional bool) error {
} }
// CleanRemove sends a full removal command to pacman with the pkgName slice // CleanRemove sends a full removal command to pacman with the pkgName slice
func cleanRemove(pkgNames []string) (err error) { func cleanRemove(pkgNames []string) error {
if len(pkgNames) == 0 { if len(pkgNames) == 0 {
return nil return nil
} }
arguments := makeArguments() arguments := makeArguments()
arguments.addArg("R") err := arguments.addArg("R")
if err != nil {
return err
}
arguments.addTarget(pkgNames...) arguments.addTarget(pkgNames...)
return show(passToPacman(arguments)) return show(passToPacman(arguments))
@ -212,7 +218,9 @@ func cleanAfter(bases []Base) {
fmt.Fprintf(os.Stderr, "error resetting %s: %s", base.String(), stderr) fmt.Fprintf(os.Stderr, "error resetting %s: %s", base.String(), stderr)
} }
show(passToGit(dir, "clean", "-fx")) if err := show(passToGit(dir, "clean", "-fx")); err != nil {
fmt.Fprintln(os.Stderr, err)
}
} else { } else {
fmt.Printf(bold(cyan("::")+" Deleting (%d/%d): %s\n"), i+1, len(bases), cyan(dir)) fmt.Printf(bold(cyan("::")+" Deleting (%d/%d): %s\n"), i+1, len(bases), cyan(dir))
if err := os.RemoveAll(dir); err != nil { if err := os.RemoveAll(dir); err != nil {

View file

@ -33,7 +33,7 @@ func (dp *depPool) checkInnerConflict(name string, conflict string, conflicts ty
} }
func (dp *depPool) checkForwardConflict(name string, conflict string, conflicts types.MapStringSet) { func (dp *depPool) checkForwardConflict(name string, conflict string, conflicts types.MapStringSet) {
dp.LocalDB.PkgCache().ForEach(func(pkg alpm.Package) error { _ = dp.LocalDB.PkgCache().ForEach(func(pkg alpm.Package) error {
if pkg.Name() == name || dp.hasPackage(pkg.Name()) { if pkg.Name() == name || dp.hasPackage(pkg.Name()) {
return nil return nil
} }
@ -88,7 +88,7 @@ func (dp *depPool) checkInnerConflicts(conflicts types.MapStringSet) {
} }
for _, pkg := range dp.Repo { for _, pkg := range dp.Repo {
pkg.Conflicts().ForEach(func(conflict alpm.Depend) error { _ = pkg.Conflicts().ForEach(func(conflict alpm.Depend) error {
dp.checkInnerConflict(pkg.Name(), conflict.String(), conflicts) dp.checkInnerConflict(pkg.Name(), conflict.String(), conflicts)
return nil return nil
}) })
@ -103,7 +103,7 @@ func (dp *depPool) checkForwardConflicts(conflicts types.MapStringSet) {
} }
for _, pkg := range dp.Repo { for _, pkg := range dp.Repo {
pkg.Conflicts().ForEach(func(conflict alpm.Depend) error { _ = pkg.Conflicts().ForEach(func(conflict alpm.Depend) error {
dp.checkForwardConflict(pkg.Name(), conflict.String(), conflicts) dp.checkForwardConflict(pkg.Name(), conflict.String(), conflicts)
return nil return nil
}) })
@ -111,12 +111,12 @@ func (dp *depPool) checkForwardConflicts(conflicts types.MapStringSet) {
} }
func (dp *depPool) checkReverseConflicts(conflicts types.MapStringSet) { func (dp *depPool) checkReverseConflicts(conflicts types.MapStringSet) {
dp.LocalDB.PkgCache().ForEach(func(pkg alpm.Package) error { _ = dp.LocalDB.PkgCache().ForEach(func(pkg alpm.Package) error {
if dp.hasPackage(pkg.Name()) { if dp.hasPackage(pkg.Name()) {
return nil return nil
} }
pkg.Conflicts().ForEach(func(conflict alpm.Depend) error { _ = pkg.Conflicts().ForEach(func(conflict alpm.Depend) error {
dp.checkReverseConflict(pkg.Name(), conflict.String(), conflicts) dp.checkReverseConflict(pkg.Name(), conflict.String(), conflicts)
return nil return nil
}) })
@ -243,7 +243,7 @@ func (dp *depPool) _checkMissing(dep string, stack []string, missing *missing) {
repoPkg := dp.findSatisfierRepo(dep) repoPkg := dp.findSatisfierRepo(dep)
if repoPkg != nil { if repoPkg != nil {
missing.Good.Set(dep) missing.Good.Set(dep)
repoPkg.Depends().ForEach(func(repoDep alpm.Depend) error { _ = repoPkg.Depends().ForEach(func(repoDep alpm.Depend) error {
if _, err := dp.LocalDB.PkgCache().FindSatisfier(repoDep.String()); err == nil { if _, err := dp.LocalDB.PkgCache().FindSatisfier(repoDep.String()); err == nil {
missing.Good.Set(repoDep.String()) missing.Good.Set(repoDep.String())
return nil return nil

View file

@ -6,16 +6,20 @@ import (
rpc "github.com/mikkeloscar/aur" rpc "github.com/mikkeloscar/aur"
) )
// Base is an AUR base package
type Base []*rpc.Pkg type Base []*rpc.Pkg
// Pkgbase returns the first base package.
func (b Base) Pkgbase() string { func (b Base) Pkgbase() string {
return b[0].PackageBase return b[0].PackageBase
} }
// Version returns the first base package version.
func (b Base) Version() string { func (b Base) Version() string {
return b[0].Version return b[0].Version
} }
// URLPath returns the first base package URL.
func (b Base) URLPath() string { func (b Base) URLPath() string {
return b[0].URLPath return b[0].URLPath
} }
@ -94,7 +98,7 @@ func (do *depOrder) orderPkgRepo(pkg *alpm.Package, dp *depPool, runtime bool) {
} }
delete(dp.Repo, pkg.Name()) delete(dp.Repo, pkg.Name())
pkg.Depends().ForEach(func(dep alpm.Depend) (err error) { _ = pkg.Depends().ForEach(func(dep alpm.Depend) (err error) {
repoPkg := dp.findSatisfierRepo(dep.String()) repoPkg := dp.findSatisfierRepo(dep.String())
if repoPkg != nil { if repoPkg != nil {
do.orderPkgRepo(repoPkg, dp, runtime) do.orderPkgRepo(repoPkg, dp, runtime)

View file

@ -138,7 +138,7 @@ func (dp *depPool) ResolveTargets(pkgs []string) error {
group := dp.SyncDB.FindGroupPkgs(target.Name) group := dp.SyncDB.FindGroupPkgs(target.Name)
if !group.Empty() { if !group.Empty() {
dp.Groups = append(dp.Groups, target.String()) dp.Groups = append(dp.Groups, target.String())
group.ForEach(func(pkg alpm.Package) error { _ = group.ForEach(func(pkg alpm.Package) error {
dp.Explicit.Set(pkg.Name()) dp.Explicit.Set(pkg.Name())
return nil return nil
}) })
@ -329,7 +329,7 @@ func (dp *depPool) resolveAURPackages(pkgs types.StringSet, explicit bool) error
func (dp *depPool) ResolveRepoDependency(pkg *alpm.Package) { func (dp *depPool) ResolveRepoDependency(pkg *alpm.Package) {
dp.Repo[pkg.Name()] = pkg dp.Repo[pkg.Name()] = pkg
pkg.Depends().ForEach(func(dep alpm.Depend) (err error) { _ = pkg.Depends().ForEach(func(dep alpm.Depend) (err error) {
//have satisfier in dep tree: skip //have satisfier in dep tree: skip
if dp.hasSatisfier(dep.String()) { if dp.hasSatisfier(dep.String()) {
return return

View file

@ -284,7 +284,7 @@ func getPkgbuildsfromABS(pkgs []string, path string) (bool, error) {
pkg = db.Pkg(name) pkg = db.Pkg(name)
} }
} else { } else {
dbList.ForEach(func(db alpm.DB) error { _ = dbList.ForEach(func(db alpm.DB) error {
if pkg = db.Pkg(name); pkg != nil { if pkg = db.Pkg(name); pkg != nil {
return fmt.Errorf("") return fmt.Errorf("")
} }

View file

@ -171,12 +171,17 @@ func install(parser *arguments) (err error) {
if do.HasMake() { if do.HasMake() {
switch config.RemoveMake { switch config.RemoveMake {
case "yes": case "yes":
defer removeMake(do, &err) defer func() {
err = removeMake(do)
}()
case "no": case "no":
break break
default: default:
if continueTask("Remove make dependencies after install?", false) { if continueTask("Remove make dependencies after install?", false) {
defer removeMake(do, &err) defer func() {
err = removeMake(do)
}()
} }
} }
} }
@ -210,6 +215,7 @@ func install(parser *arguments) (err error) {
} }
if len(toDiff) > 0 { if len(toDiff) > 0 {
// TODO: PKGBUILD diffs should not return in case of err. Just print and continue
err = showPkgbuildDiffs(toDiff, cloned) err = showPkgbuildDiffs(toDiff, cloned)
if err != nil { if err != nil {
return err return err
@ -224,7 +230,11 @@ func install(parser *arguments) (err error) {
if !continueTask(bold(green("Proceed with install?")), true) { if !continueTask(bold(green("Proceed with install?")), true) {
return fmt.Errorf("Aborting due to user") return fmt.Errorf("Aborting due to user")
} }
updatePkgbuildSeenRef(toDiff, cloned) err = updatePkgbuildSeenRef(toDiff, cloned)
if err != nil {
fmt.Fprintln(os.Stderr, err.Error())
}
config.NoConfirm = oldValue config.NoConfirm = oldValue
} }
@ -286,9 +296,15 @@ func install(parser *arguments) (err error) {
} }
depArguments := makeArguments() depArguments := makeArguments()
depArguments.addArg("D", "asdeps") err = depArguments.addArg("D", "asdeps")
if err != nil {
return err
}
expArguments := makeArguments() expArguments := makeArguments()
expArguments.addArg("D", "asexplicit") err = expArguments.addArg("D", "asexplicit")
if err != nil {
return err
}
for _, pkg := range do.Repo { for _, pkg := range do.Repo {
if !dp.Explicit.Get(pkg.Name()) && !localNamesCache.Get(pkg.Name()) && !remoteNamesCache.Get(pkg.Name()) { if !dp.Explicit.Get(pkg.Name()) && !localNamesCache.Get(pkg.Name()) && !remoteNamesCache.Get(pkg.Name()) {
@ -318,7 +334,7 @@ func install(parser *arguments) (err error) {
} }
} }
go completion.Update(alpmHandle, config.AURURL, cacheHome, config.CompletionInterval, false) go exitOnError(completion.Update(alpmHandle, config.AURURL, cacheHome, config.CompletionInterval, false))
err = downloadPkgbuildsSources(do.Aur, incompatible) err = downloadPkgbuildsSources(do.Aur, incompatible)
if err != nil { if err != nil {
@ -333,9 +349,12 @@ func install(parser *arguments) (err error) {
return nil return nil
} }
func removeMake(do *depOrder, err *error) { func removeMake(do *depOrder) error {
removeArguments := makeArguments() removeArguments := makeArguments()
removeArguments.addArg("R", "u") err := removeArguments.addArg("R", "u")
if err != nil {
return err
}
for _, pkg := range do.getMake() { for _, pkg := range do.getMake() {
removeArguments.addTarget(pkg) removeArguments.addTarget(pkg)
@ -343,8 +362,10 @@ func removeMake(do *depOrder, err *error) {
oldValue := config.NoConfirm oldValue := config.NoConfirm
config.NoConfirm = true config.NoConfirm = true
*err = show(passToPacman(removeArguments)) err = show(passToPacman(removeArguments))
config.NoConfirm = oldValue config.NoConfirm = oldValue
return err
} }
func inRepos(syncDB alpm.DBList, pkg string) bool { func inRepos(syncDB alpm.DBList, pkg string) bool {
@ -678,24 +699,30 @@ func editDiffNumberMenu(bases []Base, installed types.StringSet, diff bool) ([]B
} }
func updatePkgbuildSeenRef(bases []Base, cloned types.StringSet) error { func updatePkgbuildSeenRef(bases []Base, cloned types.StringSet) error {
var errMulti types.MultiError
for _, base := range bases { for _, base := range bases {
pkg := base.Pkgbase() pkg := base.Pkgbase()
dir := filepath.Join(config.BuildDir, pkg) dir := filepath.Join(config.BuildDir, pkg)
if shouldUseGit(dir) { if shouldUseGit(dir) {
gitUpdateSeenRef(config.BuildDir, pkg) err := gitUpdateSeenRef(config.BuildDir, pkg)
if err != nil {
errMulti.Add(err)
}
} }
} }
return nil return errMulti.Return()
} }
func showPkgbuildDiffs(bases []Base, cloned types.StringSet) error { func showPkgbuildDiffs(bases []Base, cloned types.StringSet) error {
var errMulti types.MultiError
for _, base := range bases { for _, base := range bases {
pkg := base.Pkgbase() pkg := base.Pkgbase()
dir := filepath.Join(config.BuildDir, pkg) dir := filepath.Join(config.BuildDir, pkg)
if shouldUseGit(dir) { if shouldUseGit(dir) {
start, err := getLastSeenHash(config.BuildDir, pkg) start, err := getLastSeenHash(config.BuildDir, pkg)
if err != nil { if err != nil {
return err errMulti.Add(err)
continue
} }
if cloned.Get(pkg) { if cloned.Get(pkg) {
@ -703,7 +730,8 @@ func showPkgbuildDiffs(bases []Base, cloned types.StringSet) error {
} else { } else {
hasDiff, err := gitHasDiff(config.BuildDir, pkg) hasDiff, err := gitHasDiff(config.BuildDir, pkg)
if err != nil { if err != nil {
return err errMulti.Add(err)
continue
} }
if !hasDiff { if !hasDiff {
@ -720,7 +748,8 @@ func showPkgbuildDiffs(bases []Base, cloned types.StringSet) error {
} }
err = show(passToGit(dir, args...)) err = show(passToGit(dir, args...))
if err != nil { if err != nil {
return err errMulti.Add(err)
continue
} }
} else { } else {
args := []string{"diff"} args := []string{"diff"}
@ -731,11 +760,15 @@ func showPkgbuildDiffs(bases []Base, cloned types.StringSet) error {
} }
args = append(args, "--no-index", "/var/empty", dir) args = append(args, "--no-index", "/var/empty", dir)
// git always returns 1. why? I have no idea // git always returns 1. why? I have no idea
show(passToGit(dir, args...)) err := show(passToGit(dir, args...))
if err != nil {
errMulti.Add(err)
continue
}
} }
} }
return nil return errMulti.Return()
} }
func editPkgbuilds(bases []Base, srcinfos map[string]*gosrc.Srcinfo) error { func editPkgbuilds(bases []Base, srcinfos map[string]*gosrc.Srcinfo) error {
@ -965,14 +998,22 @@ func buildInstallPkgbuilds(dp *depPool, do *depOrder, srcinfos map[string]*gosrc
} }
if installed { if installed {
show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch")) err = show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch"))
if err != nil {
return fmt.Errorf("Error making: %s", err)
}
fmt.Println(cyan(pkg+"-"+version) + bold(" is up to date -- skipping")) fmt.Println(cyan(pkg+"-"+version) + bold(" is up to date -- skipping"))
continue continue
} }
} }
if built { if built {
show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch")) err = show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch"))
if err != nil {
return fmt.Errorf("Error making: %s", err)
}
fmt.Println(bold(yellow(arrow)), fmt.Println(bold(yellow(arrow)),
cyan(pkg+"-"+version)+bold(" already made -- skipping build")) cyan(pkg+"-"+version)+bold(" already made -- skipping build"))
} else { } else {
@ -1021,9 +1062,15 @@ func buildInstallPkgbuilds(dp *depPool, do *depOrder, srcinfos map[string]*gosrc
} }
depArguments := makeArguments() depArguments := makeArguments()
depArguments.addArg("D", "asdeps") err = depArguments.addArg("D", "asdeps")
if err != nil {
return err
}
expArguments := makeArguments() expArguments := makeArguments()
expArguments.addArg("D", "asexplicit") err = expArguments.addArg("D", "asexplicit")
if err != nil {
return err
}
//remotenames: names of all non repo packages on the system //remotenames: names of all non repo packages on the system
_, _, localNames, remoteNames, err := filterPackages() _, _, localNames, remoteNames, err := filterPackages()

View file

@ -29,7 +29,10 @@ func init() {
data = getPgpKey(matches[1]) data = getPgpKey(matches[1])
} }
w.Header().Set("Content-Type", "application/pgp-keys") w.Header().Set("Content-Type", "application/pgp-keys")
w.Write([]byte(data)) _, err := w.Write([]byte(data))
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}) })
} }
@ -54,7 +57,10 @@ func startPgpKeyServer() *http.Server {
srv := &http.Server{Addr: fmt.Sprintf("127.0.0.1:%d", gpgServerPort)} srv := &http.Server{Addr: fmt.Sprintf("127.0.0.1:%d", gpgServerPort)}
go func() { go func() {
srv.ListenAndServe() err := srv.ListenAndServe()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}() }()
return srv return srv
} }
@ -70,7 +76,12 @@ func TestImportKeys(t *testing.T) {
config.GpgFlags = fmt.Sprintf("--homedir %s --keyserver 127.0.0.1", keyringDir) config.GpgFlags = fmt.Sprintf("--homedir %s --keyserver 127.0.0.1", keyringDir)
server := startPgpKeyServer() server := startPgpKeyServer()
defer server.Shutdown(context.TODO()) defer func() {
err := server.Shutdown(context.TODO())
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}()
casetests := []struct { casetests := []struct {
keys []string keys []string
@ -143,7 +154,12 @@ func TestCheckPgpKeys(t *testing.T) {
config.GpgFlags = fmt.Sprintf("--homedir %s --keyserver 127.0.0.1", keyringDir) config.GpgFlags = fmt.Sprintf("--homedir %s --keyserver 127.0.0.1", keyringDir)
server := startPgpKeyServer() server := startPgpKeyServer()
defer server.Shutdown(context.TODO()) defer func() {
err := server.Shutdown(context.TODO())
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}()
casetests := []struct { casetests := []struct {
pkgs Base pkgs Base

View file

@ -214,7 +214,10 @@ func main() {
exitOnError(initConfig()) exitOnError(initConfig())
exitOnError(cmdArgs.parseCommandLine()) exitOnError(cmdArgs.parseCommandLine())
if shouldSaveConfig { if shouldSaveConfig {
config.saveConfig() err := config.saveConfig()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
} }
config.expandEnv() config.expandEnv()
exitOnError(initBuildDir()) exitOnError(initBuildDir())

View file

@ -757,7 +757,11 @@ func (parser *arguments) parseCommandLine() (err error) {
usedNext := false usedNext := false
if len(args) < 1 { if len(args) < 1 {
parser.parseShortOption("-Syu", "") _, err = parser.parseShortOption("-Syu", "")
if err != nil {
return
}
} else { } else {
for k, arg := range args { for k, arg := range args {
var nextArg string var nextArg string

View file

@ -36,7 +36,10 @@ func Update(alpmHandle *alpm.Handle, aurURL string, cacheDir string, interval in
info, err := os.Stat(path) info, err := os.Stat(path)
if os.IsNotExist(err) || (interval != -1 && time.Since(info.ModTime()).Hours() >= float64(interval*24)) || force { if os.IsNotExist(err) || (interval != -1 && time.Since(info.ModTime()).Hours() >= float64(interval*24)) || force {
os.MkdirAll(filepath.Dir(path), 0755) errd := os.MkdirAll(filepath.Dir(path), 0755)
if errd != nil {
return errd
}
out, errf := os.Create(path) out, errf := os.Create(path)
if errf != nil { if errf != nil {
return errf return errf

View file

@ -265,7 +265,7 @@ func queryRepo(pkgInputN []string) (s repoQuery, err error) {
return return
} }
dbList.ForEach(func(db alpm.DB) error { _ = dbList.ForEach(func(db alpm.DB) error {
if len(pkgInputN) == 0 { if len(pkgInputN) == 0 {
pkgs := db.PkgCache() pkgs := db.PkgCache()
s = append(s, pkgs.Slice()...) s = append(s, pkgs.Slice()...)
@ -353,13 +353,13 @@ func hangingPackages(removeOptional bool) (hanging []string, err error) {
safePackages[pkg.Name()] = 0 safePackages[pkg.Name()] = 0
} }
pkg.Provides().ForEach(func(dep alpm.Depend) error { _ = pkg.Provides().ForEach(func(dep alpm.Depend) error {
provides.Add(dep.Name, pkg.Name()) provides.Add(dep.Name, pkg.Name())
return nil return nil
}) })
return nil return nil
} }
packages.ForEach(setupResources) _ = packages.ForEach(setupResources)
iterateAgain := true iterateAgain := true
processDependencies := func(pkg alpm.Package) error { processDependencies := func(pkg alpm.Package) error {
@ -394,20 +394,20 @@ func hangingPackages(removeOptional bool) (hanging []string, err error) {
return nil return nil
} }
pkg.Depends().ForEach(markDependencies) _ = pkg.Depends().ForEach(markDependencies)
if !removeOptional { if !removeOptional {
pkg.OptionalDepends().ForEach(markDependencies) _ = pkg.OptionalDepends().ForEach(markDependencies)
} }
return nil return nil
} }
for iterateAgain { for iterateAgain {
iterateAgain = false iterateAgain = false
packages.ForEach(processDependencies) _ = packages.ForEach(processDependencies)
} }
// Build list of packages to be removed // Build list of packages to be removed
packages.ForEach(func(pkg alpm.Package) error { _ = packages.ForEach(func(pkg alpm.Package) error {
if safePackages[pkg.Name()] == 0 { if safePackages[pkg.Name()] == 0 {
hanging = append(hanging, pkg.Name()) hanging = append(hanging, pkg.Name())
} }

37
testdata/travis.sh vendored
View file

@ -1,35 +1,50 @@
#!/bin/bash #!/bin/bash
set -evx #set -evx
# Objective of this script is to be the most vendor agnostic possible # Objective of this script is to be the most vendor agnostic possible
# It builds and tests yay independently of hardware # It builds and tests yay independently of hardware
export VERSION=$(git describe --long --tags | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g') VERSION="$(git describe --long --tags | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g')"
export VERSION
export ARCH="x86_64" export ARCH="x86_64"
echo '::set-env name=VERSION::$VERSION'
echo '::set-env name=ARCH::$ARCH'
docker build --build-arg BUILD_ARCH=${ARCH} --target builder_env -t yay-builder_env . docker build --build-arg BUILD_ARCH=${ARCH} --target builder_env -t yay-builder_env . || exit $?
docker build --build-arg BUILD_ARCH=${ARCH} --target builder -t yay-builder . docker build --build-arg BUILD_ARCH=${ARCH} --target builder -t yay-builder . || exit $?
# Our unit test and packaging container # Our unit test and packaging container
docker run --name yay-go-tests yay-builder_env:latest make test docker run --name yay-go-tests yay-builder_env:latest make test
rc=$?
docker rm yay-go-tests docker rm yay-go-tests
# docker run yay-builder make lint if [[ $rc != 0 ]]; then
exit $rc
fi
# Lint project
docker run --name yay-go-lint yay-builder_env:latest make lint
rc=$?
docker rm yay-go-lint
if [[ $rc != 0 ]]; then
exit $rc
fi
# Build image for integration testing # Build image for integration testing
docker build -t yay . # docker build -t yay . || exit $?
# Do integration testing # Do integration testing
# TODO # TODO
# Create a release asset # Create a release asset
docker run --name artifact_factory yay-builder make release ARCH=${ARCH} VERSION=${VERSION} docker run --name artifact_factory yay-builder make release ARCH=${ARCH} VERSION="${VERSION}"
rc=$?
if [[ $rc != 0 ]]; then
docker rm artifact_factory
exit $rc
fi
# Copy bin and release to artifacts folder # Copy bin and release to artifacts folder
mkdir artifacts mkdir artifacts
docker cp artifact_factory:/app/yay_${VERSION}_${ARCH}.tar.gz ./artifacts/ docker cp artifact_factory:/app/yay_"${VERSION}"_${ARCH}.tar.gz ./artifacts/
# Cleanup docker # Cleanup docker
docker rm artifact_factory docker rm artifact_factory

View file

@ -302,10 +302,15 @@ func upRepo(local []alpm.Package) (upSlice, error) {
return slice, err return slice, err
} }
defer alpmHandle.TransRelease() defer func() {
err = alpmHandle.TransRelease()
}()
alpmHandle.SyncSysupgrade(cmdArgs.existsDouble("u", "sysupgrade")) err = alpmHandle.SyncSysupgrade(cmdArgs.existsDouble("u", "sysupgrade"))
alpmHandle.TransGetAdd().ForEach(func(pkg alpm.Package) error { if err != nil {
return slice, err
}
_ = alpmHandle.TransGetAdd().ForEach(func(pkg alpm.Package) error {
localVer := "-" localVer := "-"
if localPkg := localDB.Pkg(pkg.Name()); localPkg != nil { if localPkg := localDB.Pkg(pkg.Name()); localPkg != nil {

21
vcs.go
View file

@ -39,8 +39,15 @@ func createDevelDB() error {
bases := getBases(info) bases := getBases(info)
toSkip := pkgbuildsToSkip(bases, types.SliceToStringSet(remoteNames)) toSkip := pkgbuildsToSkip(bases, types.SliceToStringSet(remoteNames))
downloadPkgbuilds(bases, toSkip, config.BuildDir) _, err = downloadPkgbuilds(bases, toSkip, config.BuildDir)
srcinfos, _ := parseSrcinfoFiles(bases, false) if err != nil {
return err
}
srcinfos, err := parseSrcinfoFiles(bases, false)
if err != nil {
return err
}
for _, pkgbuild := range srcinfos { for _, pkgbuild := range srcinfos {
for _, pkg := range pkgbuild.Packages { for _, pkg := range pkgbuild.Packages {
@ -134,7 +141,10 @@ func updateVCSData(pkgName string, sources []gosrc.ArchString, mux *sync.Mutex,
savedInfo[pkgName] = info savedInfo[pkgName] = info
fmt.Println(bold(yellow(arrow)) + " Found git repo: " + cyan(url)) fmt.Println(bold(yellow(arrow)) + " Found git repo: " + cyan(url))
saveVCSInfo() err := saveVCSInfo()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
mux.Unlock() mux.Unlock()
} }
@ -163,7 +173,10 @@ func getCommit(url string, branch string, protocols []string) string {
//machine but using http:// instead of git does not hang. //machine but using http:// instead of git does not hang.
//Introduce a time out so this can not hang //Introduce a time out so this can not hang
timer := time.AfterFunc(5*time.Second, func() { timer := time.AfterFunc(5*time.Second, func() {
cmd.Process.Kill() err = cmd.Process.Kill()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}) })
err = cmd.Wait() err = cmd.Wait()