mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-31 20:02:42 +00:00
* net/tramp-imap.el (top): Add X-Size' to
imap-hash-headers'.
(tramp-imap-do-copy-or-rename-file): Don't use the inode, when calling `tramp-imap-put-file'. Add file size to the call. (tramp-imap-get-file-entries): Compute also user name, file size, and date. (tramp-imap-handle-insert-directory): Insert uid and gid. (tramp-imap-handle-file-attributes): Transform uid and gid according to `id-format'. (tramp-imap-put-file): New optional parameter SIZE. Encode file size in header X-Size.
This commit is contained in:
parent
b8c5de8f13
commit
9be01a63e3
@ -1,3 +1,16 @@
|
||||
2009-10-27 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
|
||||
(tramp-imap-do-copy-or-rename-file): Don't use the inode, when
|
||||
calling `tramp-imap-put-file'. Add file size to the call.
|
||||
(tramp-imap-get-file-entries): Compute also user name, file size,
|
||||
and date.
|
||||
(tramp-imap-handle-insert-directory): Insert uid and gid.
|
||||
(tramp-imap-handle-file-attributes): Transform uid and gid
|
||||
according to `id-format'.
|
||||
(tramp-imap-put-file): New optional parameter SIZE. Encode file
|
||||
size in header X-Size.
|
||||
|
||||
2009-10-26 Juanma Barranquero <lekktu@gmail.com>
|
||||
|
||||
* simple.el (transpose-subr): Give clearer error when the mark
|
||||
|
@ -60,6 +60,9 @@
|
||||
(require 'epa)
|
||||
(autoload 'auth-source-user-or-password "auth-source")
|
||||
|
||||
;; We use the additional header "X-Size" for encoding the size of a file.
|
||||
(add-to-list 'imap-hash-headers 'X-Size 'append)
|
||||
|
||||
;; Define Tramp IMAP method ...
|
||||
(defconst tramp-imap-method "imap"
|
||||
"*Method to connect via IMAP protocol.")
|
||||
@ -243,8 +246,7 @@ of `copy' and `rename'."
|
||||
(tramp-imap-put-file
|
||||
v (current-buffer)
|
||||
(tramp-imap-file-name-name v)
|
||||
(tramp-imap-get-file-inode newname)
|
||||
nil))
|
||||
nil nil (nth 7 (file-attributes filename))))
|
||||
;; One of them is not located on a IMAP mailbox.
|
||||
(insert-file-contents filename)
|
||||
(write-region (point-min) (point-max) newname)))
|
||||
@ -319,17 +321,25 @@ SIZE MODE WEIRD INODE DEVICE)."
|
||||
(imap-hash-map (lambda (uid headers body)
|
||||
(let ((subject (substring
|
||||
(aget headers 'Subject "")
|
||||
(length tramp-imap-subject-marker))))
|
||||
(length tramp-imap-subject-marker)))
|
||||
(from (aget headers 'From ""))
|
||||
(date (date-to-time (aget headers 'Date "")))
|
||||
(size (string-to-number
|
||||
(or (aget headers 'X-Size "0") "0"))))
|
||||
(setq from
|
||||
(if (string-match "<\\([^@]+\\)@" from)
|
||||
(match-string 1 from)
|
||||
"nobody"))
|
||||
(list
|
||||
subject
|
||||
nil
|
||||
-1
|
||||
1
|
||||
1
|
||||
'(0 0)
|
||||
'(0 0)
|
||||
'(0 0)
|
||||
1
|
||||
from
|
||||
"nogroup"
|
||||
date
|
||||
date
|
||||
date
|
||||
size
|
||||
"-rw-rw-rw-"
|
||||
nil
|
||||
uid
|
||||
@ -440,7 +450,8 @@ SIZE MODE WEIRD INODE DEVICE)."
|
||||
"%10s %3d %-8s %-8s %8s %s "
|
||||
(nth 9 x) ; mode
|
||||
(nth 11 x) ; inode
|
||||
"nobody" "nogroup"
|
||||
(nth 3 x) ; uid
|
||||
(nth 4 x) ; gid
|
||||
(nth 8 x) ; size
|
||||
(format-time-string
|
||||
(if (tramp-time-less-p
|
||||
@ -499,7 +510,11 @@ SIZE MODE WEIRD INODE DEVICE)."
|
||||
(defun tramp-imap-handle-file-attributes (filename &optional id-format)
|
||||
"Like `file-attributes' for Tramp-IMAP FILENAME."
|
||||
(with-parsed-tramp-file-name (expand-file-name filename) nil
|
||||
(cdr-safe (nth 0 (tramp-imap-get-file-entries v localname)))))
|
||||
(let ((res (cdr-safe (nth 0 (tramp-imap-get-file-entries v localname)))))
|
||||
(unless (or (null res) (eq id-format 'string))
|
||||
(setcar (nthcdr 2 res) 1)
|
||||
(setcar (nthcdr 3 res) 1))
|
||||
res)))
|
||||
|
||||
(defun tramp-imap-get-file-inode (filename &optional id-format)
|
||||
"Get inode equivalent \(actually the UID) for Tramp-IMAP FILENAME."
|
||||
@ -560,10 +575,13 @@ SIZE MODE WEIRD INODE DEVICE)."
|
||||
(tramp-message v 4 "Fetching %s to tmp file %s...done" filename tmpfile)
|
||||
tmpfile))))
|
||||
|
||||
(defun tramp-imap-put-file (vec filename-or-buffer &optional subject inode encode)
|
||||
(defun tramp-imap-put-file
|
||||
(vec filename-or-buffer &optional subject inode encode size)
|
||||
"Write contents of FILENAME-OR-BUFFER to Tramp-IMAP file VEC with name SUBJECT.
|
||||
When INODE is given, delete that old remote file after writing the new one
|
||||
\(normally this is the old file with the same name)."
|
||||
\(normally this is the old file with the same name). A non-nil ENCODE
|
||||
forces the encoding of the buffer or file. SIZE, when available, indicates
|
||||
the file size; this is needed, if the file or buffer is already encoded."
|
||||
;; `tramp-current-host' is used in `tramp-imap-passphrase-callback-function'.
|
||||
(let ((tramp-current-host (tramp-file-name-real-host vec))
|
||||
(iht (tramp-imap-make-iht vec)))
|
||||
@ -573,7 +591,18 @@ When INODE is given, delete that old remote file after writing the new one
|
||||
(format
|
||||
"%s%s"
|
||||
tramp-imap-subject-marker
|
||||
(or subject "no subject"))))
|
||||
(or subject "no subject")))
|
||||
(cons
|
||||
'X-Size
|
||||
(number-to-string
|
||||
(cond
|
||||
((numberp size) size)
|
||||
((bufferp filename-or-buffer)
|
||||
(buffer-size filename-or-buffer))
|
||||
((stringp filename-or-buffer)
|
||||
(nth 7 (file-attributes filename-or-buffer)))
|
||||
;; We don't know the size.
|
||||
(t -1)))))
|
||||
(cond ((bufferp filename-or-buffer)
|
||||
(with-current-buffer filename-or-buffer
|
||||
(if encode
|
||||
@ -748,11 +777,7 @@ With NEEDED-SUBJECT, alters the imap-hash test accordingly."
|
||||
;; "/imaps:imap.gmail.com:/INBOX.test/" results in error
|
||||
;; "error in process filter: Internal error, tag 5 status BAD code nil text UNSELECT not allowed now."
|
||||
|
||||
;; * Improve `tramp-imap-handle-file-attributes'
|
||||
;; - size
|
||||
;; - modification time
|
||||
;; - user
|
||||
;; - Return info for directories.
|
||||
;; * Improve `tramp-imap-handle-file-attributes' for directories.
|
||||
|
||||
;; * Saving a file creates a second one, instead of overwriting.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user