pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/pkgtools/pkglint/files pkgtools/pkglint: update to 5.6.10
details: https://anonhg.NetBSD.org/pkgsrc/rev/79e7ac997e40
branches: trunk
changeset: 316858:79e7ac997e40
user: rillig <rillig%pkgsrc.org@localhost>
date: Fri Dec 21 08:05:24 2018 +0000
description:
pkgtools/pkglint: update to 5.6.10
Changes since 5.6.9:
* ALTERNATIVES files are correctly checked now. Before, pkglint had
suggested to remove the @PREFIX/ from the alternative, which was
wrong and simply didn't work.
* Diagnostics about variable assignments are ordered to report the
left-hand side first and then everything to the right of the
assignment operator.
* The pkglint output is escaped properly to avoid sending unwanted
escape sequences to the terminal.
* The items in .for loops are parsed taking "double" and 'single'
quotes into account since bmake does it in the same way since 2015.
* In DESCR files, overly long lines are only warned about if they
contain a space and therefore can be made shorter.
* In DESCR files, text like ${PREFIX} only gets a note if it refers
to a commonly known pkgsrc variable. This avoids distraction when
a package mentions ${prefix}/bin or ${template.property}.
* Lots of refactorings and small changes.
diffstat:
pkgtools/pkglint/files/alternatives.go | 86 +++++++---
pkgtools/pkglint/files/alternatives_test.go | 30 ++-
pkgtools/pkglint/files/autofix_test.go | 6 +-
pkgtools/pkglint/files/buildlink3.go | 4 +-
pkgtools/pkglint/files/buildlink3_test.go | 62 ++++----
pkgtools/pkglint/files/category_test.go | 2 +-
pkgtools/pkglint/files/check_test.go | 2 +-
pkgtools/pkglint/files/distinfo.go | 4 +-
pkgtools/pkglint/files/distinfo_test.go | 24 +-
pkgtools/pkglint/files/line.go | 15 +-
pkgtools/pkglint/files/linechecker.go | 20 +-
pkgtools/pkglint/files/linechecker_test.go | 13 +
pkgtools/pkglint/files/lines_test.go | 12 +-
pkgtools/pkglint/files/logging.go | 2 +-
pkgtools/pkglint/files/logging_test.go | 9 +-
pkgtools/pkglint/files/mkline_test.go | 12 +-
pkgtools/pkglint/files/mklinechecker.go | 117 ++++++---------
pkgtools/pkglint/files/mklinechecker_test.go | 38 +++-
pkgtools/pkglint/files/mklines.go | 4 +-
pkgtools/pkglint/files/mktypes.go | 4 +-
pkgtools/pkglint/files/options.go | 4 +-
pkgtools/pkglint/files/options_test.go | 12 +-
pkgtools/pkglint/files/package.go | 4 +-
pkgtools/pkglint/files/package_test.go | 48 +++---
pkgtools/pkglint/files/patches.go | 4 +-
pkgtools/pkglint/files/patches_test.go | 110 +++++++-------
pkgtools/pkglint/files/pkglint.go | 205 +++++++++++++++-----------
pkgtools/pkglint/files/pkglint_test.go | 180 +++++++++++------------
pkgtools/pkglint/files/pkgsrc.go | 2 +-
pkgtools/pkglint/files/pkgsrc_test.go | 22 +-
pkgtools/pkglint/files/pkgver/vercmp.go | 5 +-
pkgtools/pkglint/files/plist.go | 8 +-
pkgtools/pkglint/files/plist_test.go | 70 ++++----
pkgtools/pkglint/files/shell.go | 9 +-
pkgtools/pkglint/files/shell_test.go | 6 +-
pkgtools/pkglint/files/substcontext.go | 2 +-
pkgtools/pkglint/files/substcontext_test.go | 2 +-
pkgtools/pkglint/files/tools.go | 4 +-
pkgtools/pkglint/files/tools_test.go | 2 +-
pkgtools/pkglint/files/trace/tracing.go | 10 +-
pkgtools/pkglint/files/util.go | 15 +-
pkgtools/pkglint/files/util_test.go | 5 +-
pkgtools/pkglint/files/vardefs.go | 72 ++++----
pkgtools/pkglint/files/vardefs_test.go | 8 +-
pkgtools/pkglint/files/vartype.go | 10 +-
pkgtools/pkglint/files/vartype_test.go | 2 +-
pkgtools/pkglint/files/vartypecheck.go | 8 +-
pkgtools/pkglint/files/vartypecheck_test.go | 4 +
48 files changed, 696 insertions(+), 603 deletions(-)
diffs (truncated from 4011 to 300 lines):
diff -r a54f6b35c715 -r 79e7ac997e40 pkgtools/pkglint/files/alternatives.go
--- a/pkgtools/pkglint/files/alternatives.go Fri Dec 21 07:06:03 2018 +0000
+++ b/pkgtools/pkglint/files/alternatives.go Fri Dec 21 08:05:24 2018 +0000
@@ -1,8 +1,11 @@
package pkglint
-import "strings"
+import (
+ "netbsd.org/pkglint/textproc"
+ "strings"
+)
-func CheckfileAlternatives(filename string) {
+func CheckFileAlternatives(filename string) {
lines := Load(filename, NotEmpty|LogErrors)
if lines == nil {
return
@@ -13,35 +16,64 @@
plist = G.Pkg.Plist
}
- for _, line := range lines.Lines {
- if m, wrapper, space, alternative := match3(line.Text, `^([^\t ]+)([ \t]+)([^\t ]+)`); m {
- if plist.Files != nil {
- if plist.Files[wrapper] {
- line.Errorf("Alternative wrapper %q must not appear in the PLIST.", wrapper)
- }
+ checkPlistWrapper := func(line Line, wrapper string) {
+ if plist.Files[wrapper] {
+ line.Errorf("Alternative wrapper %q must not appear in the PLIST.", wrapper)
+ }
+ }
+
+ checkPlistAlternative := func(line Line, alternative string) {
+ relImplementation := strings.Replace(alternative, "@PREFIX@/", "", 1)
+ plistName := replaceAll(relImplementation, `@(\w+)@`, "${$1}")
+ if plist.Files[plistName] || G.Pkg.vars.Defined("ALTERNATIVES_SRC") {
+ return
+ }
+
+ switch {
- relImplementation := strings.Replace(alternative, "@PREFIX@/", "", 1)
- plistName := replaceAll(relImplementation, `@(\w+)@`, "${$1}")
- if !plist.Files[plistName] && !G.Pkg.vars.Defined("ALTERNATIVES_SRC") {
- if plistName != alternative {
- line.Errorf("Alternative implementation %q must appear in the PLIST as %q.", alternative, plistName)
- } else {
- line.Errorf("Alternative implementation %q must appear in the PLIST.", alternative)
- }
- }
- }
+ case hasPrefix(alternative, "/"):
+ // It's possible but unusual to refer to a fixed absolute path.
+ // These cannot be mentioned in the PLIST since they are not part of the package.
+ break
+
+ case plistName == alternative:
+ line.Errorf("Alternative implementation %q must appear in the PLIST.", alternative)
- fix := line.Autofix()
- fix.Notef("@PREFIX@/ can be omitted from the filename.")
- fix.Explain(
- "The alternative implementation is always interpreted relative to",
- "${PREFIX}.")
- fix.ReplaceAfter(space, "@PREFIX@/", "")
- fix.Apply()
- } else {
- line.Errorf("Invalid ALTERNATIVES line %q.", line.Text)
+ default:
+ line.Errorf("Alternative implementation %q must appear in the PLIST as %q.", alternative, plistName)
+ }
+ }
+
+ for _, line := range lines.Lines {
+ m, wrapper, space, alternative := match3(line.Text, `^([^\t ]+)([ \t]+)([^\t ]+)$`)
+ if !m {
+ line.Errorf("Invalid line %q.", line.Text)
G.Explain(
sprintf("Run %q for more information.", makeHelp("alternatives")))
+ continue
+ }
+
+ if plist.Files != nil {
+ checkPlistWrapper(line, wrapper)
+ checkPlistAlternative(line, alternative)
+ }
+
+ switch {
+ case hasPrefix(alternative, "/"), hasPrefix(alternative, "@"):
+ break
+
+ case textproc.NewLexer(alternative).NextByteSet(textproc.Alnum) != -1:
+ fix := line.Autofix()
+ fix.Errorf("Alternative implementation %q must be an absolute path.", alternative)
+ fix.Explain(
+ "It usually starts with @PREFIX@/... to refer to a path inside the installation prefix.")
+ fix.ReplaceAfter(space, alternative, "@PREFIX@/"+alternative)
+ fix.Apply()
+
+ default:
+ line.Errorf("Alternative implementation %q must be an absolute path.", alternative)
+ line.Explain(
+ "It usually starts with @PREFIX@/... to refer to a path inside the installation prefix.")
}
}
}
diff -r a54f6b35c715 -r 79e7ac997e40 pkgtools/pkglint/files/alternatives_test.go
--- a/pkgtools/pkglint/files/alternatives_test.go Fri Dec 21 07:06:03 2018 +0000
+++ b/pkgtools/pkglint/files/alternatives_test.go Fri Dec 21 08:05:24 2018 +0000
@@ -2,7 +2,7 @@
import "gopkg.in/check.v1"
-func (s *Suite) Test_CheckfileAlternatives__PLIST(c *check.C) {
+func (s *Suite) Test_CheckFileAlternatives__PLIST(c *check.C) {
t := s.Init(c)
t.SetupPackage("category/package")
@@ -12,26 +12,40 @@
"sbin/sendmail @PREFIX@/sbin/sendmail.exim@EXIMVER@",
"bin/echo bin/gnu-echo",
"bin/editor bin/vim -e",
- "invalid")
+ "invalid",
+ "bin/browser\t${PREFIX}/bin/firefox",
+ "highscores @VARBASE@/game/scores",
+ "sbin/init /sbin/init")
t.CreateFileLines("PLIST",
PlistRcsID,
"bin/echo",
"bin/vim",
"sbin/sendmail.exim${EXIMVER}")
- G.CheckDirent(".")
+ G.Check(".")
t.CheckOutputLines(
"ERROR: ALTERNATIVES:1: Alternative implementation \"@PREFIX@/sbin/sendmail.postfix@POSTFIXVER@\" "+
"must appear in the PLIST as \"sbin/sendmail.postfix${POSTFIXVER}\".",
- "NOTE: ALTERNATIVES:1: @PREFIX@/ can be omitted from the filename.",
- "NOTE: ALTERNATIVES:2: @PREFIX@/ can be omitted from the filename.",
"ERROR: ALTERNATIVES:3: Alternative wrapper \"bin/echo\" must not appear in the PLIST.",
"ERROR: ALTERNATIVES:3: Alternative implementation \"bin/gnu-echo\" must appear in the PLIST.",
- "ERROR: ALTERNATIVES:5: Invalid ALTERNATIVES line \"invalid\".")
+ "ERROR: ALTERNATIVES:3: Alternative implementation \"bin/gnu-echo\" must be an absolute path.",
+ "ERROR: ALTERNATIVES:4: Invalid line \"bin/editor bin/vim -e\".",
+ "ERROR: ALTERNATIVES:5: Invalid line \"invalid\".",
+ "ERROR: ALTERNATIVES:6: Alternative implementation \"${PREFIX}/bin/firefox\" must appear in the PLIST.",
+ "ERROR: ALTERNATIVES:6: Alternative implementation \"${PREFIX}/bin/firefox\" must be an absolute path.",
+ "ERROR: ALTERNATIVES:7: Alternative implementation \"@VARBASE@/game/scores\" "+
+ "must appear in the PLIST as \"${VARBASE}/game/scores\".")
+
+ t.SetupCommandLine("--autofix")
+
+ G.Check(".")
+
+ t.CheckOutputLines(
+ "AUTOFIX: ALTERNATIVES:3: Replacing \"bin/gnu-echo\" with \"@PREFIX@/bin/gnu-echo\".")
}
-func (s *Suite) Test_CheckfileAlternatives__empty(c *check.C) {
+func (s *Suite) Test_CheckFileAlternatives__empty(c *check.C) {
t := s.Init(c)
t.Chdir("category/package")
@@ -39,7 +53,7 @@
G.Pkg = NewPackage(".")
- CheckfileAlternatives("ALTERNATIVES")
+ CheckFileAlternatives("ALTERNATIVES")
t.CheckOutputLines(
"ERROR: ALTERNATIVES: Must not be empty.")
diff -r a54f6b35c715 -r 79e7ac997e40 pkgtools/pkglint/files/autofix_test.go
--- a/pkgtools/pkglint/files/autofix_test.go Fri Dec 21 07:06:03 2018 +0000
+++ b/pkgtools/pkglint/files/autofix_test.go Fri Dec 21 08:05:24 2018 +0000
@@ -865,8 +865,8 @@
G.Pkgsrc.LoadInfrastructure()
t.Chdir(".")
- G.CheckDirent("x11/xorg-cf-files")
- G.CheckDirent("x11/xorgproto")
+ G.Check("x11/xorg-cf-files")
+ G.Check("x11/xorgproto")
t.CheckOutputLines(
">\tPRE_XORGPROTO_LIST_MISSING =\tapplewmproto",
@@ -886,7 +886,7 @@
G.Pkgsrc.LoadInfrastructure()
t.Chdir(".")
- G.CheckDirent("print/tex-bibtex8")
+ G.Check("print/tex-bibtex8")
t.CheckOutputLines(
">\tMAKE_FLAGS+=\tCFLAGS=${CFLAGS.${PKGSRC_COMPILER}}",
diff -r a54f6b35c715 -r 79e7ac997e40 pkgtools/pkglint/files/buildlink3.go
--- a/pkgtools/pkglint/files/buildlink3.go Fri Dec 21 07:06:03 2018 +0000
+++ b/pkgtools/pkglint/files/buildlink3.go Fri Dec 21 08:05:24 2018 +0000
@@ -13,7 +13,7 @@
abi, api *DependencyPattern
}
-func ChecklinesBuildlink3Mk(mklines MkLines) {
+func CheckLinesBuildlink3Mk(mklines MkLines) {
(&Buildlink3Checker{mklines: mklines}).Check()
}
@@ -64,7 +64,7 @@
if G.Pkg != nil {
// TODO: Commenting this line doesn't make any test fail, but it should.
- G.Pkg.checklinesBuildlink3Inclusion(mklines)
+ G.Pkg.checkLinesBuildlink3Inclusion(mklines)
}
mklines.SaveAutofixChanges()
diff -r a54f6b35c715 -r 79e7ac997e40 pkgtools/pkglint/files/buildlink3_test.go
--- a/pkgtools/pkglint/files/buildlink3_test.go Fri Dec 21 07:06:03 2018 +0000
+++ b/pkgtools/pkglint/files/buildlink3_test.go Fri Dec 21 08:05:24 2018 +0000
@@ -2,7 +2,7 @@
import "gopkg.in/check.v1"
-func (s *Suite) Test_ChecklinesBuildlink3Mk__unfinished_url2pkg(c *check.C) {
+func (s *Suite) Test_CheckLinesBuildlink3Mk__unfinished_url2pkg(c *check.C) {
t := s.Init(c)
t.SetupVartypes()
@@ -27,7 +27,7 @@
"",
"BUILDLINK_TREE+=\t-Xbae")
- ChecklinesBuildlink3Mk(mklines)
+ CheckLinesBuildlink3Mk(mklines)
t.CheckOutputLines(
"ERROR: ~/category/package/buildlink3.mk:2: This comment indicates unfinished work (url2pkg).")
@@ -39,7 +39,7 @@
//
// Since then, pkglint also looks at files from mk/ when they are directly
// included, and therefore finds the default definition for PKGNAME.
-func (s *Suite) Test_ChecklinesBuildlink3Mk__name_mismatch_Haskell_incomplete(c *check.C) {
+func (s *Suite) Test_CheckLinesBuildlink3Mk__name_mismatch_Haskell_incomplete(c *check.C) {
t := s.Init(c)
t.SetupPackage("x11/hs-X11",
@@ -60,7 +60,7 @@
"",
"BUILDLINK_TREE+=\t-hs-X11")
- G.CheckDirent(".")
+ G.Check(".")
// This warning only occurs because pkglint cannot see mk/haskell.mk in this test.
t.CheckOutputLines(
@@ -73,7 +73,7 @@
//
// Since then, pkglint also looks at files from mk/ when they are directly
// included, and therefore finds the default definition for PKGNAME.
-func (s *Suite) Test_ChecklinesBuildlink3Mk__name_mismatch_Haskell_complete(c *check.C) {
+func (s *Suite) Test_CheckLinesBuildlink3Mk__name_mismatch_Haskell_complete(c *check.C) {
t := s.Init(c)
t.CreateFileLines("mk/haskell.mk",
@@ -99,12 +99,12 @@
"",
"BUILDLINK_TREE+=\t-hs-X11")
- G.CheckDirent(".")
+ G.Check(".")
t.CheckOutputEmpty()
}
-func (s *Suite) Test_ChecklinesBuildlink3Mk__name_mismatch_multiple_inclusion(c *check.C) {
+func (s *Suite) Test_CheckLinesBuildlink3Mk__name_mismatch_multiple_inclusion(c *check.C) {
t := s.Init(c)
t.SetupVartypes()
@@ -120,7 +120,7 @@
"",
"BUILDLINK_TREE+=\t-pkgbase1")
- ChecklinesBuildlink3Mk(mklines)
+ CheckLinesBuildlink3Mk(mklines)
t.CheckOutputLines(
"ERROR: buildlink3.mk:5: Package name mismatch between multiple-inclusion guard \"PKGBASE2\" "+
@@ -128,7 +128,7 @@
"WARN: buildlink3.mk:9: Definition of BUILDLINK_API_DEPENDS is missing.")
}
-func (s *Suite) Test_ChecklinesBuildlink3Mk__name_mismatch_abi_api(c *check.C) {
+func (s *Suite) Test_CheckLinesBuildlink3Mk__name_mismatch_abi_api(c *check.C) {
t := s.Init(c)
t.SetupVartypes()
Home |
Main Index |
Thread Index |
Old Index