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.