emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-24 r117439: Revert 2013-01-31 change that decides co


From: Glenn Morris
Subject: [Emacs-diffs] emacs-24 r117439: Revert 2013-01-31 change that decides coding system before backing up
Date: Mon, 11 Aug 2014 00:38:35 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 117439
revision-id: address@hidden
parent: address@hidden
fixes bug: http://debbugs.gnu.org/18141
committer: Glenn Morris <address@hidden>
branch nick: emacs-24
timestamp: Sun 2014-08-10 17:38:19 -0700
message:
  Revert 2013-01-31 change that decides coding system before backing up
  
  It causes a more serious problem than the one it solves.
  This closes bug#18141, and reopens bug#13522.
  
  * lisp/files.el (basic-save-buffer-2): Revert 2013-01-31 change.
  
  * src/fileio.c: Revert 2013-01-31 change.
  (choose_write_coding_system): No longer callable from Lisp.
  Move last piece back here from Fwrite_region.
  (Fwrite_region, syms_of_fileio): Update for above changes.
  
  * test/automated/data/files-bug18141.el.gz: New file.
  * test/automated/files.el (files-test-bug-18141-file):
  New variable and test.
added:
  test/automated/data/files-bug18141.el.gz 
filesbug18141.el.gz-20140811003546-6pd2bkbh31dt12ov-1
modified:
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/files.el                  files.el-20091113204419-o5vbwnq5f7feedwu-265
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/fileio.c                   fileio.c-20091113204419-o5vbwnq5f7feedwu-210
  test/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-8588
  test/automated/files.el        files.el-20120808073143-2ikns3brqscsycpr-1
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2014-08-10 10:41:28 +0000
+++ b/lisp/ChangeLog    2014-08-11 00:38:19 +0000
@@ -1,3 +1,10 @@
+2014-08-11  Glenn Morris  <address@hidden>
+
+       * files.el (basic-save-buffer-2): Revert 2013-01-31 change, which
+       chose coding system for writing before backing up, since it causes
+       a more serious problem than the one it solves.  (Closes Bug#18141,
+       reopens Bug#13522.)
+
 2014-08-10  Martin Rudalics  <address@hidden>
 
        * window.el (window-total-size): Make doc-string more

=== modified file 'lisp/files.el'
--- a/lisp/files.el     2014-07-25 09:24:53 +0000
+++ b/lisp/files.el     2014-08-11 00:38:19 +0000
@@ -4756,7 +4756,7 @@
 ;; This returns a value (MODES EXTENDED-ATTRIBUTES BACKUPNAME), like
 ;; backup-buffer.
 (defun basic-save-buffer-2 ()
-  (let (tempsetmodes setmodes writecoding)
+  (let (tempsetmodes setmodes)
     (if (not (file-writable-p buffer-file-name))
        (let ((dir (file-name-directory buffer-file-name)))
          (if (not (file-directory-p dir))
@@ -4772,14 +4772,6 @@
                     buffer-file-name)))
                  (setq tempsetmodes t)
                (error "Attempt to save to a file which you aren't allowed to 
write"))))))
-    ;; This may involve prompting, so do it now before backing up the file.
-    ;; Otherwise there can be a delay while the user answers the
-    ;; prompt during which the original file has been renamed.  (Bug#13522)
-    (setq writecoding
-         ;; Args here should match write-region call below around
-         ;; which we use writecoding.
-         (choose-write-coding-system nil nil buffer-file-name nil t
-                                     buffer-file-truename))
     (or buffer-backed-up
        (setq setmodes (backup-buffer)))
     (let* ((dir (file-name-directory buffer-file-name))
@@ -4861,11 +4853,10 @@
                                 (logior (car setmodes) 128))))))
        (let (success)
          (unwind-protect
+             (progn
                 ;; Pass in nil&nil rather than point-min&max to indicate
                 ;; we're saving the buffer rather than just a region.
                 ;; write-region-annotate-functions may make us of it.
-             (let ((coding-system-for-write writecoding)
-                   (coding-system-require-warning nil))
                (write-region nil nil
                              buffer-file-name nil t buffer-file-truename)
                (setq success t))

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2014-08-09 11:12:45 +0000
+++ b/src/ChangeLog     2014-08-11 00:38:19 +0000
@@ -1,3 +1,12 @@
+2014-08-11  Glenn Morris  <address@hidden>
+
+       * fileio.c: Revert 2013-01-31 change, which chose coding system for
+       writing before backing up, since it causes a more serious problem
+       than the one it solves.  (Closes Bug#18141, reopens Bug#13522.)
+       (choose_write_coding_system): No longer callable from Lisp.
+       Move last piece back here from Fwrite_region.
+       (Fwrite_region, syms_of_fileio): Update for above changes.
+
 2014-08-09  Martin Rudalics  <address@hidden>
 
        * window.c (Fwindow_new_total, Fwindow_new_normal)

=== modified file 'src/fileio.c'
--- a/src/fileio.c      2014-06-21 07:03:41 +0000
+++ b/src/fileio.c      2014-08-11 00:38:19 +0000
@@ -323,7 +323,6 @@
 static Lisp_Object Qset_file_acl;
 static Lisp_Object Qfile_newer_than_file_p;
 Lisp_Object Qinsert_file_contents;
-static Lisp_Object Qchoose_write_coding_system;
 Lisp_Object Qwrite_region;
 static Lisp_Object Qverify_visited_file_modtime;
 static Lisp_Object Qset_visited_file_modtime;
@@ -4531,24 +4530,14 @@
 
 /* Decide the coding-system to encode the data with.  */
 
-DEFUN ("choose-write-coding-system", Fchoose_write_coding_system,
-       Schoose_write_coding_system, 3, 6, 0,
-       doc: /* Choose the coding system for writing a file.
-Arguments are as for `write-region'.
-This function is for internal use only.  It may prompt the user.  */ )
-  (Lisp_Object start, Lisp_Object end, Lisp_Object filename,
-   Lisp_Object append, Lisp_Object visit, Lisp_Object lockname)
+static Lisp_Object
+choose_write_coding_system (Lisp_Object start, Lisp_Object end, Lisp_Object 
filename,
+                           Lisp_Object append, Lisp_Object visit, Lisp_Object 
lockname,
+                           struct coding_system *coding)
 {
   Lisp_Object val;
   Lisp_Object eol_parent = Qnil;
 
-  /* Mimic write-region behavior.  */
-  if (NILP (start))
-    {
-      XSETFASTINT (start, BEGV);
-      XSETFASTINT (end, ZV);
-    }
-
   if (auto_saving
       && NILP (Fstring_equal (BVAR (current_buffer, filename),
                              BVAR (current_buffer, auto_save_file_name))))
@@ -4641,6 +4630,10 @@
     }
 
   val = coding_inherit_eol_type (val, eol_parent);
+  setup_coding_system (val, coding);
+
+  if (!STRINGP (start) && !NILP (BVAR (current_buffer, selective_display)))
+    coding->mode |= CODING_MODE_SELECTIVE_DISPLAY;
   return val;
 }
 
@@ -4809,14 +4802,9 @@
      We used to make this choice before calling build_annotations, but that
      leads to problems when a write-annotate-function takes care of
      unsavable chars (as was the case with X-Symbol).  */
-  Vlast_coding_system_used =
-    Fchoose_write_coding_system (start, end, filename,
-                                 append, visit, lockname);
-
-  setup_coding_system (Vlast_coding_system_used, &coding);
-
-  if (!STRINGP (start) && !NILP (BVAR (current_buffer, selective_display)))
-    coding.mode |= CODING_MODE_SELECTIVE_DISPLAY;
+  Vlast_coding_system_used
+    = choose_write_coding_system (start, end, filename,
+                                 append, visit, lockname, &coding);
 
 #ifdef CLASH_DETECTION
   if (open_and_close_file && !auto_saving)
@@ -5861,7 +5849,6 @@
   DEFSYM (Qset_file_acl, "set-file-acl");
   DEFSYM (Qfile_newer_than_file_p, "file-newer-than-file-p");
   DEFSYM (Qinsert_file_contents, "insert-file-contents");
-  DEFSYM (Qchoose_write_coding_system, "choose-write-coding-system");
   DEFSYM (Qwrite_region, "write-region");
   DEFSYM (Qverify_visited_file_modtime, "verify-visited-file-modtime");
   DEFSYM (Qset_visited_file_modtime, "set-visited-file-modtime");
@@ -6100,7 +6087,6 @@
   defsubr (&Sdefault_file_modes);
   defsubr (&Sfile_newer_than_file_p);
   defsubr (&Sinsert_file_contents);
-  defsubr (&Schoose_write_coding_system);
   defsubr (&Swrite_region);
   defsubr (&Scar_less_than_car);
   defsubr (&Sverify_visited_file_modtime);

=== modified file 'test/ChangeLog'
--- a/test/ChangeLog    2014-08-07 00:08:57 +0000
+++ b/test/ChangeLog    2014-08-11 00:38:19 +0000
@@ -1,3 +1,9 @@
+2014-08-11  Glenn Morris  <address@hidden>
+
+       * automated/data/files-bug18141.el.gz: New file.
+       * automated/files.el (files-test-bug-18141-file):
+       New variable and test.  (Bug#18141)
+
 2014-08-07  Glenn Morris  <address@hidden>
 
        * automated/Makefile.in (check-tar): Remove, no longer needed.

=== added file 'test/automated/data/files-bug18141.el.gz'
Binary files a/test/automated/data/files-bug18141.el.gz 1970-01-01 00:00:00 
+0000 and b/test/automated/data/files-bug18141.el.gz        2014-08-11 00:38:19 
+0000 differ
=== modified file 'test/automated/files.el'
--- a/test/automated/files.el   2014-01-01 07:43:34 +0000
+++ b/test/automated/files.el   2014-08-11 00:38:19 +0000
@@ -148,6 +148,24 @@
              (should (file-test--do-local-variables-test str subtest))))))
     (ad-disable-advice 'hack-local-variables-confirm 'around 'files-test)))
 
+(defvar files-test-bug-18141-file
+  (expand-file-name "data/files-bug18141.el.gz" (getenv 
"EMACS_TEST_DIRECTORY"))
+  "Test file for bug#18141.")
+
+(ert-deftest files-test-bug-18141 ()
+  "Test for http://debbugs.gnu.org/18141 ."
+  (skip-unless (executable-find "gzip"))
+  (let ((tempfile (make-temp-file "files-test-bug-18141" nil ".gz")))
+    (unwind-protect
+       (progn
+         (copy-file files-test-bug-18141-file tempfile t)
+         (with-current-buffer (find-file-noselect tempfile)
+           (set-buffer-modified-p t)
+           (save-buffer)
+           (should (eq buffer-file-coding-system 'iso-2022-7bit-unix))))
+      (delete-file tempfile))))
+
+
 ;; Stop the above "Local Var..." confusing Emacs.
 
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]