diff options
author | rillig <rillig@pkgsrc.org> | 2022-01-16 19:14:51 +0000 |
---|---|---|
committer | rillig <rillig@pkgsrc.org> | 2022-01-16 19:14:51 +0000 |
commit | d5ba8b2ed2583416991bb5464d7e93e13976f706 (patch) | |
tree | 07497b5a3f057e06c0614b6897fe33117363c39c /pkgtools/pkglint/files/category.go | |
parent | 492eedcedc27c7891a0b63f52059cb15f1da7711 (diff) | |
download | pkgsrc-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.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...) - } + }) } |