pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/pkgtools/pkglint pkgtools/pkglint: update to 5.6.2



details:   https://anonhg.NetBSD.org/pkgsrc/rev/de0889b203c3
branches:  trunk
changeset: 384903:de0889b203c3
user:      rillig <rillig%pkgsrc.org@localhost>
date:      Wed Sep 05 17:56:22 2018 +0000

description:
pkgtools/pkglint: update to 5.6.2

Changes since 5.6.1:

* Improved checks that depend on whether bsd.prefs.mk is included or
  not.

* Improved checks for tools, whether they may be used at load time
  or at run time.

* Improved tokenizer for shell commands. $| is not a variable but a
  dollar followed by a pipe.

* Warnings about SUBST context are now shown by default.

* A warning is shown when a SUBST block is declared for *-configure
  but the package has defined USE_CONFIGURE=no.

* Don't warn about USE_TOOLS:= ${USE_TOOLS:Ntool}.

* Don't warn about using the ?= operator in buildlink3.mk files before
  including bsd.prefs.mk (for some more variables, but not all).

* Report an error for packages from main pkgsrc that have a TODO or
  README file. Packages should be simple enough that they don't need
  a README file and ready for production so that they don't need a TODO.

* Lots of small bug fixes and new tests.

diffstat:

 pkgtools/pkglint/Makefile                         |    4 +-
 pkgtools/pkglint/files/alternatives_test.go       |   20 +-
 pkgtools/pkglint/files/autofix.go                 |    8 +-
 pkgtools/pkglint/files/autofix_test.go            |  102 ++
 pkgtools/pkglint/files/buildlink3_test.go         |   44 +-
 pkgtools/pkglint/files/category_test.go           |   34 +-
 pkgtools/pkglint/files/check_test.go              |  109 +-
 pkgtools/pkglint/files/distinfo_test.go           |   18 +-
 pkgtools/pkglint/files/expecter.go                |   14 -
 pkgtools/pkglint/files/files_test.go              |   22 +-
 pkgtools/pkglint/files/getopt/getopt_test.go      |    2 +-
 pkgtools/pkglint/files/licenses.go                |    6 +-
 pkgtools/pkglint/files/licenses_test.go           |    3 +-
 pkgtools/pkglint/files/line.go                    |    3 +-
 pkgtools/pkglint/files/linechecker_test.go        |    6 +
 pkgtools/pkglint/files/logging.go                 |    9 +-
 pkgtools/pkglint/files/logging_test.go            |   60 +
 pkgtools/pkglint/files/mkline.go                  |  134 +--
 pkgtools/pkglint/files/mkline_test.go             |   50 +-
 pkgtools/pkglint/files/mklinechecker.go           |  242 +++--
 pkgtools/pkglint/files/mklinechecker_test.go      |  201 +++-
 pkgtools/pkglint/files/mklines.go                 |  120 +-
 pkgtools/pkglint/files/mklines_test.go            |  143 +++-
 pkgtools/pkglint/files/mklines_varalign_test.go   |   53 +-
 pkgtools/pkglint/files/mkparser.go                |    5 +-
 pkgtools/pkglint/files/mkparser_test.go           |    4 +-
 pkgtools/pkglint/files/mkshparser.go              |    2 +-
 pkgtools/pkglint/files/mkshparser_test.go         |   54 +-
 pkgtools/pkglint/files/mktypes_test.go            |    2 +-
 pkgtools/pkglint/files/options.go                 |    4 +-
 pkgtools/pkglint/files/options_test.go            |   10 +-
 pkgtools/pkglint/files/package.go                 |   58 +-
 pkgtools/pkglint/files/package_test.go            |  146 +++-
 pkgtools/pkglint/files/parser_test.go             |    2 +-
 pkgtools/pkglint/files/patches.go                 |   34 +-
 pkgtools/pkglint/files/patches_test.go            |  182 ++++-
 pkgtools/pkglint/files/pkglint.go                 |  158 +++-
 pkgtools/pkglint/files/pkglint_test.go            |  360 +++++++-
 pkgtools/pkglint/files/pkgsrc.go                  |  236 ++++-
 pkgtools/pkglint/files/pkgsrc_test.go             |  125 ++-
 pkgtools/pkglint/files/plist.go                   |  143 +-
 pkgtools/pkglint/files/plist_test.go              |  238 +++++
 pkgtools/pkglint/files/shell.go                   |  128 +-
 pkgtools/pkglint/files/shell_test.go              |  206 ++++-
 pkgtools/pkglint/files/shtokenizer.go             |   83 +-
 pkgtools/pkglint/files/shtokenizer_test.go        |   18 +-
 pkgtools/pkglint/files/shtypes.go                 |    2 +-
 pkgtools/pkglint/files/shtypes_test.go            |    2 +-
 pkgtools/pkglint/files/substcontext.go            |   77 +-
 pkgtools/pkglint/files/substcontext_test.go       |   80 ++
 pkgtools/pkglint/files/textproc/prefixreplacer.go |   18 +
 pkgtools/pkglint/files/tools.go                   |  356 ++++++-
 pkgtools/pkglint/files/tools_test.go              |  422 ++++++++++-
 pkgtools/pkglint/files/trace/tracing.go           |   79 +-
 pkgtools/pkglint/files/trace/tracing_test.go      |   78 +
 pkgtools/pkglint/files/util.go                    |   82 +-
 pkgtools/pkglint/files/util_test.go               |  135 +++-
 pkgtools/pkglint/files/vardefs.go                 |   63 +-
 pkgtools/pkglint/files/vardefs_test.go            |    5 +-
 pkgtools/pkglint/files/vartype.go                 |   22 +-
 pkgtools/pkglint/files/vartype_test.go            |   13 +-
 pkgtools/pkglint/files/vartypecheck.go            |  104 +-
 pkgtools/pkglint/files/vartypecheck_test.go       |  878 +++++++++++++++++----
 63 files changed, 4605 insertions(+), 1416 deletions(-)

diffs (truncated from 9321 to 300 lines):

diff -r a6f48c336260 -r de0889b203c3 pkgtools/pkglint/Makefile
--- a/pkgtools/pkglint/Makefile Wed Sep 05 17:01:03 2018 +0000
+++ b/pkgtools/pkglint/Makefile Wed Sep 05 17:56:22 2018 +0000
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.547 2018/08/16 20:41:42 rillig Exp $
+# $NetBSD: Makefile,v 1.548 2018/09/05 17:56:22 rillig Exp $
 
-PKGNAME=       pkglint-5.6.1
+PKGNAME=       pkglint-5.6.2
 DISTFILES=     # none
 CATEGORIES=    pkgtools
 
diff -r a6f48c336260 -r de0889b203c3 pkgtools/pkglint/files/alternatives_test.go
--- a/pkgtools/pkglint/files/alternatives_test.go       Wed Sep 05 17:01:03 2018 +0000
+++ b/pkgtools/pkglint/files/alternatives_test.go       Wed Sep 05 17:56:22 2018 +0000
@@ -10,7 +10,8 @@
                "sbin/sendmail @PREFIX@/sbin/sendmail.postfix@POSTFIXVER@",
                "sbin/sendmail @PREFIX@/sbin/sendmail.exim@EXIMVER@",
                "bin/echo bin/gnu-echo",
-               "bin/editor bin/vim -e")
+               "bin/editor bin/vim -e",
+               "invalid")
 
        G.Pkg = NewPackage(".")
        G.Pkg.PlistFiles["bin/echo"] = true
@@ -24,5 +25,20 @@
                "NOTE: ALTERNATIVES:1: @PREFIX@/ can be omitted from the file name.",
                "NOTE: ALTERNATIVES:2: @PREFIX@/ can be omitted from the file name.",
                "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:3: Alternative implementation \"bin/gnu-echo\" must appear in the PLIST.",
+               "ERROR: ALTERNATIVES:5: Invalid ALTERNATIVES line \"invalid\".")
 }
+
+func (s *Suite) Test_CheckfileAlternatives__empty(c *check.C) {
+       t := s.Init(c)
+
+       t.Chdir("category/package")
+       t.SetupFileLines("ALTERNATIVES")
+
+       G.Pkg = NewPackage(".")
+
+       CheckfileAlternatives("ALTERNATIVES", G.Pkg.PlistFiles)
+
+       t.CheckOutputLines(
+               "ERROR: ALTERNATIVES: Must not be empty.")
+}
diff -r a6f48c336260 -r de0889b203c3 pkgtools/pkglint/files/autofix.go
--- a/pkgtools/pkglint/files/autofix.go Wed Sep 05 17:01:03 2018 +0000
+++ b/pkgtools/pkglint/files/autofix.go Wed Sep 05 17:56:22 2018 +0000
@@ -139,7 +139,7 @@
                if (oldWidth == 0 || width < oldWidth) && width >= 8 && rawLine.textnl != "\n" {
                        oldWidth = width
                }
-               if !regex.Matches(space, `^\t* {0,7}`) {
+               if !regex.Matches(space, `^\t* {0,7}$`) {
                        normalized = false
                }
        }
@@ -346,12 +346,14 @@
                }
                err := ioutil.WriteFile(tmpname, []byte(text), 0666)
                if err != nil {
-                       NewLineWhole(tmpname).Errorf("Cannot write.")
+                       logs(llError, tmpname, "", "Cannot write: %s", "Cannot write: "+err.Error())
                        continue
                }
                err = os.Rename(tmpname, fname)
                if err != nil {
-                       NewLineWhole(fname).Errorf("Cannot overwrite with auto-fixed content.")
+                       logs(llError, tmpname, "",
+                               "Cannot overwrite with auto-fixed content: %s",
+                               "Cannot overwrite with auto-fixed content: "+err.Error())
                        continue
                }
                autofixed = true
diff -r a6f48c336260 -r de0889b203c3 pkgtools/pkglint/files/autofix_test.go
--- a/pkgtools/pkglint/files/autofix_test.go    Wed Sep 05 17:01:03 2018 +0000
+++ b/pkgtools/pkglint/files/autofix_test.go    Wed Sep 05 17:56:22 2018 +0000
@@ -2,6 +2,8 @@
 
 import (
        "gopkg.in/check.v1"
+       "os"
+       "runtime"
        "strings"
 )
 
@@ -469,6 +471,8 @@
        fix.InsertBefore("before")
        fix.InsertAfter("after")
        fix.Delete()
+       fix.Custom(func(printAutofix, autofix bool) {})
+       fix.Realign(dummyMkLine, 32)
        fix.Apply()
 
        SaveAutofixChanges(lines)
@@ -478,3 +482,101 @@
                "111 222 333 444 555")
        c.Check(lines[0].raw[0].textnl, equals, "111 222 333 444 555\n")
 }
+
+func (s *Suite) Test_Autofix_Apply__panic(c *check.C) {
+       t := s.Init(c)
+
+       line := t.NewLine("filename", 123, "text")
+
+       c.Assert(func() {
+               fix := line.Autofix()
+               fix.Apply()
+       }, check.Panics, "Each autofix must have a diagnostic.")
+
+       c.Assert(func() {
+               fix := line.Autofix()
+               fix.Replace("from", "to")
+               fix.Apply()
+       }, check.Panics, "Autofix: The diagnostic must be given before the action.")
+
+       c.Assert(func() {
+               fix := line.Autofix()
+               fix.Warnf("Warning without period")
+               fix.Apply()
+       }, check.Panics, "Autofix: format \"Warning without period\" must end with a period.")
+}
+
+func (s *Suite) Test_Autofix_Apply__file_removed(c *check.C) {
+       t := s.Init(c)
+
+       t.SetupCommandLine("--autofix")
+       lines := t.SetupFileLines("subdir/file.txt",
+               "line 1")
+       os.RemoveAll(t.File("subdir"))
+
+       fix := lines[0].Autofix()
+       fix.Warnf("Should start with an uppercase letter.")
+       fix.Replace("line", "Line")
+       fix.Apply()
+
+       SaveAutofixChanges(lines)
+
+       c.Check(t.Output(), check.Matches, ""+
+               "AUTOFIX: ~/subdir/file.txt:1: Replacing \"line\" with \"Line\".\n"+
+               "ERROR: ~/subdir/file.txt.pkglint.tmp: Cannot write: .*\n")
+}
+
+func (s *Suite) Test_Autofix_Apply__file_busy_Windows(c *check.C) {
+       t := s.Init(c)
+
+       if runtime.GOOS != "windows" {
+               return
+       }
+
+       t.SetupCommandLine("--autofix")
+       lines := t.SetupFileLines("subdir/file.txt",
+               "line 1")
+
+       // As long as the file is kept open, it cannot be overwritten or deleted.
+       openFile, err := os.OpenFile(t.File("subdir/file.txt"), 0, 0666)
+       defer openFile.Close()
+       c.Check(err, check.IsNil)
+
+       fix := lines[0].Autofix()
+       fix.Warnf("Should start with an uppercase letter.")
+       fix.Replace("line", "Line")
+       fix.Apply()
+
+       SaveAutofixChanges(lines)
+
+       c.Check(t.Output(), check.Matches, ""+
+               "AUTOFIX: ~/subdir/file.txt:1: Replacing \"line\" with \"Line\".\n"+
+               "ERROR: ~/subdir/file.txt.pkglint.tmp: Cannot overwrite with auto-fixed content: .*\n")
+}
+
+// This test tests the highly unlikely situation in which a file is loaded
+// by pkglint, and just before writing the autofixed content back, another
+// process takes the file and replaces it with a directory of the same name.
+//
+// 100% code coverage sometimes requires creativity. :)
+func (s *Suite) Test_Autofix_Apply__file_converted_to_directory(c *check.C) {
+       t := s.Init(c)
+
+       t.SetupCommandLine("--autofix")
+       lines := t.SetupFileLines("file.txt",
+               "line 1")
+
+       c.Check(os.RemoveAll(t.File("file.txt")), check.IsNil)
+       c.Check(os.MkdirAll(t.File("file.txt"), 0777), check.IsNil)
+
+       fix := lines[0].Autofix()
+       fix.Warnf("Should start with an uppercase letter.")
+       fix.Replace("line", "Line")
+       fix.Apply()
+
+       SaveAutofixChanges(lines)
+
+       c.Check(t.Output(), check.Matches, ""+
+               "AUTOFIX: ~/file.txt:1: Replacing \"line\" with \"Line\".\n"+
+               "ERROR: ~/file.txt.pkglint.tmp: Cannot overwrite with auto-fixed content: .*\n")
+}
diff -r a6f48c336260 -r de0889b203c3 pkgtools/pkglint/files/buildlink3_test.go
--- a/pkgtools/pkglint/files/buildlink3_test.go Wed Sep 05 17:01:03 2018 +0000
+++ b/pkgtools/pkglint/files/buildlink3_test.go Wed Sep 05 17:56:22 2018 +0000
@@ -102,6 +102,7 @@
                "",
                "BUILDLINK_API_DEPENDS.hs-X11+=\ths-X11>=1.6.1",
                "BUILDLINK_ABI_DEPENDS.hs-X11+=\ths-X12>=1.6.1.2nb2",
+               "BUILDLINK_ABI_DEPENDS.hs-X12+=\ths-X11>=1.6.1.2nb2",
                "",
                ".endif\t# HS_X11_BUILDLINK3_MK",
                "",
@@ -110,7 +111,8 @@
        ChecklinesBuildlink3Mk(mklines)
 
        t.CheckOutputLines(
-               "WARN: buildlink3.mk:9: Package name mismatch between ABI \"hs-X12\" and API \"hs-X11\" (from line 8).")
+               "WARN: buildlink3.mk:9: Package name mismatch between ABI \"hs-X12\" and API \"hs-X11\" (from line 8).",
+               "WARN: buildlink3.mk:10: Only buildlink variables for \"hs-X11\", not \"hs-X12\" may be set in this file.")
 }
 
 func (s *Suite) Test_ChecklinesBuildlink3Mk_abi_api_versions(c *check.C) {
@@ -345,3 +347,43 @@
                "ERROR: ~/buildlink3.mk:13: \"x11/libX11/buildlink3.mk\" does not exist.",
                "WARN: ~/buildlink3.mk:3: Expected a BUILDLINK_TREE line.")
 }
+
+func (s *Suite) Test_ChecklinesBuildlink3Mk__coverage(c *check.C) {
+       t := s.Init(c)
+
+       t.SetupVartypes()
+       t.CreateFileLines("mk/pkg-build-options.mk")
+       t.CreateFileLines("category/dependency/buildlink3.mk")
+       mklines := t.SetupFileMkLines("category/package/buildlink3.mk",
+               MkRcsID,
+               "",
+               "BUILDLINK_TREE+=\ths-X11",
+               "",
+               ".if !defined(HS_X11_BUILDLINK3_MK)",
+               "HS_X11_BUILDLINK3_MK:=",
+               "",
+               "pkgbase := dependency",
+               ".include \"../../mk/pkg-build-options.mk\"",
+               "",
+               "BUILDLINK_API_DEPENDS.hs-X11+=\ths-X11>=1.6.1",
+               "BUILDLINK_ABI_DEPENDS.hs-X11+=\ths-X11>=1.6.1.2nb2",
+               "",
+               ".include \"../../category/dependency/buildlink3.mk\"",
+               "",
+               ".if ${OPSYS} == \"NetBSD\"",
+               ".endif",
+               "",
+               ".for var in value",
+               ".endfor",
+               "",
+               ".endif\t# HS_X11_BUILDLINK3_MK",
+               "",
+               "BUILDLINK_TREE+=\t-hs-X11",
+               "",
+               "# the end")
+
+       ChecklinesBuildlink3Mk(mklines)
+
+       t.CheckOutputLines(
+               "WARN: ~/category/package/buildlink3.mk:25: The file should end here.")
+}
diff -r a6f48c336260 -r de0889b203c3 pkgtools/pkglint/files/category_test.go
--- a/pkgtools/pkglint/files/category_test.go   Wed Sep 05 17:01:03 2018 +0000
+++ b/pkgtools/pkglint/files/category_test.go   Wed Sep 05 17:56:22 2018 +0000
@@ -2,7 +2,7 @@
 
 import "gopkg.in/check.v1"
 
-func (s *Suite) Test_CheckdirCategory_totally_broken(c *check.C) {
+func (s *Suite) Test_CheckdirCategory__totally_broken(c *check.C) {
        t := s.Init(c)
 
        t.SetupVartypes()
@@ -32,7 +32,7 @@
                "ERROR: ~/archivers/Makefile:4: The file should end here.")
 }
 
-func (s *Suite) Test_CheckdirCategory_invalid_comment(c *check.C) {
+func (s *Suite) Test_CheckdirCategory__invalid_comment(c *check.C) {
        t := s.Init(c)
 
        t.SetupVartypes()
@@ -53,3 +53,33 @@
        t.CheckOutputLines(
                "WARN: ~/archivers/Makefile:2: COMMENT contains invalid characters (U+005C U+0024 U+0024 U+0024 U+0024 U+0022).")
 }
+
+func (s *Suite) Test_CheckdirCategory__wip(c *check.C) {
+       t := s.Init(c)
+
+       t.SetupPkgsrc()
+       t.SetupVartypes()
+       t.SetupFileLines("mk/misc/category.mk")
+       t.SetupFileLines("wip/package/Makefile")
+       t.SetupFileLines("wip/fs-only/Makefile")
+       t.SetupFileLines("wip/Makefile",
+               MkRcsID,



Home | Main Index | Thread Index | Old Index