comparison lisp/net/tramp-smb.el @ 49612:407d6516031a

2003-02-05 Kai Gro?ohann <kai.grossjohann@uni-duisburg.de> Version 2.0.29 released. * net/tramp.el (tramp-send-region): Protect against tramp-chunksize being nil. 2003-02-04 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-handle-directory-file-name): Handle the case PATH is "". (tramp-completion-handle-file-name-all-completions): Define `tramp-current-user' locally. See `tramp-parse-passwd'. (tramp-parse-passwd): For su-alike methods it would be desirable to return "root@localhost" as default. Unfortunately, we have no information whether any user name has been typed already. So we (mis-)use tramp-current-user as indication, assuming it is set in `tramp-completion-handle-file-name-all-completions'. (tramp-send-region): Handle the case `tramp-chunksize' is equal 0. I did it accidently. Infinite loop ... * net/tramp-ftp.el (top-level): eval-after-load "ange-ftp" '(tramp-disable-ange-ftp). Suggested by Kai. (tramp-ftp-file-name-handler): `tramp-disable-ange-ftp' not needed any longer. * net/tramp-smb.el (tramp-smb-file-name-handler-alist): Apply `tramp-handle-directory-file-name' in order to profit from Kai's yesterday changes. 2003-02-03 Kai Gro?ohann <kai.grossjohann@uni-duisburg.de> * net/tramp.el (tramp-chunksize): Set default to 500 as workaround for some ssh connections. (tramp-handle-directory-file-name): New implementation. Not sure if it works. 2003-01-28 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-device): `tramp-make-tramp-file-name' must not be called with NIL path. It fails in case of multi-method. 2003-01-27 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-file-name-for-operation): Apply `expand-file-name' for relative file names only. Otherwise there might be problems if the default directory is another Tramp directory as the directory the file is based on. (tramp-find-foreign-file-name-handler): Check whether FILENAME is a Tramp file name. It isn't if it comes from an expanded file name (like "/xx:yy//zz"). 2003-01-25 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-devices): New variable. Keeps virtual device numbers. Devices must distinguish physical file systems. The device numbers provided by "lstat" aren't unique, because we operate on different hosts. So we use virtual device numbers, generated by `tramp-get-device'. Both Ange-FTP and EFS use device number -1. In order to be different, we use device number (-1 x), whereby "x" is unique for a given (multi-method method user host). Suggested by Kai. (tramp-perl-file-attributes): Always return device number -1. There will be a virtual device number set in `tramp-handle-file-attributes', which replaces this one. (tramp-handle-file-attributes): Set virtual device number. (tramp-get-device): New function. Returns the virtual device number. If it doesn't exist, generate a new one. (tramp-handle-file-regular-p): Use Emacs file name primitives instead of calling tramp-handle-* equivalents directly. Needed for tramp-smb. * net/tramp-smb.el (tramp-smb-devices, tramp-smb-get-device): Removed. Functionality moved to tramp.el. (tramp-smb-handle-file-attributes): Apply `tramp-get-device'. ATIME and CTIME are (0 0) now (= "don't know"), which is more honest. (tramp-smb-handle-make-directory): Use Emacs file name primitives instead of calling tramp-smb-handle-* equivalents directly. (tramp-smb-read-file-entry): Return size as a number but a string. 2003-01-24 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-function-alist-ssh): Add parsing of "/etc/ssh_config" and "~/.ssh/config". Suggested by Kai. (tramp-completion-function-alist, tramp-set-completion-function): Doc string update. (tramp-parse-sconfig, tramp-parse-sconfig-group): New functions. Provide parsing of "~/.ssh/config" style files. 2003-01-21 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-handle-expand-file-name): Apply `tramp-drop-volume-letter'. Otherwise, there are problems on W32 systems. 2003-01-21 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp-smb.el (tramp-smb-get-device, tramp-smb-get-inode): New functions. Device number and inode number don't exist for SMB files. Therefore we must generate virtual ones. (tramp-smb-devices, tramp-smb-inodes): New variables. Keep generated virtual device numbers and inodes numbers for SMB files. (tramp-smb-handle-file-attributes): Apply them. 2003-01-14 Kai Gro?ohann <kai.grossjohann@uni-duisburg.de> * net/tramp.el (tramp-md5-function): Require md5 before checking function md5. If using md5-encode, put wrapper around it that converts vector of bytes to ascii text. 2003-01-13 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-mode): Perform check (integerp last-input-event) before (event-modifiers last-input-event) - there might be problems if `last-input-event' is a mouse event. 2003-01-12 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-parse-rhosts, tramp-parse-shosts) (tramp-parse-hosts, tramp-parse-passwd, tramp-parse-netrc): Use `file-readable-p' instead of `file-exists-p'. Otherwise these functions might block. Reported by <kin@neoscale.com>. 2003-01-02 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp-ftp.el (top-level): Defaults for `tramp-default-method-alist' must be a list. * net/tramp-smb.el (top-level): Defaults for `tramp-default-method-alist' must be a list. 2003-01-02 Kai Gro?ohann <kai.grossjohann@uni-duisburg.de> * net/tramp.el (top-level): Avoid byte-compiler warnings of unused variables if the byte-compiler supports this. This is for the with-parsed-tramp-file-name macro which is wont to produce such stuff.
author Kai Großjohann <kgrossjo@eu.uu.net>
date Wed, 05 Feb 2003 21:03:36 +0000
parents 0d8b17d428b5
children a0e8a85259ed d7ddb3e565de
comparison
equal deleted inserted replaced
49611:c6104239711d 49612:407d6516031a
1 ;;; tramp-smb.el --- Tramp access functions for SMB servers -*- coding: iso-8859-1; -*- 1 ;;; tramp-smb.el --- Tramp access functions for SMB servers -*- coding: iso-8859-1; -*-
2 2
3 ;; Copyright (C) 2002 Free Software Foundation, Inc. 3 ;; Copyright (C) 2002, 2003 Free Software Foundation, Inc.
4 4
5 ;; Author: Michael Albinus <Michael.Albinus@alcatel.de> 5 ;; Author: Michael Albinus <Michael.Albinus@alcatel.de>
6 ;; Keywords: comm, processes 6 ;; Keywords: comm, processes
7 7
8 ;; This file is part of GNU Emacs. 8 ;; This file is part of GNU Emacs.
48 (add-to-list 'tramp-methods (cons tramp-smb-method nil)) 48 (add-to-list 'tramp-methods (cons tramp-smb-method nil))
49 49
50 ;; Add a default for `tramp-default-method-alist'. Rule: If there is 50 ;; Add a default for `tramp-default-method-alist'. Rule: If there is
51 ;; a domain in USER, it must be the SMB method. 51 ;; a domain in USER, it must be the SMB method.
52 (add-to-list 'tramp-default-method-alist 52 (add-to-list 'tramp-default-method-alist
53 '("%" "" tramp-smb-method)) 53 (list "%" "" tramp-smb-method))
54 54
55 ;; Add completion function for SMB method. 55 ;; Add completion function for SMB method.
56 (tramp-set-completion-function 56 (tramp-set-completion-function
57 tramp-smb-method 57 tramp-smb-method
58 '((tramp-parse-netrc "~/.netrc"))) 58 '((tramp-parse-netrc "~/.netrc")))
106 "Flag whether a corresponding process is still running. 106 "Flag whether a corresponding process is still running.
107 Will be changed by corresponding `process-sentinel'. 107 Will be changed by corresponding `process-sentinel'.
108 This variable is local to each buffer.") 108 This variable is local to each buffer.")
109 (make-variable-buffer-local 'tramp-smb-process-running) 109 (make-variable-buffer-local 'tramp-smb-process-running)
110 110
111 (defvar tramp-smb-inodes nil
112 "Keeps virtual inodes numbers for SMB files.")
113
111 ;; New handlers should be added here. 114 ;; New handlers should be added here.
112 (defconst tramp-smb-file-name-handler-alist 115 (defconst tramp-smb-file-name-handler-alist
113 '( 116 '(
114 ;; `access-file' performed by default handler 117 ;; `access-file' performed by default handler
115 (add-name-to-file . tramp-smb-handle-copy-file) ;; we're on Windows, honey. 118 (add-name-to-file . tramp-smb-handle-copy-file) ;; we're on Windows, honey.
116 ;; `byte-compiler-base-file-name' performed by default handler 119 ;; `byte-compiler-base-file-name' performed by default handler
117 (copy-file . tramp-smb-handle-copy-file) 120 (copy-file . tramp-smb-handle-copy-file)
118 (delete-directory . tramp-smb-handle-delete-directory) 121 (delete-directory . tramp-smb-handle-delete-directory)
119 (delete-file . tramp-smb-handle-delete-file) 122 (delete-file . tramp-smb-handle-delete-file)
120 ;; `diff-latest-backup-file' performed by default handler 123 ;; `diff-latest-backup-file' performed by default handler
121 ;; `directory-file-name' performed by default handler 124 (directory-file-name . tramp-handle-directory-file-name)
122 (directory-files . tramp-smb-handle-directory-files) 125 (directory-files . tramp-smb-handle-directory-files)
123 (directory-files-and-attributes . tramp-smb-handle-directory-files-and-attributes) 126 (directory-files-and-attributes . tramp-smb-handle-directory-files-and-attributes)
124 (dired-call-process . tramp-smb-not-handled) 127 (dired-call-process . tramp-smb-not-handled)
125 (dired-compress-file . tramp-smb-not-handled) 128 (dired-compress-file . tramp-smb-not-handled)
126 ;; `dired-uncache' performed by default handler 129 ;; `dired-uncache' performed by default handler
340 (save-excursion 343 (save-excursion
341 (let* ((share (tramp-smb-get-share path)) 344 (let* ((share (tramp-smb-get-share path))
342 (file (tramp-smb-get-path path nil)) 345 (file (tramp-smb-get-path path nil))
343 (entries (tramp-smb-get-file-entries user host share file)) 346 (entries (tramp-smb-get-file-entries user host share file))
344 (entry (and entries 347 (entry (and entries
345 (assoc (file-name-nondirectory file) entries)))) 348 (assoc (file-name-nondirectory file) entries)))
349 (inode (tramp-smb-get-inode share file))
350 (device (tramp-get-device nil tramp-smb-method user host)))
351
346 ; check result 352 ; check result
347 (when entry 353 (when entry
348 (list (and (string-match "d" (nth 1 entry)) 354 (list (and (string-match "d" (nth 1 entry))
349 t) ;0 file type 355 t) ;0 file type
350 -1 ;1 link count 356 -1 ;1 link count
351 -1 ;2 uid 357 -1 ;2 uid
352 -1 ;3 gid 358 -1 ;3 gid
353 (nth 3 entry) ;4 atime 359 '(0 0) ;4 atime
354 (nth 3 entry) ;5 mtime 360 (nth 3 entry) ;5 mtime
355 (nth 3 entry) ;6 ctime 361 '(0 0) ;6 ctime
356 (nth 2 entry) ;7 size 362 (nth 2 entry) ;7 size
357 (nth 1 entry) ;8 mode 363 (nth 1 entry) ;8 mode
358 nil ;9 gid weird 364 nil ;9 gid weird
359 -1 ;10 inode number 365 inode ;10 inode number
360 -1)))))) ;11 file system number 366 device)))))) ;11 file system number
361 367
362 (defun tramp-smb-handle-file-directory-p (filename) 368 (defun tramp-smb-handle-file-directory-p (filename)
363 "Like `file-directory-p' for tramp files." 369 "Like `file-directory-p' for tramp files."
364 ; (with-parsed-tramp-file-name filename nil 370 ; (with-parsed-tramp-file-name filename nil
365 (let (user host path) 371 (let (user host path)
530 ;; Make missing directory parts 536 ;; Make missing directory parts
531 (when (and parents share (not (file-directory-p ldir))) 537 (when (and parents share (not (file-directory-p ldir)))
532 (make-directory ldir parents)) 538 (make-directory ldir parents))
533 ;; Just do it 539 ;; Just do it
534 (when (file-directory-p ldir) 540 (when (file-directory-p ldir)
535 (tramp-smb-handle-make-directory-internal dir)) 541 (make-directory-internal dir))
536 (unless (file-directory-p dir) 542 (unless (file-directory-p dir)
537 (error "Couldn't make directory %s" dir)))))) 543 (error "Couldn't make directory %s" dir))))))
538 544
539 (defun tramp-smb-handle-make-directory-internal (directory) 545 (defun tramp-smb-handle-make-directory-internal (directory)
540 "Like `make-directory-internal' for tramp files." 546 "Like `make-directory-internal' for tramp files."
820 (setq line (substring line 0 -5)) 826 (setq line (substring line 0 -5))
821 (return)) 827 (return))
822 828
823 ;; size 829 ;; size
824 (if (string-match "\\([0-9]+\\)$" line) 830 (if (string-match "\\([0-9]+\\)$" line)
825 (setq size (match-string 1 line) 831 (setq
826 line (substring line 0 (- (max 8 (1+ (length size)))))) 832 size (string-to-number (match-string 1 line))
833 line (substring
834 line 0 (- (max 8 (1+ (length (match-string 1 line)))))))
827 (return)) 835 (return))
828 836
829 ;; mode 837 ;; mode
830 (if (string-match "\\(\\([ADHRS]+\\)?\\s-?\\)$" line) 838 (if (string-match "\\(\\([ADHRS]+\\)?\\s-?\\)$" line)
831 (setq 839 (setq
851 sec min hour day 859 sec min hour day
852 (cdr (assoc (downcase month) tramp-smb-parse-time-months)) 860 (cdr (assoc (downcase month) tramp-smb-parse-time-months))
853 year) 861 year)
854 '(0 0))) 862 '(0 0)))
855 (list path mode size mtime)))) 863 (list path mode size mtime))))
864
865 ;; Inodes don't exist for SMB files. Therefore we must generate virtual ones.
866 ;; Used in `find-buffer-visiting'.
867 ;; The method applied might be not so efficient (Ange-FTP uses hashes). But
868 ;; performance isn't the major issue given that file transfer will take time.
869
870 (defun tramp-smb-get-inode (share file)
871 "Returns the virtual inode number.
872 If it doesn't exist, generate a new one."
873 (let ((string (concat share "/" (directory-file-name file))))
874 (unless (assoc string tramp-smb-inodes)
875 (add-to-list 'tramp-smb-inodes
876 (list string (length tramp-smb-inodes))))
877 (nth 1 (assoc string tramp-smb-inodes))))
856 878
857 879
858 ;; Connection functions 880 ;; Connection functions
859 881
860 (defun tramp-smb-send-command (user host command) 882 (defun tramp-smb-send-command (user host command)