From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: "Stefan Monnier" Newsgroups: gmane.emacs.devel Subject: Re: VC, read-only buffers for writable files Date: Tue, 22 Oct 2002 10:49:23 -0400 Sender: emacs-devel-admin@gnu.org Message-ID: <200210221449.g9MEnNc22634@rum.cs.yale.edu> References: <200210221331.g9MDV3n21931@rum.cs.yale.edu> <1035297355.2276.58.camel@eagle> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: main.gmane.org 1035298245 8392 80.91.224.249 (22 Oct 2002 14:50:45 GMT) X-Complaints-To: usenet@main.gmane.org NNTP-Posting-Date: Tue, 22 Oct 2002 14:50:45 +0000 (UTC) Cc: emacs-devel@gnu.org, Stefan Monnier Return-path: Original-Received: from quimby.gnus.org ([80.91.224.244]) by main.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1840Ml-0002Aw-00 for ; Tue, 22 Oct 2002 16:50:43 +0200 Original-Received: from monty-python.gnu.org ([199.232.76.173]) by quimby.gnus.org with esmtp (Exim 3.12 #1 (Debian)) id 1840O1-0002hO-00 for ; Tue, 22 Oct 2002 16:52:01 +0200 Original-Received: from localhost ([127.0.0.1] helo=monty-python.gnu.org) by monty-python.gnu.org with esmtp (Exim 4.10) id 1840MY-0000Ji-00; Tue, 22 Oct 2002 10:50:30 -0400 Original-Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.10) id 1840LX-0006lL-00 for emacs-devel@gnu.org; Tue, 22 Oct 2002 10:49:27 -0400 Original-Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.10) id 1840LU-0006i3-00 for emacs-devel@gnu.org; Tue, 22 Oct 2002 10:49:26 -0400 Original-Received: from rum.cs.yale.edu ([128.36.229.169]) by monty-python.gnu.org with esmtp (Exim 4.10) id 1840LT-0006fb-00; Tue, 22 Oct 2002 10:49:24 -0400 Original-Received: (from monnier@localhost) by rum.cs.yale.edu (8.11.6/8.11.6) id g9MEnNc22634; Tue, 22 Oct 2002 10:49:23 -0400 X-Mailer: exmh version 2.4 06/23/2000 with nmh-1.0.4 Original-To: Andre Spiegel Errors-To: emacs-devel-admin@gnu.org X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.0.11 Precedence: bulk List-Help: List-Post: List-Subscribe: , List-Id: Emacs development discussions. List-Unsubscribe: , List-Archive: Xref: main.gmane.org gmane.emacs.devel:8654 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:8654 > > Currently VC sometimes makes a file read-only because it thinks it's > > better that way for the user. More specifically, it makes it read-only > > if the file seems to be locked by another user. > > I have talked this over with Stefan several times, and we have reached > no agreement. We did agree to postpone the decision to after 21.1, tho ;-) > > This special behavior used to apply to SCCS, RCS and CVS under Emacs-20 > > and was silently changed in Emacs-21 to only apply to RCS and SCCS (it was > > changed as a side effect of another change). Nobody complained about > > this change and I think we should go further and remove this hack > > altogether so it doesn't aply to RCS and SCCS either. > > The behavior wasn't changed accidentally for CVS. There are no locks Maybe it wasn't accidentally, but it was changed. In Emacs-20 you could end up in CVS with a read-only buffer because the owner of the locally modified file was different from the current user (or seemed that way to VC). That's because VC considered a locally modified CVS file as "locked by the owner of the file". > under CVS, and Emacs-21 handles that correctly by not assuming that a > file could be "locked" by anybody. RCS and SCCS do have locks, and > Emacs-21 deliberately chooses to enforce the locking. This is not a > "hack". Sorry for using "hack". I tried to be somewhat "neutral" in my post, but my bias took precedence. The reason why I think it's a hack is because such things *should* be enforced with file permissions and are enforced that way on all the systems I've used. > Here is the relevant portion of code from vc-hooks.el, since the > comments may make it clearer to everybody. > > ;; If the file is locked by some other user, make > ;; the buffer read-only. Like this, even root > ;; cannot modify a file that someone else has locked. > (and (equal file (buffer-file-name)) > (stringp (vc-state file)) > (setq buffer-read-only t)) > ;; If the user is root, and the file is not owner-writable, > ;; then pretend that we can't write it > ;; even though we can (because root can write anything). > ;; This way, even root cannot modify a file that isn't locked. > (and (equal file (buffer-file-name)) > (not buffer-read-only) > (zerop (user-real-uid)) > (zerop (logand (file-modes (buffer-file-name)) 128)) > (setq buffer-read-only t))) Note that I'd gladly remove the second half as well, but I'm mostly interested in the first half (the behavior of Emacs when run as root is not of much concern to me). Stefan