Received: by mail.netbsd.org (Postfix, from userid 605) id 6300484D62; Fri, 29 May 2020 20:13:19 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by mail.netbsd.org (Postfix) with ESMTP id DEA3484D54 for ; Fri, 29 May 2020 20:13:18 +0000 (UTC) X-Virus-Scanned: amavisd-new at netbsd.org Received: from mail.netbsd.org ([127.0.0.1]) by localhost (mail.netbsd.org [127.0.0.1]) (amavisd-new, port 10025) with ESMTP id TiQl0Nmm6RTM for ; Fri, 29 May 2020 20:13:18 +0000 (UTC) Received: from cvs.NetBSD.org (ivanova.netbsd.org [199.233.217.197]) by mail.netbsd.org (Postfix) with ESMTP id 115AB84C6C for ; Fri, 29 May 2020 20:13:18 +0000 (UTC) Received: by cvs.NetBSD.org (Postfix, from userid 500) id 074C0FB27; Fri, 29 May 2020 20:13:18 +0000 (UTC) Content-Transfer-Encoding: 7bit Content-Type: multipart/mixed; boundary="_----------=_15907831979630" MIME-Version: 1.0 Date: Fri, 29 May 2020 20:13:17 +0000 From: "Roland Illig" Subject: CVS commit: pkgsrc/pkgtools/pkglint To: pkgsrc-changes@NetBSD.org Reply-To: rillig@netbsd.org X-Mailer: log_accum Message-Id: <20200529201318.074C0FB27@cvs.NetBSD.org> Sender: pkgsrc-changes-owner@NetBSD.org List-Id: pkgsrc-changes.NetBSD.org Precedence: bulk List-Unsubscribe: This is a multi-part message in MIME format. --_----------=_15907831979630 Content-Disposition: inline Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII" Module Name: pkgsrc Committed By: rillig Date: Fri May 29 20:13:17 UTC 2020 Modified Files: pkgsrc/pkgtools/pkglint: Makefile pkgsrc/pkgtools/pkglint/files: mkline.go patches.go patches_test.go vartypecheck.go vartypecheck_test.go Log Message: pkgtools/pkglint: update to 20.1.11 Changes since 20.1.10: PKG_SYSCONFDIR and VARBASE must not appear in INSTALLATION_DIRS. Patch files in which the line number have been edited manually are marked with notes. To generate a diff of this commit: cvs rdiff -u -r1.649 -r1.650 pkgsrc/pkgtools/pkglint/Makefile cvs rdiff -u -r1.78 -r1.79 pkgsrc/pkgtools/pkglint/files/mkline.go cvs rdiff -u -r1.40 -r1.41 pkgsrc/pkgtools/pkglint/files/patches.go cvs rdiff -u -r1.39 -r1.40 pkgsrc/pkgtools/pkglint/files/patches_test.go cvs rdiff -u -r1.88 -r1.89 pkgsrc/pkgtools/pkglint/files/vartypecheck.go cvs rdiff -u -r1.79 -r1.80 pkgsrc/pkgtools/pkglint/files/vartypecheck_test.go Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. --_----------=_15907831979630 Content-Disposition: inline Content-Length: 8475 Content-Transfer-Encoding: binary Content-Type: text/x-diff; charset=us-ascii Modified files: Index: pkgsrc/pkgtools/pkglint/Makefile diff -u pkgsrc/pkgtools/pkglint/Makefile:1.649 pkgsrc/pkgtools/pkglint/Makefile:1.650 --- pkgsrc/pkgtools/pkglint/Makefile:1.649 Sun May 24 19:12:29 2020 +++ pkgsrc/pkgtools/pkglint/Makefile Fri May 29 20:13:17 2020 @@ -1,6 +1,6 @@ -# $NetBSD: Makefile,v 1.649 2020/05/24 19:12:29 rillig Exp $ +# $NetBSD: Makefile,v 1.650 2020/05/29 20:13:17 rillig Exp $ -PKGNAME= pkglint-20.1.10 +PKGNAME= pkglint-20.1.11 CATEGORIES= pkgtools DISTNAME= tools MASTER_SITES= ${MASTER_SITE_GITHUB:=golang/} Index: pkgsrc/pkgtools/pkglint/files/mkline.go diff -u pkgsrc/pkgtools/pkglint/files/mkline.go:1.78 pkgsrc/pkgtools/pkglint/files/mkline.go:1.79 --- pkgsrc/pkgtools/pkglint/files/mkline.go:1.78 Fri May 8 19:50:04 2020 +++ pkgsrc/pkgtools/pkglint/files/mkline.go Fri May 29 20:13:17 2020 @@ -821,57 +821,54 @@ func (mkline *MkLine) VariableNeedsQuoti // ForEachUsed calls the action for each variable that is used in the line. func (mkline *MkLine) ForEachUsed(action func(varUse *MkVarUse, time VucTime)) { - - var searchIn func(text string, time VucTime) // mutually recursive with searchInVarUse - - searchInVarUse := func(varuse *MkVarUse, time VucTime) { - varname := varuse.varname - if !varuse.IsExpression() { - action(varuse, time) - } - searchIn(varname, time) - for _, mod := range varuse.modifiers { - searchIn(mod.Text, time) - } - } - - searchIn = func(text string, time VucTime) { - if !contains(text, "$") { - return - } - - tokens, _ := NewMkLexer(text, nil).MkTokens() - for _, token := range tokens { - if token.Varuse != nil { - searchInVarUse(token.Varuse, time) - } - } - } - switch { case mkline.IsVarassign(): - searchIn(mkline.Varname(), VucLoadTime) - searchIn(mkline.Value(), mkline.Op().Time()) + mkline.ForEachUsedText(mkline.Varname(), VucLoadTime, action) + mkline.ForEachUsedText(mkline.Value(), mkline.Op().Time(), action) case mkline.IsDirective() && mkline.Directive() == "for": - searchIn(mkline.Args(), VucLoadTime) + mkline.ForEachUsedText(mkline.Args(), VucLoadTime, action) case mkline.IsDirective() && (mkline.Directive() == "if" || mkline.Directive() == "elif") && mkline.Cond() != nil: mkline.Cond().Walk(&MkCondCallback{ VarUse: func(varuse *MkVarUse) { - searchInVarUse(varuse, VucLoadTime) + mkline.ForEachUsedVarUse(varuse, VucLoadTime, action) }}) case mkline.IsShellCommand(): - searchIn(mkline.ShellCommand(), VucRunTime) + mkline.ForEachUsedText(mkline.ShellCommand(), VucRunTime, action) case mkline.IsDependency(): - searchIn(mkline.Targets(), VucLoadTime) - searchIn(mkline.Sources(), VucLoadTime) + mkline.ForEachUsedText(mkline.Targets(), VucLoadTime, action) + mkline.ForEachUsedText(mkline.Sources(), VucLoadTime, action) case mkline.IsInclude(): - searchIn(mkline.IncludedFile().String(), VucLoadTime) + mkline.ForEachUsedText(mkline.IncludedFile().String(), VucLoadTime, action) + } +} + +func (mkline *MkLine) ForEachUsedText(text string, time VucTime, action func(varUse *MkVarUse, time VucTime)) { + if !contains(text, "$") { + return + } + + tokens, _ := NewMkLexer(text, nil).MkTokens() + for _, token := range tokens { + if token.Varuse != nil { + mkline.ForEachUsedVarUse(token.Varuse, time, action) + } + } +} + +func (mkline *MkLine) ForEachUsedVarUse(varuse *MkVarUse, time VucTime, action func(varUse *MkVarUse, time VucTime)) { + varname := varuse.varname + if !varuse.IsExpression() { + action(varuse, time) + } + mkline.ForEachUsedText(varname, time, action) + for _, mod := range varuse.modifiers { + mkline.ForEachUsedText(mod.Text, time, action) } } Index: pkgsrc/pkgtools/pkglint/files/patches.go diff -u pkgsrc/pkgtools/pkglint/files/patches.go:1.40 pkgsrc/pkgtools/pkglint/files/patches.go:1.41 --- pkgsrc/pkgtools/pkglint/files/patches.go:1.40 Fri May 8 19:50:04 2020 +++ pkgsrc/pkgtools/pkglint/files/patches.go Fri May 29 20:13:17 2020 @@ -101,6 +101,7 @@ func (ck *PatchChecker) Check(pkg *Packa func (ck *PatchChecker) checkUnifiedDiff(patchedFile Path) { isConfigure := ck.isConfigure(patchedFile) + linesDiff := 0 hasHunks := false for { m := ck.llex.NextRegexp(rePatchUniHunk) @@ -110,8 +111,26 @@ func (ck *PatchChecker) checkUnifiedDiff text := m[0] hasHunks = true + linenoDel := toInt(m[1], 0) linesToDel := toInt(m[2], 1) + linenoAdd := toInt(m[3], 0) linesToAdd := toInt(m[4], 1) + if linenoDel > 0 && linenoAdd > 0 && linenoDel+linesDiff != linenoAdd { + line := ck.llex.PreviousLine() + line.Notef("The difference between the line numbers %d and %d should be %d, not %d.", + linenoDel, linenoAdd, linesDiff, linenoAdd-linenoDel) + line.Explain( + "This only happens when patches are edited manually.", + "", + "To fix this, either regenerate the line numbers by first running", + bmake("patch"), + "and then \"mkpatches\", or edit the line numbers by hand.", + "", + "While here, it's a good idea to make the patch apply really cleanly,", + "by ensuring that the output from the patch command does not contain", + "the word \"offset\", like in \"Hunk #11 succeeded at 2598 (offset 10 lines).") + } + linesDiff += linesToAdd - linesToDel ck.checktextUniHunkCr() ck.checktextCvsID(text) Index: pkgsrc/pkgtools/pkglint/files/patches_test.go diff -u pkgsrc/pkgtools/pkglint/files/patches_test.go:1.39 pkgsrc/pkgtools/pkglint/files/patches_test.go:1.40 --- pkgsrc/pkgtools/pkglint/files/patches_test.go:1.39 Fri May 8 19:50:04 2020 +++ pkgsrc/pkgtools/pkglint/files/patches_test.go Fri May 29 20:13:17 2020 @@ -619,7 +619,7 @@ func (s *Suite) Test_PatchChecker_Check_ func (s *Suite) Test_PatchChecker_checkUnifiedDiff__lines_at_end(c *check.C) { t := s.Init(c) - lines := t.SetUpFileLines("patch-aa", + lines := t.NewLines("patch-aa", CvsID, "", "Documentation", @@ -638,6 +638,30 @@ func (s *Suite) Test_PatchChecker_checkU t.CheckOutputEmpty() } +func (s *Suite) Test_PatchChecker_checkUnifiedDiff__line_number_mismatch(c *check.C) { + t := s.Init(c) + + lines := t.NewLines("patch-aa", + CvsID, + "", + "Documentation", + "", + "--- old", + "+++ new", + "@@ -2,1 +1,1 @@", + "- old", + "+ new", + "@@ -5,1 +7,1 @@", + "- old", + "+ new") + + CheckLinesPatch(lines, nil) + + t.CheckOutputLines( + "NOTE: patch-aa:7: The difference between the line numbers 2 and 1 should be 0, not -1.", + "NOTE: patch-aa:10: The difference between the line numbers 5 and 7 should be 0, not 2.") +} + func (s *Suite) Test_PatchChecker_checkBeginDiff__multiple_patches_without_documentation(c *check.C) { t := s.Init(c) Index: pkgsrc/pkgtools/pkglint/files/vartypecheck.go diff -u pkgsrc/pkgtools/pkglint/files/vartypecheck.go:1.88 pkgsrc/pkgtools/pkglint/files/vartypecheck.go:1.89 --- pkgsrc/pkgtools/pkglint/files/vartypecheck.go:1.88 Sat May 23 08:51:08 2020 +++ pkgsrc/pkgtools/pkglint/files/vartypecheck.go Fri May 29 20:13:17 2020 @@ -1142,6 +1142,14 @@ func (cv *VartypeCheck) PrefixPathname() return } + cv.MkLine.ForEachUsedText(cv.Value, VucRunTime, func(varUse *MkVarUse, time VucTime) { + varname := varUse.varname + if varname == "PKG_SYSCONFDIR" || varname == "VARBASE" { + cv.Errorf("%s must not be used in %s since it is not relative to PREFIX.", + varname, cv.Varname) + } + }) + if m, manSubdir := match1(cv.Value, `^man/(.+)`); m { from := "${PKGMANDIR}/" + manSubdir fix := cv.Autofix() Index: pkgsrc/pkgtools/pkglint/files/vartypecheck_test.go diff -u pkgsrc/pkgtools/pkglint/files/vartypecheck_test.go:1.79 pkgsrc/pkgtools/pkglint/files/vartypecheck_test.go:1.80 --- pkgsrc/pkgtools/pkglint/files/vartypecheck_test.go:1.79 Mon Apr 13 19:46:44 2020 +++ pkgsrc/pkgtools/pkglint/files/vartypecheck_test.go Fri May 29 20:13:17 2020 @@ -1620,6 +1620,16 @@ func (s *Suite) Test_VartypeCheck_Prefix "Please use \"${PKGMANDIR}/man1\" instead of \"man/man1\".", "ERROR: filename.mk:3: The pathname \"/absolute\" in PKGMANDIR "+ "must be relative to ${PREFIX}.") + + vt.Varname("INSTALLATION_DIRS") + vt.Values( + "bin ${PKG_SYSCONFDIR} ${VARBASE}") + + vt.Output( + "ERROR: filename.mk:11: PKG_SYSCONFDIR must not be used in INSTALLATION_DIRS "+ + "since it is not relative to PREFIX.", + "ERROR: filename.mk:11: VARBASE must not be used in INSTALLATION_DIRS "+ + "since it is not relative to PREFIX.") } func (s *Suite) Test_VartypeCheck_PythonDependency(c *check.C) { --_----------=_15907831979630--