<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch release-2.4
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/a5c8a423ab1e2fdad30562ef3f23f3e67ffc0ada">https://github.com/macports/macports-base/commit/a5c8a423ab1e2fdad30562ef3f23f3e67ffc0ada</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit a5c8a423ab1e2fdad30562ef3f23f3e67ffc0ada
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Wed Feb 15 01:29:37 2017 +1100

<span style='display:block; white-space:pre;color:#404040;'>    Port diagnose PATH check improvements
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Get shell from dscl instead of assuming bash. Don't try to check the
</span><span style='display:block; white-space:pre;color:#404040;'>    value of PATH with shells we don't know about. The code to add our dirs
</span><span style='display:block; white-space:pre;color:#404040;'>    to PATH only works with bash, so don't offer to do it with other
</span><span style='display:block; white-space:pre;color:#404040;'>    shells. Use the interactive questions API instead of reimplementing it.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Fixes: https://trac.macports.org/ticket/53473
</span><span style='display:block; white-space:pre;color:#404040;'>    (cherry picked from commit 17c70c9d5cad43a59066e7fb86c407091eec7820)
</span>---
 src/macports1.0/diagnose.tcl | 60 ++++++++++++++++++++++++++------------------
 src/macports1.0/macports.tcl |  4 +++
 2 files changed, 39 insertions(+), 25 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/diagnose.tcl b/src/macports1.0/diagnose.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 717f2d0..744456a 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/diagnose.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/diagnose.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -109,7 +109,12 @@ namespace eval diagnose {
</span>             set config_options(profile_path) "${macports::user_home}/.bash_profile"
         }
         if {![info exists config_options(shell_location)]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set config_options(shell_location) /bin/bash
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[info exists macports::sudo_user]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set username ${macports::sudo_user}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set username [exec id -un]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set config_options(shell_location) [lindex [exec /usr/bin/dscl . -read "/Users/${username}" shell] end]
</span>         }
 
         # Start the checks
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -696,6 +701,12 @@ namespace eval diagnose {
</span>         # Returns:
         #           None.
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        set known_shells [list bash csh ksh sh tcsh zsh]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set shell_name [file tail $shell_loc]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$shell_name ni $known_shells} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>         set path ${macports::user_path}
         set split [split $path :]
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -708,34 +719,33 @@ namespace eval diagnose {
</span>             return
 
         } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_warn "your \$PATH environment variable does not currently include, $port_loc/bin, which is where port is located. \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     Would you like to add $port_loc/bin to your \$PATH variable now? \[Y/N\]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set input [gets stdin]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$input eq "y" || $input eq "Y"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                # XXX: this should use the same paths and comments as the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                # postflight script of the pkg installer. Maybe they could even
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                # share code?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_msg "Attempting to add $port_loc/bin to $profile_path"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[file exists $profile_path]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[file writable $profile_path]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set fd [open $profile_path a]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        puts $fd "export PATH=$port_loc/bin:$port_loc/sbin:\$PATH"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        close $fd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        ui_msg "Added PATH properly. Please open a new terminal window to load the modified ${profile_path}."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_warn "your \$PATH environment variable does not currently include $port_loc/bin, which is where port is located."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # XXX Only works for bash. Should set default profile_path based on the shell.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[info exists macports::ui_options(questions_yesno)] && $shell_name eq "bash"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set retval [$macports::ui_options(questions_yesno) "" "DiagnoseFixPATH" "" n 0 "Would you like to add $port_loc/bin to your \$PATH variable now?"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {$retval} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    # XXX: this should use the same paths and comments as the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    # postflight script of the pkg installer. Maybe they could even
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    # share code?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ui_msg "Attempting to add $port_loc/bin to $profile_path"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[file exists $profile_path]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        if {[file writable $profile_path]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            set fd [open $profile_path a]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            puts $fd "export PATH=$port_loc/bin:$port_loc/sbin:\$PATH"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            close $fd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            ui_msg "Added PATH properly. Please open a new terminal window to load the modified ${profile_path}."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            ui_error "Can't write to ${profile_path}."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        }
</span>                     } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        ui_error "Can't write to ${profile_path}."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        ui_error "$profile_path does not exist."
</span>                     }
                 } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ui_error "$profile_path does not exist."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ui_msg "Not fixing your \$PATH variable."
</span>                 }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            } elseif {$input eq "n" || $input eq "N"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_msg "Not fixing your \$PATH variable."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_msg "Not a valid choice: $input"
</span>             }
        }
    }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/macports.tcl b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index c70ef91..ce14a67 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -675,6 +675,10 @@ proc mportinit {{up_ui_options {}} {up_options {}} {up_variations {}}} {
</span> 
     # Save the path for future processing
     set macports::user_path $env(PATH)
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Likewise any SUDO_USER
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists env(SUDO_USER)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set macports::sudo_user $env(SUDO_USER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> 
     # Save SSH_AUTH_SOCK for ports tree sync
     if {[info exists env(SSH_AUTH_SOCK)]} {
</pre><pre style='margin:0'>

</pre>