svn-needs-lock-impl.txt   [plain text]


[[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.