diff options
Diffstat (limited to 'pkgtools/pkglint/files/category.go')
-rw-r--r-- | pkgtools/pkglint/files/category.go | 37 |
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...) - } + }) } |