emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r100127: Add optional arg to delete-f


From: Chong Yidong
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r100127: Add optional arg to delete-file to force deletion (Bug#6070).
Date: Mon, 03 May 2010 11:01:21 -0400
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 100127
committer: Chong Yidong <address@hidden>
branch nick: trunk
timestamp: Mon 2010-05-03 11:01:21 -0400
message:
  Add optional arg to delete-file to force deletion (Bug#6070).
  
  * eval.c (internal_condition_case_n): Rename from
  internal_condition_case_2.
  (internal_condition_case_2): New function.
  
  * xdisp.c (safe_call): Use internal_condition_case_n.
  
  * fileio.c (Fdelete_file, internal_delete_file): New arg FORCE.
  (internal_delete_file, Frename_file): Callers changed.
  
  * buffer.c (Fkill_buffer):
  * callproc.c (delete_temp_file): Callers changed (Bug#6070).
  
  * lisp.h: Update prototypes.
  
  * diff.el (diff-sentinel):
  
  * epg.el (epg--make-temp-file, epg-decrypt-string)
  (epg-verify-string, epg-sign-string, epg-encrypt-string):
  
  * jka-compr.el (jka-compr-partial-uncompress)
  (jka-compr-call-process, jka-compr-write-region, jka-compr-load):
  
  * server.el (server-sentinel): Use delete-file's new FORCE arg
  (Bug#6070).
modified:
  etc/NEWS
  lisp/ChangeLog
  lisp/diff.el
  lisp/epg.el
  lisp/jka-compr.el
  lisp/server.el
  src/ChangeLog
  src/buffer.c
  src/callproc.c
  src/eval.c
  src/fileio.c
  src/lisp.h
  src/xdisp.c
=== modified file 'etc/NEWS'
--- a/etc/NEWS  2010-05-02 05:56:30 +0000
+++ b/etc/NEWS  2010-05-03 15:01:21 +0000
@@ -109,6 +109,11 @@
 
 ** completion-at-point is now an alias for complete-symbol.
 
+** mouse-region-delete-keys has been deleted.
+
+** If delete-file is called with a prefix argument, it really deletes,
+regardless of the value of `delete-by-moving-to-trash'.
+
 
 * Changes in Specialized Modes and Packages in Emacs 24.1
 
@@ -181,6 +186,9 @@
 
 * Lisp changes in Emacs 24.1
 
+** delete-file now accepts an optional second arg, FORCE, which says
+to always delete and ignore the value of delete-by-moving-to-trash.
+
 ** buffer-substring-filters is obsoleted by filter-buffer-substring-functions.
 
 ** New completion style `substring'.

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2010-05-03 12:46:56 +0000
+++ b/lisp/ChangeLog    2010-05-03 15:01:21 +0000
@@ -1,3 +1,16 @@
+2010-05-03  Chong Yidong  <address@hidden>
+
+       * diff.el (diff-sentinel):
+
+       * epg.el (epg--make-temp-file, epg-decrypt-string)
+       (epg-verify-string, epg-sign-string, epg-encrypt-string):
+
+       * jka-compr.el (jka-compr-partial-uncompress)
+       (jka-compr-call-process, jka-compr-write-region, jka-compr-load):
+
+       * server.el (server-sentinel): Use delete-file's new FORCE arg
+       (Bug#6070).
+
 2010-05-03  Stefan Monnier  <address@hidden>
 
        Use define-minor-mode where applicable.
@@ -100,19 +113,6 @@
        (tramp-handle-file-local-copy, tramp-handle-write-region)
        (tramp-method-out-of-band-p): Use `tramp-get-inline-coding'.
 
-2010-05-01  Chong Yidong  <address@hidden>
-
-       * server.el (server-sentinel, server-start, server-force-delete):
-
-       * jka-compr.el (jka-compr-partial-uncompress)
-       (jka-compr-call-process, jka-compr-write-region, jka-compr-load):
-
-       * epg.el (epg--make-temp-file, epg-decrypt-string)
-       (epg-encrypt-string, epg-verify-string, epg-sign-string):
-
-       * diff.el (diff-sentinel): Bind delete-by-moving-to-trash to nil
-       before deleting (Bug#6070).
-
 2010-05-01  Stefan Monnier  <address@hidden>
 
        * bindings.el (mode-line-abbrev-mode, mode-line-auto-fill-mode):

=== modified file 'lisp/diff.el'
--- a/lisp/diff.el      2010-05-01 02:19:40 +0000
+++ b/lisp/diff.el      2010-05-03 15:01:21 +0000
@@ -64,9 +64,8 @@
   "Code run when the diff process exits.
 CODE is the exit code of the process.  It should be 0 only if no diffs
 were found."
-  (let (delete-by-moving-to-trash)
-    (if diff-old-temp-file (delete-file diff-old-temp-file))
-    (if diff-new-temp-file (delete-file diff-new-temp-file)))
+  (if diff-old-temp-file (delete-file diff-old-temp-file t))
+  (if diff-new-temp-file (delete-file diff-new-temp-file t))
   (save-excursion
     (goto-char (point-max))
     (let ((inhibit-read-only t))

=== modified file 'lisp/epg.el'
--- a/lisp/epg.el       2010-05-01 02:19:40 +0000
+++ b/lisp/epg.el       2010-05-03 15:01:21 +0000
@@ -1898,8 +1898,7 @@
          ;; Cleanup the tempfile.
          (and tempfile
               (file-exists-p tempfile)
-              (let (delete-by-moving-to-trash)
-                (delete-file tempfile)))
+              (delete-file tempfile t))
          ;; Cleanup the tempdir.
          (and tempdir
               (file-directory-p tempdir)
@@ -1999,8 +1998,7 @@
          (epg-read-output context))
       (epg-delete-output-file context)
       (if (file-exists-p input-file)
-         (let (delete-by-moving-to-trash)
-           (delete-file input-file)))
+         (delete-file input-file t))
       (epg-reset context))))
 
 (defun epg-start-verify (context signature &optional signed-text)
@@ -2097,8 +2095,7 @@
       (epg-delete-output-file context)
       (if (and input-file
               (file-exists-p input-file))
-         (let (delete-by-moving-to-trash)
-           (delete-file input-file)))
+         (delete-file input-file))
       (epg-reset context))))
 
 (defun epg-start-sign (context plain &optional mode)
@@ -2205,8 +2202,7 @@
          (epg-read-output context))
       (epg-delete-output-file context)
       (if input-file
-         (let (delete-by-moving-to-trash)
-           (delete-file input-file)))
+         (delete-file input-file t))
       (epg-reset context))))
 
 (defun epg-start-encrypt (context plain recipients
@@ -2326,8 +2322,7 @@
          (epg-read-output context))
       (epg-delete-output-file context)
       (if input-file
-         (let (delete-by-moving-to-trash)
-           (delete-file input-file)))
+         (delete-file input-file t))
       (epg-reset context))))
 
 (defun epg-start-export-keys (context keys)

=== modified file 'lisp/jka-compr.el'
--- a/lisp/jka-compr.el 2010-05-01 02:19:40 +0000
+++ b/lisp/jka-compr.el 2010-05-03 15:01:21 +0000
@@ -181,8 +181,7 @@
                          null-device))
                        jka-compr-acceptable-retval-list)
                  (jka-compr-error prog args infile message err-file))
-           (let (delete-by-moving-to-trash)
-             (delete-file err-file))))
+           (delete-file err-file t)))
 
       ;; Run the uncompression program directly.
       ;; We get the whole file and must delete what we don't want.
@@ -224,8 +223,7 @@
                                           "")))
                   jka-compr-acceptable-retval-list)
                  (jka-compr-error prog args infile message err-file))
-           (let (delete-by-moving-to-trash)
-             (delete-file err-file))))
+           (delete-file err-file t)))
       (or (eq 0
              (apply 'call-process
                     prog infile (if (stringp output) temp output)
@@ -337,8 +335,7 @@
                                                (and append can-append) 'dont))
              (erase-buffer)) )
 
-         (let (delete-by-moving-to-trash)
-           (delete-file temp-file))
+         (delete-file temp-file t)
 
          (and
           compress-message
@@ -604,8 +601,7 @@
              (setq file (file-name-sans-extension file)))
            (setcar l file)))
 
-      (let (delete-by-moving-to-trash)
-       (delete-file local-copy)))
+      (delete-file local-copy))
 
     t))
 

=== modified file 'lisp/server.el'
--- a/lisp/server.el    2010-05-01 02:19:40 +0000
+++ b/lisp/server.el    2010-05-03 15:01:21 +0000
@@ -345,8 +345,7 @@
   (and (process-contact proc :server)
        (eq (process-status proc) 'closed)
        (ignore-errors
-       (let (delete-by-moving-to-trash)
-         (delete-file (process-get proc :server-file)))))
+       (delete-file (process-get proc :server-file) t)))
   (server-log (format "Status changed to %s: %s" (process-status proc) msg) 
proc)
   (server-delete-client proc))
 

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2010-05-03 02:10:43 +0000
+++ b/src/ChangeLog     2010-05-03 15:01:21 +0000
@@ -1,3 +1,19 @@
+2010-05-03  Chong Yidong  <address@hidden>
+
+       * eval.c (internal_condition_case_n): Rename from
+       internal_condition_case_2.
+       (internal_condition_case_2): New function.
+
+       * xdisp.c (safe_call): Use internal_condition_case_n.
+
+       * fileio.c (Fdelete_file, internal_delete_file): New arg FORCE.
+       (internal_delete_file, Frename_file): Callers changed.
+
+       * buffer.c (Fkill_buffer):
+       * callproc.c (delete_temp_file): Callers changed (Bug#6070).
+
+       * lisp.h: Update prototypes.
+
 2010-05-03  Glenn Morris  <address@hidden>
 
        * Makefile.in (LIBX_EXTRA, LIBX_BASE): New variables.

=== modified file 'src/buffer.c'
--- a/src/buffer.c      2010-04-20 23:05:30 +0000
+++ b/src/buffer.c      2010-05-03 15:01:21 +0000
@@ -1547,7 +1547,7 @@
       Lisp_Object tem;
       tem = Fsymbol_value (intern ("delete-auto-save-files"));
       if (! NILP (tem))
-       internal_delete_file (b->auto_save_file_name);
+       internal_delete_file (b->auto_save_file_name, Qt);
     }
 
   if (b->base_buffer)

=== modified file 'src/callproc.c'
--- a/src/callproc.c    2010-04-02 03:10:33 +0000
+++ b/src/callproc.c    2010-05-03 15:01:21 +0000
@@ -856,7 +856,7 @@
   /* Suppress jka-compr handling, etc.  */
   int count = SPECPDL_INDEX ();
   specbind (intern ("file-name-handler-alist"), Qnil);
-  internal_delete_file (name);
+  internal_delete_file (name, Qt);
   unbind_to (count, Qnil);
   return Qnil;
 }

=== modified file 'src/eval.c'
--- a/src/eval.c        2010-04-29 12:42:01 +0000
+++ b/src/eval.c        2010-05-03 15:01:21 +0000
@@ -1563,12 +1563,61 @@
   return val;
 }
 
+/* Like internal_condition_case_1 but call BFUN with ARG1 and ARG2 as
+   its arguments.  */
+
+Lisp_Object
+internal_condition_case_2 (bfun, arg1, arg2, handlers, hfun)
+     Lisp_Object (*bfun) ();
+     Lisp_Object arg1;
+     Lisp_Object arg2;
+     Lisp_Object handlers;
+     Lisp_Object (*hfun) ();
+{
+  Lisp_Object val;
+  struct catchtag c;
+  struct handler h;
+
+  /* Since Fsignal will close off all calls to x_catch_errors,
+     we will get the wrong results if some are not closed now.  */
+#if HAVE_X_WINDOWS
+  if (x_catching_errors ())
+    abort ();
+#endif
+
+  c.tag = Qnil;
+  c.val = Qnil;
+  c.backlist = backtrace_list;
+  c.handlerlist = handlerlist;
+  c.lisp_eval_depth = lisp_eval_depth;
+  c.pdlcount = SPECPDL_INDEX ();
+  c.poll_suppress_count = poll_suppress_count;
+  c.interrupt_input_blocked = interrupt_input_blocked;
+  c.gcpro = gcprolist;
+  c.byte_stack = byte_stack_list;
+  if (_setjmp (c.jmp))
+    {
+      return (*hfun) (c.val);
+    }
+  c.next = catchlist;
+  catchlist = &c;
+  h.handler = handlers;
+  h.var = Qnil;
+  h.next = handlerlist;
+  h.tag = &c;
+  handlerlist = &h;
+
+  val = (*bfun) (arg1, arg2);
+  catchlist = c.next;
+  handlerlist = h.next;
+  return val;
+}
 
 /* Like internal_condition_case but call BFUN with NARGS as first,
    and ARGS as second argument.  */
 
 Lisp_Object
-internal_condition_case_2 (bfun, nargs, args, handlers, hfun)
+internal_condition_case_n (bfun, nargs, args, handlers, hfun)
      Lisp_Object (*bfun) ();
      int nargs;
      Lisp_Object *args;

=== modified file 'src/fileio.c'
--- a/src/fileio.c      2010-05-01 02:58:41 +0000
+++ b/src/fileio.c      2010-05-03 15:01:21 +0000
@@ -2194,11 +2194,17 @@
   return Qnil;
 }
 
-DEFUN ("delete-file", Fdelete_file, Sdelete_file, 1, 1, "fDelete file: ",
+DEFUN ("delete-file", Fdelete_file, Sdelete_file, 1, 2, "fDelete file: \nP",
        doc: /* Delete file named FILENAME.  If it is a symlink, remove the 
symlink.
-If file has multiple names, it continues to exist with the other names.  */)
-     (filename)
+If file has multiple names, it continues to exist with the other names.
+
+If optional arg FORCE is non-nil, really delete the file regardless of
+`delete-by-moving-to-trash'.  Otherwise, \"deleting\" actually moves
+it to the system's trash can if `delete-by-moving-to-trash' is non-nil.
+Interactively, FORCE is non-nil if called with a prefix arg.  */)
+     (filename, force)
      Lisp_Object filename;
+     Lisp_Object force;
 {
   Lisp_Object handler;
   Lisp_Object encoded_file;
@@ -2217,7 +2223,7 @@
   if (!NILP (handler))
     return call2 (handler, Qdelete_file, filename);
 
-  if (delete_by_moving_to_trash)
+  if (delete_by_moving_to_trash && NILP (force))
     return call1 (Qmove_file_to_trash, filename);
 
   encoded_file = ENCODE_FILE (filename);
@@ -2234,14 +2240,15 @@
   return Qt;
 }
 
-/* Delete file FILENAME, returning 1 if successful and 0 if failed.  */
+/* Delete file FILENAME, returning 1 if successful and 0 if failed.
+   FORCE means to ignore `delete-by-moving-to-trash'.  */
 
 int
-internal_delete_file (filename)
-     Lisp_Object filename;
+internal_delete_file (Lisp_Object filename, Lisp_Object force)
 {
   Lisp_Object tem;
-  tem = internal_condition_case_1 (Fdelete_file, filename,
+
+  tem = internal_condition_case_2 (Fdelete_file, filename, force,
                                   Qt, internal_delete_file_1);
   return NILP (tem);
 }
@@ -2335,7 +2342,7 @@
              )
            call2 (Qdelete_directory, file, Qt);
          else
-           Fdelete_file (file);
+           Fdelete_file (file, Qt);
          unbind_to (count, Qnil);
        }
       else

=== modified file 'src/lisp.h'
--- a/src/lisp.h        2010-04-29 12:42:01 +0000
+++ b/src/lisp.h        2010-05-03 15:01:21 +0000
@@ -2901,7 +2901,8 @@
 extern Lisp_Object internal_lisp_condition_case P_ ((Lisp_Object, Lisp_Object, 
Lisp_Object));
 extern Lisp_Object internal_condition_case P_ ((Lisp_Object (*) (void), 
Lisp_Object, Lisp_Object (*) (Lisp_Object)));
 extern Lisp_Object internal_condition_case_1 P_ ((Lisp_Object (*) 
(Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object)));
-extern Lisp_Object internal_condition_case_2 P_ ((Lisp_Object (*) (int, 
Lisp_Object *), int, Lisp_Object *, Lisp_Object, Lisp_Object (*) 
(Lisp_Object)));
+extern Lisp_Object internal_condition_case_2 P_ ((Lisp_Object (*) 
(Lisp_Object, Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object 
(*) (Lisp_Object)));
+extern Lisp_Object internal_condition_case_n P_ ((Lisp_Object (*) (int, 
Lisp_Object *), int, Lisp_Object *, Lisp_Object, Lisp_Object (*) 
(Lisp_Object)));
 extern void specbind P_ ((Lisp_Object, Lisp_Object));
 extern void record_unwind_protect P_ ((Lisp_Object (*) (Lisp_Object), 
Lisp_Object));
 extern Lisp_Object unbind_to P_ ((int, Lisp_Object));
@@ -3059,7 +3060,7 @@
 EXFUN (Fread_file_name, 6);
 extern Lisp_Object close_file_unwind P_ ((Lisp_Object));
 extern void report_file_error P_ ((const char *, Lisp_Object)) NO_RETURN;
-extern int internal_delete_file P_ ((Lisp_Object));
+extern int internal_delete_file P_ ((Lisp_Object, Lisp_Object));
 extern void syms_of_fileio P_ ((void));
 extern Lisp_Object make_temp_name P_ ((Lisp_Object, int));
 EXFUN (Fmake_symbolic_link, 3);

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2010-05-01 18:11:20 +0000
+++ b/src/xdisp.c       2010-05-03 15:01:21 +0000
@@ -2451,7 +2451,7 @@
       specbind (Qinhibit_redisplay, Qt);
       /* Use Qt to ensure debugger does not run,
         so there is no possibility of wanting to redisplay.  */
-      val = internal_condition_case_2 (Ffuncall, nargs, args, Qt,
+      val = internal_condition_case_n (Ffuncall, nargs, args, Qt,
                                       safe_eval_handler);
       UNGCPRO;
       val = unbind_to (count, val);


reply via email to

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