Mercurial > emacs
changeset 8627:0f1ea6fb9dda
(vc-backend-checkout): Don't use -G for SCCS.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Fri, 26 Aug 1994 00:05:30 +0000 |
parents | fe49c4bb99d4 |
children | f550802447b3 |
files | lisp/vc.el |
diffstat | 1 files changed, 24 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/vc.el Thu Aug 25 23:23:09 1994 +0000 +++ b/lisp/vc.el Fri Aug 26 00:05:30 1994 +0000 @@ -1524,10 +1524,30 @@ (let ((filename (or workfile file))) (message "Checking out %s..." filename) (vc-backend-dispatch file - (vc-do-command 0 "get" file ;; SCCS - (if writable "-e") - (if workfile (concat "-G" workfile)) - (and rev (concat "-r" (vc-lookup-triple file rev)))) + (if workfile ;; SCCS + ;; Some SCCS implementations allow checking out directly to a + ;; file using the -G option, but then some don't so use the + ;; least common denominator approach and use the -p option + ;; ala RCS. + (let ((vc-modes (logior (file-modes (vc-name file)) + (if writable 128 0))) + (failed t)) + (unwind-protect + (progn + (vc-do-command + 0 "/bin/sh" file "-c" + (format "umask %o; exec >\"$1\" || exit; shift; umask %o; exec get \"$@\"" + (logand 511 (lognot vc-modes)) + (logand 511 (lognot (default-file-modes)))) + "" ; dummy argument for shell's $0 + filename + (if writable "-e") + "-p" (and rev (concat "-r" (vc-lookup-triple file rev)))) + (setq failed nil)) + (and failed (file-exists-p filename) (delete-file filename)))) + (vc-do-command 0 "get" file ;; SCCS + (if writable "-e") + (and rev (concat "-r" (vc-lookup-triple file rev))))) (if workfile ;; RCS ;; RCS doesn't let us check out into arbitrary file names directly. ;; Use `co -p' and make stdout point to the correct file.