<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>