]> git.eshelyaron.com Git - emacs.git/commitdiff
Adapt Tramp's make-process for macOS.
authorMichael Albinus <michael.albinus@gmx.de>
Sun, 26 Sep 2021 08:32:15 +0000 (10:32 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Sun, 26 Sep 2021 08:32:15 +0000 (10:32 +0200)
* lisp/net/tramp-sh.el (tramp-check-remote-uname): New defun.
(tramp-sh-handle-file-ownership-preserved-p)
(tramp-sh-handle-make-process, tramp-find-executable)
(tramp-find-shell, tramp-get-remote-stat): Use it.  (Bug#50748)

* test/lisp/net/tramp-tests.el (tramp-check-remote-uname): Declare.
(tramp-test29-start-file-process, tramp-test30-make-process):
Instrument for macOS.
(tramp--test-hpux-p): Adapt function.
(tramp--test-macos-p): New defun.

lisp/net/tramp-sh.el
test/lisp/net/tramp-tests.el

index 7f1a52fa934cf8f820aba1841acc07485937c842..0fe106684c5bbb9d1acd557c5a7ee38de9169642 100644 (file)
@@ -1628,9 +1628,7 @@ ID-FORMAT valid values are `string' and `integer'."
                 ;; On BSD-derived systems files always inherit the
                  ;; parent directory's group, so skip the group-gid
                  ;; test.
-                (string-match-p
-                 "BSD\\|DragonFly\\|Darwin"
-                 (tramp-get-connection-property v "uname" ""))
+                 (tramp-check-remote-uname v "BSD\\|DragonFly\\|Darwin")
                 (= (tramp-compat-file-attribute-group-id attributes)
                    (tramp-get-remote-gid v 'integer)))))))))
 
@@ -2937,8 +2935,11 @@ implementation will be used."
                            (setq p (tramp-get-connection-process v))
                            (process-put p 'remote-pid pid)
                            (tramp-set-connection-property p "remote-pid" pid))
-                         ;; Disable carriage return to newline translation.
-                         (when (memq connection-type '(nil pipe))
+                         ;; Disable carriage return to newline
+                         ;; translation.  This does not work on
+                         ;; macOS, see Bug#50748.
+                         (when (and (memq connection-type '(nil pipe))
+                                     (not (tramp-check-remote-uname v "Darwin")))
                            (tramp-send-command v "stty -icrnl"))
                          ;; `tramp-maybe-open-connection' and
                          ;; `tramp-send-command-and-read' could have
@@ -4008,10 +4009,7 @@ This function expects to be in the right *tramp* buffer."
       ;; number of words it returns.  "SunOS 5.10" (and maybe "SunOS
       ;; 5.11") have problems with this command, we disable the call
       ;; therefore.
-      (unless (or ignore-path
-                 (string-match-p
-                  tramp-sunos-unames
-                  (tramp-get-connection-property vec "uname" "")))
+      (unless (or ignore-path (tramp-check-remote-uname vec tramp-sunos-unames))
        (tramp-send-command vec (format "which \\%s | wc -w" progname))
        (goto-char (point-min))
        (if (looking-at-p "^\\s-*1$")
@@ -4221,9 +4219,7 @@ file exists and nonzero exit status otherwise."
                        ;; The default shell (ksh93) of OpenSolaris
                        ;; and Solaris is buggy.  We've got reports
                        ;; for "SunOS 5.10" and "SunOS 5.11" so far.
-                       (string-match-p
-                        tramp-sunos-unames
-                        (tramp-get-connection-property vec "uname" "")))
+                        (tramp-check-remote-uname vec tramp-sunos-unames))
 
                    (or (tramp-find-executable
                         vec "bash" (tramp-get-remote-path vec) t t)
@@ -5340,6 +5336,10 @@ Return ATTR."
 
 ;; Variables local to connection.
 
+(defun tramp-check-remote-uname (vec regexp)
+  "Check whether REGEXP matches the connection property \"uname\"."
+  (string-match-p regexp (tramp-get-connection-property vec "uname" "")))
+
 (defun tramp-get-remote-path (vec)
   "Compile list of remote directories for PATH.
 Nonexistent directories are removed from spec."
@@ -5564,8 +5564,7 @@ Nonexistent directories are removed from spec."
   (with-tramp-connection-property vec "stat"
     ;; stat on Solaris is buggy.  We've got reports for "SunOS 5.10"
     ;; and "SunOS 5.11" so far.
-    (unless (string-match-p
-            tramp-sunos-unames (tramp-get-connection-property vec "uname" ""))
+    (unless (tramp-check-remote-uname vec tramp-sunos-unames)
       (tramp-message vec 5 "Finding a suitable `stat' command")
       (let ((result (tramp-find-executable
                     vec "stat" (tramp-get-remote-path vec)))
index 358f87d84c968473dd514ac2ce22b4a2d71ac653..26a3ac7e96404203395bd13886d4ddb49fda06e6 100644 (file)
@@ -52,6 +52,7 @@
 (require 'vc-git)
 (require 'vc-hg)
 
+(declare-function tramp-check-remote-uname "tramp-sh")
 (declare-function tramp-find-executable "tramp-sh")
 (declare-function tramp-get-remote-chmod-h "tramp-sh")
 (declare-function tramp-get-remote-gid "tramp-sh")
@@ -4585,6 +4586,10 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
                  (while (< (- (point-max) (point-min))
                            (length "66\n6F\n6F\n0D\n0A\n"))
                    (while (accept-process-output proc 0 nil t))))
+                (if (tramp--test-macos-p)
+                  (tramp--test-message
+                   "process-connection-type %s\n%s"
+                     process-connection-type (pp-to-string (buffer-string)))
                (should
                 (string-match-p
                  (if (memq process-connection-type '(nil pipe))
@@ -4592,7 +4597,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
                      ;; flag is FALSE.  See telnet(1) man page.
                      "66\n6F\n6F\n0D\\(\n00\\)?\n0A\n"
                    "66\n6F\n6F\n0A\\(\n00\\)?\n0A\n")
-                 (buffer-string))))
+                 (buffer-string)))))
 
            ;; Cleanup.
            (ignore-errors (delete-process proc)))))
@@ -4850,6 +4855,10 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'."
                    (while (< (- (point-max) (point-min))
                              (length "66\n6F\n6F\n0D\n0A\n"))
                      (while (accept-process-output proc 0 nil t))))
+                  (if (tramp--test-macos-p)
+                    (tramp--test-message
+                     "process-connection-type %s\n%s"
+                     process-connection-type (pp-to-string (buffer-string)))
                  (should
                   (string-match-p
                    (if (memq (or connection-type process-connection-type)
@@ -4858,7 +4867,7 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'."
                        ;; flag is FALSE.  See telnet(1) man page.
                        "66\n6F\n6F\n0D\\(\n00\\)?\n0A\n"
                      "66\n6F\n6F\n0A\\(\n00\\)?\n0A\n")
-                   (buffer-string))))
+                   (buffer-string)))))
 
              ;; Cleanup.
              (ignore-errors (delete-process proc)))))))))
@@ -6099,8 +6108,7 @@ If optional METHOD is given, it is checked first."
 Several special characters do not work properly there."
   ;; We must refill the cache.  `file-truename' does it.
   (file-truename tramp-test-temporary-file-directory)
-  (string-match-p
-   "^HP-UX" (tramp-get-connection-property tramp-test-vec "uname" "")))
+  (tramp-check-remote-uname tramp-test-vec "^HP-UX"))
 
 (defun tramp--test-ksh-p ()
   "Check, whether the remote shell is ksh.
@@ -6111,6 +6119,12 @@ a $'' syntax."
   (string-match-p
    "ksh$" (tramp-get-connection-property tramp-test-vec "remote-shell" "")))
 
+(defun tramp--test-macos-p ()
+  "Check, whether the remote host runs macOS."
+  ;; We must refill the cache.  `file-truename' does it.
+  (file-truename tramp-test-temporary-file-directory)
+  (tramp-check-remote-uname tramp-test-vec "Darwin"))
+
 (defun tramp--test-mock-p ()
   "Check, whether the mock method is used.
 This does not support external Emacs calls."