summaryrefslogtreecommitdiff
path: root/pkgtools/pkglint/files/category.go
diff options
context:
space:
mode:
authorrillig <rillig@pkgsrc.org>2022-01-16 19:14:51 +0000
committerrillig <rillig@pkgsrc.org>2022-01-16 19:14:51 +0000
commitd5ba8b2ed2583416991bb5464d7e93e13976f706 (patch)
tree07497b5a3f057e06c0614b6897fe33117363c39c /pkgtools/pkglint/files/category.go
parent492eedcedc27c7891a0b63f52059cb15f1da7711 (diff)
downloadpkgsrc-d5ba8b2ed2583416991bb5464d7e93e13976f706.tar.gz
pkgtools/pkglint: update to 21.4.2
Changes since 21.4.1: When checking a package, check for naming collision with other packages from the same category, on case-insensitive file systems. For packages from pkgsrc-wip, additionally perform the same check for the main category of the package, to prepare for importing the package.
Diffstat (limited to 'pkgtools/pkglint/files/category.go')
-rw-r--r--pkgtools/pkglint/files/category.go37
1 files changed, 29 insertions, 8 deletions
diff --git a/pkgtools/pkglint/files/category.go b/pkgtools/pkglint/files/category.go
index 1d5f9aae33a..1ddc3da5dca 100644
--- a/pkgtools/pkglint/files/category.go
+++ b/pkgtools/pkglint/files/category.go
@@ -5,7 +5,7 @@ import (
"strings"
)
-func CheckdirCategory(dir CurrPath) {
+func CheckdirCategory(dir CurrPath, recurse bool) {
if trace.Tracing {
defer trace.Call(dir)()
}
@@ -48,6 +48,7 @@ func CheckdirCategory(dir CurrPath) {
var fSubdirs []RelPath
var mSubdirs []subdir
+ var recurseInto []CurrPath
for _, subdir := range getSubdirs(dir) {
if dir.JoinNoClean(subdir).JoinNoClean("Makefile").IsFile() {
@@ -96,6 +97,9 @@ func CheckdirCategory(dir CurrPath) {
}
mSubdirs = append(mSubdirs, subdir{sub, mkline})
+ if recurse && !mkline.IsCommentedVarassign() {
+ recurseInto = append(recurseInto, dir.JoinNoClean(sub))
+ }
} else {
if !mkline.IsEmpty() {
@@ -168,13 +172,30 @@ func CheckdirCategory(dir CurrPath) {
mklines.SaveAutofixChanges()
- if G.Recursive {
- var recurseInto []CurrPath
- for _, msub := range mSubdirs {
- if !msub.line.IsCommentedVarassign() {
- recurseInto = append(recurseInto, dir.JoinNoClean(msub.name))
+ G.Todo.PushFront(recurseInto...)
+}
+
+func CheckPackageDirCollision(dir CurrPath, pkgdir RelPath) {
+ mklines := LoadMk(dir.JoinNoClean("Makefile").CleanDot(), nil, 0)
+ if mklines == nil {
+ return
+ }
+
+ lowerPkgdir := strings.ToLower(pkgdir.String())
+ mklines.ForEach(func(mkline *MkLine) {
+ if mkline.IsVarassignMaybeCommented() && mkline.Varname() == "SUBDIR" {
+ value := NewPath(mkline.Value())
+ if value.IsAbs() {
+ return
+ }
+ sub := NewRelPath(value)
+ lowerSub := strings.ToLower(sub.String())
+ if lowerSub == lowerPkgdir && sub != pkgdir {
+ // TODO: Merge duplicate code from CheckdirCategory.
+ mkline.Errorf("On case-insensitive file systems, "+
+ "%q is the same as %q.",
+ sub, pkgdir)
}
}
- G.Todo.PushFront(recurseInto...)
- }
+ })
}