1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-23 06:00:41 -08:00

Extend meaning of UNIQUIFY `auto-save-file-name-transforms'. (Bug#47493)

* doc/lispref/backups.texi (Auto-Saving): Explain UNIQUIFY being a
secure hash in auto-save-file-name-transforms.

* etc/NEWS: Mention change in `auto-save-file-name-transforms'.

* lisp/files.el (auto-save-file-name-transforms): Adapt docstring.
(make-auto-save-file-name): Care, if UNIQ is a secure hash symbol.
This commit is contained in:
Michael Albinus 2021-05-10 13:42:48 +02:00
parent fafe912bd3
commit 02c80307f1
3 changed files with 31 additions and 8 deletions

View file

@ -481,6 +481,12 @@ all directory separators were changed to @samp{!} to prevent clashes.
(This will not work correctly if your filesystem truncates the (This will not work correctly if your filesystem truncates the
resulting name.) resulting name.)
If @var{uniquify} is one of the members of
@code{secure-hash-algorithms}, Emacs constructs the nondirectory part
of the auto-save file name by applying that @code{secure-hash} to the
buffer file name. This avoids any risk of excessively long file
names.
All the transforms in the list are tried, in the order they are listed. All the transforms in the list are tried, in the order they are listed.
When one transform applies, its result is final; When one transform applies, its result is final;
no further transforms are tried. no further transforms are tried.

View file

@ -3083,6 +3083,13 @@ It is written as '(:success BODY...)' where BODY is executed
whenever the protected form terminates without error, with the whenever the protected form terminates without error, with the
specified variable bound to the the value of the protected form. specified variable bound to the the value of the protected form.
+++
** 'The 'uniquify' argument in 'auto-save-file-name-transforms' can be a symbol.
If this symbol is one of the members of 'secure-hash-algorithms',
Emacs constructs the nondirectory part of the auto-save file name by
applying that 'secure-hash' to the buffer file name. This avoids any
risk of excessively long file names.
* Changes in Emacs 28.1 on Non-Free Operating Systems * Changes in Emacs 28.1 on Non-Free Operating Systems

View file

@ -391,6 +391,10 @@ constructed by taking the directory part of the replaced file-name,
concatenated with the buffer file name with all directory separators concatenated with the buffer file name with all directory separators
changed to `!' to prevent clashes. This will not work changed to `!' to prevent clashes. This will not work
correctly if your filesystem truncates the resulting name. correctly if your filesystem truncates the resulting name.
If UNIQUIFY is one of the members of `secure-hash-algorithms',
Emacs constructs the nondirectory part of the auto-save file name
by applying that `secure-hash' to the buffer file name. This
avoids any risk of excessively long file names.
All the transforms in the list are tried, in the order they are listed. All the transforms in the list are tried, in the order they are listed.
When one transform applies, its result is final; When one transform applies, its result is final;
@ -6647,14 +6651,20 @@ See also `auto-save-file-name-p'."
uniq (car (cddr (car list))))) uniq (car (cddr (car list)))))
(setq list (cdr list))) (setq list (cdr list)))
(if result (if result
(if uniq (setq filename
(setq filename (concat (cond
((memq uniq (secure-hash-algorithms))
(concat
(file-name-directory result)
(secure-hash uniq filename)))
(uniq
(concat
(file-name-directory result) (file-name-directory result)
(subst-char-in-string (subst-char-in-string
?/ ?! ?/ ?!
(replace-regexp-in-string "!" "!!" (replace-regexp-in-string
filename)))) "!" "!!" filename))))
(setq filename result))) (t result))))
(setq result (setq result
(if (and (eq system-type 'ms-dos) (if (and (eq system-type 'ms-dos)
(not (msdos-long-file-names))) (not (msdos-long-file-names)))