[[This is a light weight implementation specification for the "svn:needs-lock" feature on the locking branch. Its purpose is primarily to help me iterate through the development of the feature, and secondarily to allow any reviewers to get better idea of my game plan. -Fitz ]] svn:needs-lock behaviors: ========================= Checkout: - If svn:needs-lock is set on a file when the file is checked out, set the file to read-only. Update: - If svn:needs-lock is unset in wc, but update sets it: - If the file has local mods, print a warning and do nothing??? - Else, set file to read-only. - If svn:needs-lock is set in wc, but update unsets it: Set file to read-write. - If svn:needs-lock is set or unset in both places: Do nothing. - If svn:needs-lock is set and the lock is removed by update (i.e., the lock in the wc was defunct): - If the file has local mods, print a warning and do nothing??? - Else, set the file to read-only. Propset: - Setting the svn:needs-lock property does nothing WRT a file's permissions. The file will be set to read-only at commit time. See "Commit" below. (Propset does, however, canonicalizes the value to '*') Propdel: - Removing svn:needs-lock sets the file to read-write. Propedit: - If the property is changed via propedit, we need to canonicalize it to '*'. Lock: - If svn:needs-lock is set, the file is set to read-write. Unlock: - If svn:needs-lock is set, the file is set to read-only. Copy: - repos-to-wc or wc-to-wc copy: Ensure that the copy is read-write even if svn:needs-lock is set as this is another schedule add case. Commit: - If a file has the svn:needs-lock property set and is not locked: - Unconditionally set the file to read-only. - Else, do nothing. Caveats: - 'svn update' doesn't currently work on Windows if the working files are read-only, you will need to add some permission changing code.