<pre style='margin:0'>
Ryan Schmidt (ryandesign) pushed a commit to branch master
in repository macports-base.
</pre>
<p><a href="https://github.com/macports/macports-base/commit/3d4c5c65451a3b2519a97d63c8f54a9553fb109e">https://github.com/macports/macports-base/commit/3d4c5c65451a3b2519a97d63c8f54a9553fb109e</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 3d4c5c65 Make port lint more precise
</span>3d4c5c65 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 3d4c5c65451a3b2519a97d63c8f54a9553fb109e
</span>Author: Ryan Schmidt <ryandesign@macports.org>
AuthorDate: Fri Jul 17 13:10:45 2020 -0500
<span style='display:block; white-space:pre;color:#404040;'> Make port lint more precise
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> port lint now analyzes the portfile more precisely. This both avoids
</span><span style='display:block; white-space:pre;color:#404040;'> some false positives (where we were finding the string "PortGroup" when
</span><span style='display:block; white-space:pre;color:#404040;'> it occurred within an error message) and handles situations we weren't
</span><span style='display:block; white-space:pre;color:#404040;'> handling before (whitespace before certain keywords).
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Closes: https://trac.macports.org/ticket/60868
</span>---
src/port1.0/portlint.tcl | 45 +++++++++++++++++++++------------------------
1 file changed, 21 insertions(+), 24 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portlint.tcl b/src/port1.0/portlint.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 28d62fb5..0e81addb 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portlint.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portlint.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,6 +1,6 @@
</span> # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
#
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2007 - 2016 The MacPorts Project
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Copyright (c) 2007 - 2018, 2020 The MacPorts Project
</span> # All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -311,7 +311,7 @@ proc portlint::lint_main {args} {
</span> }
if {($require_after eq "PortSystem" || $require_after eq "PortGroup") && \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- [string match "PortGroup*" $line]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ [regexp {^\s*PortGroup\s} $line]} {
</span> set require_blank false
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -343,12 +343,12 @@ proc portlint::lint_main {args} {
</span> continue
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[string match "PortSystem*" $line]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp {^\s*PortSystem\s} $line]} {
</span> if {$seen_portsystem} {
ui_error "Line $lineno repeats PortSystem declaration"
incr errors
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- regexp {PortSystem\s+([0-9.]+)} $line -> portsystem
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ regexp {^\s*PortSystem\s+([0-9.]+)\s*$} $line -> portsystem
</span> if {![info exists portsystem]} {
ui_error "Line $lineno has unrecognized PortSystem"
incr errors
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -357,8 +357,8 @@ proc portlint::lint_main {args} {
</span> set require_blank true
set require_after "PortSystem"
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[string match "*PortGroup*" $line]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- regexp {^\s*PortGroup\s+([A-Za-z0-9_]+)\s+([0-9.]+)} $line -> portgroup portgroupversion
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp {^\s*PortGroup\s} $line]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ regexp {^\s*PortGroup\s+([A-Za-z0-9_]+)\s+([0-9.]+)\s*$} $line -> portgroup portgroupversion
</span> if {![info exists portgroup]} {
ui_error "Line $lineno has unrecognized PortGroup"
incr errors
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -379,7 +379,7 @@ proc portlint::lint_main {args} {
</span> # TODO: check the definition order of variables
# TODO: check length of description against max
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[string match "long_description*" $line]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp {^\s*long_description\s} $line]} {
</span> set in_description true
}
if {$in_description && ([string range $line end end] ne "\\")} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -390,32 +390,32 @@ proc portlint::lint_main {args} {
</span> set require_blank false
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[string match "variant*" $line]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- regexp {variant\s+(\w+)} $line -> variantname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp {^\s*variant\s} $line]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ regexp {^\s*variant\s+(\w+)} $line -> variantname
</span> if {[info exists variantname]} {
lappend local_variants $variantname
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[string match "platform\[ \t\]*" $line]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- regexp {platform\s+(?:\w+\s+(?:\w+\s+)?)?(\w+)} $line -> platform_arch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp {^\s*platform\s} $line]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ regexp {^\s*platform\s+(?:\w+\s+(?:\w+\s+)?)?(\w+)} $line -> platform_arch
</span> if {$platform_arch eq "ppc"} {
ui_error "Arch 'ppc' in platform on line $lineno should be 'powerpc'"
incr errors
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[string match "*adduser*" $line]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp {^\s*adduser\s} $line]} {
</span> ui_warn "Line $lineno calling adduser directly; consider setting add_users instead"
incr warnings
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[regexp {(^|\s)configure\s+\{\s*\}} $line]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp {^\s*configure\s+\{\s*\}} $line]} {
</span> ui_warn "Line $lineno should say \"use_configure no\" instead of declaring an empty configure phase"
incr warnings
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[regexp {compiler\.blacklist(?:-[a-z]+)?\s.*(["{]\S+(?:\s+\S+){2,}["}])} $line -> blacklist] && ![info exists portgroups(compiler_blacklist_versions)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp {^\s*compiler\.blacklist(?:-[a-z]+)?\s.*(["{]\S+(?:\s+\S+){2,}["}])} $line -> blacklist] && ![info exists portgroups(compiler_blacklist_versions)]} {
</span> ui_error "Line $lineno uses compiler.blacklist entry $blacklist which requires the compiler_blacklist_versions portgroup which has not been included"
incr errors
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -431,15 +431,13 @@ proc portlint::lint_main {args} {
</span> # Check for hardcoded version numbers
if {$nitpick} {
# Support for skipping checksums lines
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[regexp {^checksums} $line]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp {^\s*checksums\s} $line]} {
</span> # We enter a series of one or more lines containing checksums
set hashline true
}
if {!$hashline
<span style='display:block; white-space:pre;background:#ffe0e0;'>- && ![regexp {^\s*PortSystem|^\s*PortGroup|^\s*version} $line]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && ![regexp {^\s*[A-Za-z0-9_]+\.setup} $line]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && ![regexp {^\s*license} $line]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && ![regexp {^\s*(?:PortSystem|PortGroup|version|license|[A-Za-z0-9_]+\.setup)\s} $line]
</span> && [string first [option version] $line] != -1} {
ui_warn "Line $lineno seems to hardcode the version number, consider using \${version} instead"
incr warnings
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -457,8 +455,7 @@ proc portlint::lint_main {args} {
</span> if {!$hashline
&& $name ne "MacPorts"
&& [string match "*/opt/local*" $line]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- && ![regexp {^\s*reinplace} $line]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && ![regexp {^\s*system.*\Wsed\W} $line]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && ![regexp {^\s*(?:reinplace\s|system.*\Wsed\W)} $line]} {
</span> ui_error "Line $lineno hardcodes /opt/local, use \${prefix} instead"
incr errors
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -720,12 +717,12 @@ proc portlint::lint_main {args} {
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[regexp "^(.+)nomaintainer(@macports.org)?(.+)$" $maintainers] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp "^(.+)nomaintainer(@macports\.org)?(.+)$" $maintainers] } {
</span> ui_error "Using nomaintainer together with other maintainer"
incr errors
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[regexp "^openmaintainer(@macports.org)?$" $maintainers] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp "^openmaintainer(@macports\.org)?$" $maintainers] } {
</span> ui_error "Using openmaintainer without any other maintainer"
incr errors
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -736,10 +733,10 @@ proc portlint::lint_main {args} {
</span> $addr eq "openmaintainer@macports.org"} {
ui_warn "Using full email address for no/open maintainer"
incr warnings
<span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {[regexp "^(.+)@macports.org$" $addr -> localpart]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[regexp "^(.+)@macports\.org$" $addr -> localpart]} {
</span> ui_warn "Maintainer email address for $localpart includes @macports.org"
incr warnings
<span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {$addr eq "darwinports@opendarwin.org"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {$addr eq "darwinports@opendarwin\.org"} {
</span> ui_warn "Using legacy email address for no/open maintainer"
incr warnings
} elseif {[regexp "^(.+)@(.+)$" $addr -> localpart domain]} {
</pre><pre style='margin:0'>
</pre>