summaryrefslogtreecommitdiff
path: root/pkgtools/pkglint/files/category.go
diff options
context:
space:
mode:
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...)
- }
+ })
}