diff --git a/proto_package.go b/proto_package.go index 7cb0e0c..199e061 100644 --- a/proto_package.go +++ b/proto_package.go @@ -445,6 +445,8 @@ func (p *ProtoPackage) isAvailable(h *alpm.Handle) bool { } buildManager.alpmMutex.Lock() + defer buildManager.alpmMutex.Unlock() + var pkg alpm.IPackage switch { case p.Srcinfo != nil: @@ -458,14 +460,16 @@ func (p *ProtoPackage) isAvailable(h *alpm.Handle) bool { res, err = cmd.Output() if err != nil { log.Warningf("error getting packages from pacsift for %s: %v", p.Pkgbase, err) - buildManager.alpmMutex.Unlock() return false } else if len(res) == 0 { - buildManager.alpmMutex.Unlock() return false } - if len(strings.Split(strings.TrimSpace(string(res)), "\n")) > 0 { - pacsiftLines := strings.Split(strings.TrimSpace(string(res)), "\n") + + // workaround for https://github.com/andrewgregory/pacutils/issues/66 + // TODO: remove once fixed + rRes := reReplacePacsiftWarning.ReplaceAllString(string(res), "") + if len(strings.Split(strings.TrimSpace(rRes), "\n")) > 0 { + pacsiftLines := strings.Split(strings.TrimSpace(rRes), "\n") var splitPkgs []string for _, line := range pacsiftLines { @@ -478,11 +482,9 @@ func (p *ProtoPackage) isAvailable(h *alpm.Handle) bool { pkg, err = dbs.FindSatisfier(splitPkgs[0]) } else { log.Warningf("error getting packages from pacsift for %s", p.Pkgbase) - buildManager.alpmMutex.Unlock() return false } } - buildManager.alpmMutex.Unlock() if err != nil { log.Debugf("error resolving %s: %v", p.Pkgbase, err) return false diff --git a/utils.go b/utils.go index 7df8246..15b2134 100644 --- a/utils.go +++ b/utils.go @@ -36,21 +36,22 @@ const ( ) var ( - reVar = regexp.MustCompile(`(?mU)^#?[^\S\r\n]*(\w+)[^\S\r\n]*=[^\S\r\n]*([("])([^)"]*)([)"])[^\S\r\n]*$`) - reEnvClean = regexp.MustCompile(`(?m) ([\s\\]+) `) - rePkgRel = regexp.MustCompile(`(?m)^pkgrel\s*=\s*(.+)$`) - rePkgFile = regexp.MustCompile(`^(.+)(?:-.+){2}-(?:x86_64|any)\.pkg\.tar\.zst(?:\.sig)*$`) - reLdError = regexp.MustCompile(`(?mi).*collect2: error: ld returned (\d+) exit status.*`) - reDownloadError = regexp.MustCompile(`(?m)^error: could not rename .+$`) - reDownloadError2 = regexp.MustCompile(`(?m)^error: failed retrieving file '.+' from .*: The requested URL returned error: .+$`) - rePortError = regexp.MustCompile(`(?m)^OSError: \x5bErrno 98\x5d Address already in use$`) - reSigError = regexp.MustCompile(`(?m)^error: .*: signature from .* is invalid$`) - reRustLTOError = regexp.MustCompile(`(?m)^error: options \x60-C (.+)\x60 and \x60-C lto\x60 are incompatible$`) - reReplaceSinglePlus = regexp.MustCompile(`(?m)([a-zA-Z0-9]+)\+([a-zA-Z]+)`) - reReplaceRemainingPlus = regexp.MustCompile(`(?m)\+`) - reReplaceSpecialChars = regexp.MustCompile(`(?m)[^a-zA-Z0-9_\-.]`) - reReplaceUnderscore = regexp.MustCompile(`(?m)[_\-]{2,}`) - reReplaceTree = regexp.MustCompile(`(?m)^tree$`) + reVar = regexp.MustCompile(`(?mU)^#?[^\S\r\n]*(\w+)[^\S\r\n]*=[^\S\r\n]*([("])([^)"]*)([)"])[^\S\r\n]*$`) + reEnvClean = regexp.MustCompile(`(?m) ([\s\\]+) `) + rePkgRel = regexp.MustCompile(`(?m)^pkgrel\s*=\s*(.+)$`) + rePkgFile = regexp.MustCompile(`^(.+)(?:-.+){2}-(?:x86_64|any)\.pkg\.tar\.zst(?:\.sig)*$`) + reLdError = regexp.MustCompile(`(?mi).*collect2: error: ld returned (\d+) exit status.*`) + reDownloadError = regexp.MustCompile(`(?m)^error: could not rename .+$`) + reDownloadError2 = regexp.MustCompile(`(?m)^error: failed retrieving file '.+' from .*: The requested URL returned error: .+$`) + rePortError = regexp.MustCompile(`(?m)^OSError: \x5bErrno 98\x5d Address already in use$`) + reSigError = regexp.MustCompile(`(?m)^error: .*: signature from .* is invalid$`) + reRustLTOError = regexp.MustCompile(`(?m)^error: options \x60-C (.+)\x60 and \x60-C lto\x60 are incompatible$`) + reReplaceSinglePlus = regexp.MustCompile(`(?m)([a-zA-Z0-9]+)\+([a-zA-Z]+)`) + reReplaceRemainingPlus = regexp.MustCompile(`(?m)\+`) + reReplaceSpecialChars = regexp.MustCompile(`(?m)[^a-zA-Z0-9_\-.]`) + reReplaceUnderscore = regexp.MustCompile(`(?m)[_\-]{2,}`) + reReplaceTree = regexp.MustCompile(`(?m)^tree$`) + reReplacePacsiftWarning = regexp.MustCompile(`^warning:.*\n`) ) type Conf struct {