* tramp: remote-to-remote hangs @ 2009-07-28 14:10 Neal Becker 2009-07-28 14:37 ` Michael Albinus 0 siblings, 1 reply; 6+ messages in thread From: Neal Becker @ 2009-07-28 14:10 UTC (permalink / raw) To: emacs-devel Trying to copy remote-to-remote (scp) just hangs. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: tramp: remote-to-remote hangs 2009-07-28 14:10 tramp: remote-to-remote hangs Neal Becker @ 2009-07-28 14:37 ` Michael Albinus 2009-07-28 14:58 ` Neal Becker 0 siblings, 1 reply; 6+ messages in thread From: Michael Albinus @ 2009-07-28 14:37 UTC (permalink / raw) To: Neal Becker; +Cc: emacs-devel Neal Becker <ndbecker2@gmail.com> writes: > Trying to copy remote-to-remote (scp) just hangs. Could you, please, be a little bit more verbose? Source file name, target file name, Tramp buffers, maybe debug buffers (when tramp-verbose has been set to 6) etc pp. Best regards, Michael. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: tramp: remote-to-remote hangs 2009-07-28 14:37 ` Michael Albinus @ 2009-07-28 14:58 ` Neal Becker 2009-07-28 20:41 ` Michael Albinus 0 siblings, 1 reply; 6+ messages in thread From: Neal Becker @ 2009-07-28 14:58 UTC (permalink / raw) To: Michael Albinus; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 349 bytes --] On Tuesday 28 July 2009, Michael Albinus wrote: > Neal Becker <ndbecker2@gmail.com> writes: > > Trying to copy remote-to-remote (scp) just hangs. > > Could you, please, be a little bit more verbose? Source file name, > target file name, Tramp buffers, maybe debug buffers (when tramp-verbose > has been set to 6) etc pp. > > Best regards, Michael. [-- Attachment #2: debug --] [-- Type: text/plain, Size: 8091 bytes --] 10:46:00 tramp-do-copy-or-rename-file-out-of-band (0) # Transferring /scp:nbecker@edalnx10:/user/lchen/scma_proj/bpe_scma/hdl/blocks/bpe_top_ldpc/synthesis/run/bpe_top_ldpc.bit to /scp:nbecker@adgchassis7:/home/nbecker/eos/eos/bpe_top_ldpc.bit... 10:46:00 tramp-do-copy-or-rename-file-out-of-band (6) # scp -p -q nbecker@edalnx10:/user/lchen/scma_proj/bpe_scma/hdl/blocks/bpe_top_ldpc/synthesis/run/bpe_top_ldpc.bit nbecker@edalnx10:/user/lchen/scma_proj/bpe_scma/hdl/blocks/bpe_top_ldpc/synthesis/run/bpe_top_ldpc.bit 10:46:00 tramp-process-actions (3) # Waiting for prompts from remote shell 10:46:01 tramp-process-one-action (5) # Looking for regexp "\(^.*\([pP]assword\|[pP]assphrase\).*:\0? *\)\'" from remote shell 10:46:01 tramp-process-one-action (5) # Looking for regexp "\(^.*\(Connection \(?:\(?:clo\|refu\)sed\)\|Host key verification failed\.\|Login \(?:[Ii]ncorrect\)\|N\(?:ame or service not known\|o supported authentication methods left to try!\)\|Permission denied\|Sorry, try again\.\|Tramp connection closed\).*\|^.*\(Received signal [0-9]+\).*\)\'" from remote shell 10:46:01 tramp-process-one-action (5) # Looking for regexp "\(\(.+: \(No such file or directory\|Permission denied\|is a directory\|not a regular file\)\)\s-*\)\'" from remote shell 10:46:01 tramp-process-one-action (5) # Looking for regexp "\(\)\'" from remote shell 10:46:01 tramp-process-one-action (5) # Call `tramp-action-out-of-band' 10:46:02 tramp-process-one-action (5) # Looking for regexp "\(^.*\([pP]assword\|[pP]assphrase\).*:\0? *\)\'" from remote shell 10:46:02 tramp-process-one-action (5) # Looking for regexp "\(^.*\(Connection \(?:\(?:clo\|refu\)sed\)\|Host key verification failed\.\|Login \(?:[Ii]ncorrect\)\|N\(?:ame or service not known\|o supported authentication methods left to try!\)\|Permission denied\|Sorry, try again\.\|Tramp connection closed\).*\|^.*\(Received signal [0-9]+\).*\)\'" from remote shell 10:46:02 tramp-process-one-action (5) # Looking for regexp "\(\(.+: \(No such file or directory\|Permission denied\|is a directory\|not a regular file\)\)\s-*\)\'" from remote shell 10:46:02 tramp-process-one-action (5) # Looking for regexp "\(\)\'" from remote shell 10:46:02 tramp-process-one-action (5) # Call `tramp-action-out-of-band' 10:46:03 tramp-process-one-action (5) # Looking for regexp "\(^.*\([pP]assword\|[pP]assphrase\).*:\0? *\)\'" from remote shell 10:46:03 tramp-process-one-action (5) # Looking for regexp "\(^.*\(Connection \(?:\(?:clo\|refu\)sed\)\|Host key verification failed\.\|Login \(?:[Ii]ncorrect\)\|N\(?:ame or service not known\|o supported authentication methods left to try!\)\|Permission denied\|Sorry, try again\.\|Tramp connection closed\).*\|^.*\(Received signal [0-9]+\).*\)\'" from remote shell 10:46:03 tramp-process-one-action (5) # Looking for regexp "\(\(.+: \(No such file or directory\|Permission denied\|is a directory\|not a regular file\)\)\s-*\)\'" from remote shell 10:46:03 tramp-process-one-action (5) # Looking for regexp "\(\)\'" from remote shell 10:46:03 tramp-process-one-action (5) # Call `tramp-action-out-of-band' 10:46:04 tramp-process-one-action (5) # Looking for regexp "\(^.*\([pP]assword\|[pP]assphrase\).*:\0? *\)\'" from remote shell 10:46:04 tramp-process-one-action (5) # Looking for regexp "\(^.*\(Connection \(?:\(?:clo\|refu\)sed\)\|Host key verification failed\.\|Login \(?:[Ii]ncorrect\)\|N\(?:ame or service not known\|o supported authentication methods left to try!\)\|Permission denied\|Sorry, try again\.\|Tramp connection closed\).*\|^.*\(Received signal [0-9]+\).*\)\'" from remote shell 10:46:04 tramp-process-one-action (5) # Looking for regexp "\(\(.+: \(No such file or directory\|Permission denied\|is a directory\|not a regular file\)\)\s-*\)\'" from remote shell 10:46:04 tramp-process-one-action (5) # Looking for regexp "\(\)\'" from remote shell 10:46:04 tramp-process-one-action (5) # Call `tramp-action-out-of-band' 10:46:05 tramp-process-one-action (5) # Looking for regexp "\(^.*\([pP]assword\|[pP]assphrase\).*:\0? *\)\'" from remote shell 10:46:05 tramp-process-one-action (5) # Looking for regexp "\(^.*\(Connection \(?:\(?:clo\|refu\)sed\)\|Host key verification failed\.\|Login \(?:[Ii]ncorrect\)\|N\(?:ame or service not known\|o supported authentication methods left to try!\)\|Permission denied\|Sorry, try again\.\|Tramp connection closed\).*\|^.*\(Received signal [0-9]+\).*\)\'" from remote shell 10:46:05 tramp-process-one-action (5) # Looking for regexp "\(\(.+: \(No such file or directory\|Permission denied\|is a directory\|not a regular file\)\)\s-*\)\'" from remote shell 10:46:05 tramp-process-one-action (5) # Looking for regexp "\(\)\'" from remote shell 10:46:05 tramp-process-one-action (5) # Call `tramp-action-out-of-band' 10:46:06 tramp-process-one-action (5) # Looking for regexp "\(^.*\([pP]assword\|[pP]assphrase\).*:\0? *\)\'" from remote shell 10:46:06 tramp-process-one-action (5) # Looking for regexp "\(^.*\(Connection \(?:\(?:clo\|refu\)sed\)\|Host key verification failed\.\|Login \(?:[Ii]ncorrect\)\|N\(?:ame or service not known\|o supported authentication methods left to try!\)\|Permission denied\|Sorry, try again\.\|Tramp connection closed\).*\|^.*\(Received signal [0-9]+\).*\)\'" from remote shell 10:46:06 tramp-process-one-action (5) # Looking for regexp "\(\(.+: \(No such file or directory\|Permission denied\|is a directory\|not a regular file\)\)\s-*\)\'" from remote shell 10:46:06 tramp-process-one-action (5) # Looking for regexp "\(\)\'" from remote shell 10:46:06 tramp-process-one-action (5) # Call `tramp-action-out-of-band' 10:46:07 tramp-process-one-action (5) # Looking for regexp "\(^.*\([pP]assword\|[pP]assphrase\).*:\0? *\)\'" from remote shell 10:46:07 tramp-process-one-action (5) # Looking for regexp "\(^.*\(Connection \(?:\(?:clo\|refu\)sed\)\|Host key verification failed\.\|Login \(?:[Ii]ncorrect\)\|N\(?:ame or service not known\|o supported authentication methods left to try!\)\|Permission denied\|Sorry, try again\.\|Tramp connection closed\).*\|^.*\(Received signal [0-9]+\).*\)\'" from remote shell 10:46:07 tramp-process-one-action (5) # Looking for regexp "\(\(.+: \(No such file or directory\|Permission denied\|is a directory\|not a regular file\)\)\s-*\)\'" from remote shell 10:46:07 tramp-process-one-action (5) # Looking for regexp "\(\)\'" from remote shell 10:46:07 tramp-process-one-action (5) # Call `tramp-action-out-of-band' 10:46:08 tramp-process-one-action (5) # Looking for regexp "\(^.*\([pP]assword\|[pP]assphrase\).*:\0? *\)\'" from remote shell 10:46:08 tramp-process-one-action (5) # Looking for regexp "\(^.*\(Connection \(?:\(?:clo\|refu\)sed\)\|Host key verification failed\.\|Login \(?:[Ii]ncorrect\)\|N\(?:ame or service not known\|o supported authentication methods left to try!\)\|Permission denied\|Sorry, try again\.\|Tramp connection closed\).*\|^.*\(Received signal [0-9]+\).*\)\'" from remote shell 10:46:08 tramp-process-one-action (5) # Looking for regexp "\(\(.+: \(No such file or directory\|Permission denied\|is a directory\|not a regular file\)\)\s-*\)\'" from remote shell 10:46:08 tramp-process-one-action (5) # Looking for regexp "\(\)\'" from remote shell 10:46:08 tramp-process-one-action (5) # Call `tramp-action-out-of-band' 10:46:09 tramp-process-one-action (5) # Looking for regexp "\(^.*\([pP]assword\|[pP]assphrase\).*:\0? *\)\'" from remote shell 10:46:09 tramp-process-one-action (5) # Looking for regexp "\(^.*\(Connection \(?:\(?:clo\|refu\)sed\)\|Host key verification failed\.\|Login \(?:[Ii]ncorrect\)\|N\(?:ame or service not known\|o supported authentication methods left to try!\)\|Permission denied\|Sorry, try again\.\|Tramp connection closed\).*\|^.*\(Received signal [0-9]+\).*\)\'" from remote shell 10:46:09 tramp-process-one-action (5) # Looking for regexp "\(\(.+: \(No such file or directory\|Permission denied\|is a directory\|not a regular file\)\)\s-*\)\'" from remote shell 10:46:09 tramp-process-one-action (5) # Looking for regexp "\(\)\'" from remote shell 10:46:09 tramp-process-one-action (5) # Call `tramp-action-out-of-band' ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: tramp: remote-to-remote hangs 2009-07-28 14:58 ` Neal Becker @ 2009-07-28 20:41 ` Michael Albinus 2009-07-29 13:06 ` Neal Becker 0 siblings, 1 reply; 6+ messages in thread From: Michael Albinus @ 2009-07-28 20:41 UTC (permalink / raw) To: Neal Becker; +Cc: emacs-devel Thanks for the trace, it gave me the needed information. I've committed a fix; could you, please, check? Best regards, Michael. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: tramp: remote-to-remote hangs 2009-07-28 20:41 ` Michael Albinus @ 2009-07-29 13:06 ` Neal Becker 2009-07-30 4:46 ` Michael Albinus 0 siblings, 1 reply; 6+ messages in thread From: Neal Becker @ 2009-07-29 13:06 UTC (permalink / raw) To: emacs-devel Michael Albinus wrote: > Thanks for the trace, it gave me the needed information. > > I've committed a fix; could you, please, check? > > Best regards, Michael. Where could I grab said fix (I'm using 23.0.96,1, not cvs) ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: tramp: remote-to-remote hangs 2009-07-29 13:06 ` Neal Becker @ 2009-07-30 4:46 ` Michael Albinus 0 siblings, 0 replies; 6+ messages in thread From: Michael Albinus @ 2009-07-30 4:46 UTC (permalink / raw) To: Neal Becker; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 259 bytes --] Neal Becker <ndbecker2@gmail.com> writes: > Where could I grab said fix (I'm using 23.0.96,1, not cvs) Enclosed is the patch I have applied to the trunk. Maybe you can apply it to your version; it shall differ only in line numbers. Best regards, Michael. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: Type: text/x-patch, Size: 10860 bytes --] *** /tmp/ediff3455tBf 2009-07-30 06:41:36.000000000 +0200 --- /tmp/ediff34556Ll 2009-07-30 06:41:36.000000000 +0200 *************** *** 3118,3123 **** --- 3118,3126 ---- (tramp-error v 'file-already-exists "File %s already exists" newname))) + (with-parsed-tramp-file-name (if t1 filename newname) nil + (tramp-message v 0 "Transferring %s to %s..." filename newname)) + (prog1 (cond ;; Both are Tramp files. *************** *** 3133,3145 **** op filename newname ok-if-already-exists keep-date preserve-uid-gid)) ! ;; If both source and target are Tramp files, ! ;; both are using the same copy-program, then we ! ;; can invoke rcp directly. Note that ! ;; default-directory should point to a local ! ;; directory if we want to invoke rcp. ! ((and (equal v1-method v2-method) ! (tramp-method-out-of-band-p v1) (> (nth 7 (file-attributes filename)) tramp-copy-size-limit)) (tramp-do-copy-or-rename-file-out-of-band --- 3136,3143 ---- op filename newname ok-if-already-exists keep-date preserve-uid-gid)) ! ;; Try out-of-band operation. ! ((and (tramp-method-out-of-band-p v1) (> (nth 7 (file-attributes filename)) tramp-copy-size-limit)) (tramp-do-copy-or-rename-file-out-of-band *************** *** 3192,3198 **** ;; When newname did exist, we have wrong cached values. (when t2 (with-parsed-tramp-file-name newname nil ! (tramp-flush-file-property v localname)))))) (defun tramp-do-copy-or-rename-file-via-buffer (op filename newname keep-date) "Use an Emacs buffer to copy or rename a file. --- 3190,3199 ---- ;; When newname did exist, we have wrong cached values. (when t2 (with-parsed-tramp-file-name newname nil ! (tramp-flush-file-property v localname))) ! ! (with-parsed-tramp-file-name (if t1 filename newname) nil ! (tramp-message v 0 "Transferring %s to %s...done" filename newname))))) (defun tramp-do-copy-or-rename-file-via-buffer (op filename newname keep-date) "Use an Emacs buffer to copy or rename a file. *************** *** 3376,3481 **** (defun tramp-do-copy-or-rename-file-out-of-band (op filename newname keep-date) "Invoke rcp program to copy. ! One of FILENAME and NEWNAME must be a Tramp name, the other must ! be a local filename. The method used must be an out-of-band method." (let ((t1 (tramp-tramp-file-p filename)) (t2 (tramp-tramp-file-p newname)) copy-program copy-args copy-keep-date port spec source target) (with-parsed-tramp-file-name (if t1 filename newname) nil ! ;; Expand hops. Might be necessary for gateway methods. ! (setq v (car (tramp-compute-multi-hops v))) ! (aset v 3 localname) ! ! ;; Check which ones of source and target are Tramp files. ! (setq source (if t1 (tramp-make-copy-program-file-name v) filename) ! target (if t2 (tramp-make-copy-program-file-name v) newname)) ! ! ;; Check for port number. Until now, there's no need for handling ! ;; like method, user, host. ! (setq host (tramp-file-name-real-host v) ! port (tramp-file-name-port v) ! port (or (and port (number-to-string port)) "")) ! ! ;; Compose copy command. ! (setq spec `((?h . ,host) (?u . ,user) (?p . ,port) ! (?t . ,(tramp-get-connection-property ! (tramp-get-connection-process v) "temp-file" "")) ! (?k . ,(if keep-date " " ""))) ! copy-program (tramp-get-method-parameter ! method 'tramp-copy-program) ! copy-keep-date (tramp-get-method-parameter ! method 'tramp-copy-keep-date) ! copy-args ! (delq ! nil ! (mapcar ! '(lambda (x) ! (setq ! ;; " " is indication for keep-date argument. ! x (delete " " (mapcar '(lambda (y) (format-spec y spec)) x))) ! (unless (member "" x) (mapconcat 'identity x " "))) ! (tramp-get-method-parameter method 'tramp-copy-args)))) ! ! ;; Check for program. ! (when (and (fboundp 'executable-find) ! (not (let ((default-directory ! (tramp-compat-temporary-file-directory))) ! (executable-find copy-program)))) ! (tramp-error ! v 'file-error "Cannot find copy program: %s" copy-program)) ! ! (tramp-message v 0 "Transferring %s to %s..." filename newname) ! (unwind-protect ! (with-temp-buffer ! ;; The default directory must be remote. ! (let ((default-directory ! (file-name-directory (if t1 filename newname)))) ! ;; Set the transfer process properties. ! (tramp-set-connection-property ! v "process-name" (buffer-name (current-buffer))) ! (tramp-set-connection-property ! v "process-buffer" (current-buffer)) ! ! ;; Use an asynchronous process. By this, password can ! ;; be handled. The default directory must be local, in ! ;; order to apply the correct `copy-program'. We don't ! ;; set a timeout, because the copying of large files can ! ;; last longer than 60 secs. ! (let ((p (let ((default-directory ! (tramp-compat-temporary-file-directory))) ! (apply 'start-process ! (tramp-get-connection-property ! v "process-name" nil) ! (tramp-get-connection-property ! v "process-buffer" nil) ! copy-program ! (append copy-args (list source target)))))) ! (tramp-message ! v 6 "%s" (mapconcat 'identity (process-command p) " ")) ! (tramp-set-process-query-on-exit-flag p nil) ! (tramp-process-actions p v tramp-actions-copy-out-of-band)))) ! ! ;; Reset the transfer process properties. ! (tramp-set-connection-property v "process-name" nil) ! (tramp-set-connection-property v "process-buffer" nil)) ! ! (tramp-message v 0 "Transferring %s to %s...done" filename newname) ! ! ;; Handle KEEP-DATE argument. ! (when (and keep-date (not copy-keep-date)) ! (set-file-times newname (nth 5 (file-attributes filename)))) ! ! ;; Set the mode. ! (unless (and keep-date copy-keep-date) ! (set-file-modes newname (tramp-default-file-modes filename)))) ! ! ;; If the operation was `rename', delete the original file. ! (unless (eq op 'copy) ! (delete-file filename)))) (defun tramp-handle-make-directory (dir &optional parents) "Like `make-directory' for Tramp files." --- 3377,3493 ---- (defun tramp-do-copy-or-rename-file-out-of-band (op filename newname keep-date) "Invoke rcp program to copy. ! The method used must be an out-of-band method." (let ((t1 (tramp-tramp-file-p filename)) (t2 (tramp-tramp-file-p newname)) copy-program copy-args copy-keep-date port spec source target) (with-parsed-tramp-file-name (if t1 filename newname) nil + (if (and t1 t2) ! ;; Both are Tramp files. We shall optimize it, when the ! ;; methods for filename and newname are the same. ! (let ((tmpfile (tramp-compat-make-temp-file localname))) ! (unwind-protect ! (progn ! (tramp-do-copy-or-rename-file-out-of-band ! op filename tmpfile keep-date) ! (tramp-do-copy-or-rename-file-out-of-band ! 'rename tmpfile newname keep-date)) ! ;; Save exit. ! (condition-case nil ! (delete-file tmpfile) ! (error)))) ! ! ;; Expand hops. Might be necessary for gateway methods. ! (setq v (car (tramp-compute-multi-hops v))) ! (aset v 3 localname) ! ! ;; Check which ones of source and target are Tramp files. ! (setq source (if t1 (tramp-make-copy-program-file-name v) filename) ! target (if t2 (tramp-make-copy-program-file-name v) newname)) ! ! ;; Check for port number. Until now, there's no need for handling ! ;; like method, user, host. ! (setq host (tramp-file-name-real-host v) ! port (tramp-file-name-port v) ! port (or (and port (number-to-string port)) "")) ! ! ;; Compose copy command. ! (setq spec `((?h . ,host) (?u . ,user) (?p . ,port) ! (?t . ,(tramp-get-connection-property ! (tramp-get-connection-process v) "temp-file" "")) ! (?k . ,(if keep-date " " ""))) ! copy-program (tramp-get-method-parameter ! method 'tramp-copy-program) ! copy-keep-date (tramp-get-method-parameter ! method 'tramp-copy-keep-date) ! copy-args ! (delq ! nil ! (mapcar ! '(lambda (x) ! (setq ! x ! ;; " " is indication for keep-date argument. ! (delete " " (mapcar '(lambda (y) (format-spec y spec)) x))) ! (unless (member "" x) (mapconcat 'identity x " "))) ! (tramp-get-method-parameter method 'tramp-copy-args)))) ! ! ;; Check for program. ! (when (and (fboundp 'executable-find) ! (not (let ((default-directory ! (tramp-compat-temporary-file-directory))) ! (executable-find copy-program)))) ! (tramp-error ! v 'file-error "Cannot find copy program: %s" copy-program)) ! (unwind-protect ! (with-temp-buffer ! ;; The default directory must be remote. ! (let ((default-directory ! (file-name-directory (if t1 filename newname)))) ! ;; Set the transfer process properties. ! (tramp-set-connection-property ! v "process-name" (buffer-name (current-buffer))) ! (tramp-set-connection-property ! v "process-buffer" (current-buffer)) ! ! ;; Use an asynchronous process. By this, password can ! ;; be handled. The default directory must be local, in ! ;; order to apply the correct `copy-program'. We don't ! ;; set a timeout, because the copying of large files can ! ;; last longer than 60 secs. ! (let ((p (let ((default-directory ! (tramp-compat-temporary-file-directory))) ! (apply 'start-process ! (tramp-get-connection-property ! v "process-name" nil) ! (tramp-get-connection-property ! v "process-buffer" nil) ! copy-program ! (append copy-args (list source target)))))) ! (tramp-message ! v 6 "%s" (mapconcat 'identity (process-command p) " ")) ! (tramp-set-process-query-on-exit-flag p nil) ! (tramp-process-actions p v tramp-actions-copy-out-of-band)))) ! ! ;; Reset the transfer process properties. ! (tramp-set-connection-property v "process-name" nil) ! (tramp-set-connection-property v "process-buffer" nil)) ! ! ;; Handle KEEP-DATE argument. ! (when (and keep-date (not copy-keep-date)) ! (set-file-times newname (nth 5 (file-attributes filename)))) ! ! ;; Set the mode. ! (unless (and keep-date copy-keep-date) ! (set-file-modes newname (tramp-default-file-modes filename)))) ! ! ;; If the operation was `rename', delete the original file. ! (unless (eq op 'copy) ! (delete-file filename))))) (defun tramp-handle-make-directory (dir &optional parents) "Like `make-directory' for Tramp files." ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-07-30 4:46 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-07-28 14:10 tramp: remote-to-remote hangs Neal Becker 2009-07-28 14:37 ` Michael Albinus 2009-07-28 14:58 ` Neal Becker 2009-07-28 20:41 ` Michael Albinus 2009-07-29 13:06 ` Neal Becker 2009-07-30 4:46 ` Michael Albinus
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).