This extension implements a centralized file-based locking scheme for Mercurial.
While Mercurial is all about being decentralized, it is sometimes very useful to work in a centralized fashion: if the files you work on cannot be merged (binary files such as Word documents, Photoshop images, etc) then it is better to communicate upfront about any edits to avoid concurrent work.
Please see the documentation in the wiki for more information.
Lantiq provides the lock extension to the community AS IS, WITHOUT MAINTENANCE, according to the terms of the GPL version 2 or any later version (“GPLv2+”). While we appreciate feedback from the community, we will not provide user support, nor will we commit to providing fixes or even integrating fixes provided by others in the community.
Lock files on copy and rename. With our model, the server wont accept a push that involves unlocked files for which locking is mandatory, except for newly added files. Such files appear after a rename if the new file is not locked. However, the user cannot lock the file since it is not on the server yet.
The extension will now internally acquire a lock for the destination name of a rename or copy. For rename, the lock for the original file is left in place so that the user own locks for both the old and the new name.
Fixed Issue 3: File write permissions not updated on initial clone when an .hgignore file exists
Tested the extension with Mercurial versions 1.8.4 to 2.0 and rewrote code and tests to maintain compatibility.
Experimental support for marking unlocked files as read-only. This is similar to how SVN works when a file has the svn:needs-lock property set.
This is not yet advertised in the extension help and is turned off by default. To enable, add the following to a configuration file:
[hglock] updatewriteperm = True
When a repository is cloned, files marked as needing locking (matched by .hglocks) will be checked out read-only. When a file is locked, it will be made writable. When a file is unlocked (with via hg unlock FILE or hg push), it will be read-only again.
Thanks to Scott Sturdivant for contributing this feature.
The update and commit commands use locks implicitly and will now silently ignore a missing or uninitialized lock repository. Before, hg update would abort if the lock repository was not initialized, it now outputs a warnings that is only shown when --verbose is used.
Refactored code for better maintainability. The remote procedure call protocol now lives in its own module.
Client-side checking of pushed changesets. Before pushing, clients now inspects each outgoing changeset to see if it contains modifications to an unlocked file for which locking is mandatory. The push is aborted if such a changeset is found.
Make hg unlock validate the client’s changeset the same way hg lock does. This ensures that a client does not unlock a file before the changesets that modify it have been pushed.
The primary way to unlock files is now to simply push the changesets that affect the files – the unlock command can only be used if a file has not been modified since it was locked.
Disabled --force flag for hg push. Creating multiple heads on push is then no longer possible. Pushing a new branch is still possible with the --new-branch flag.
Fix compatibility with Mercurial 1.9.x. Now tested with Mercurial version 1.8.4, 1.9, and 1.9.1.
Re-release of version 0.1.
The change from a changegroup hook to a pretxnchangegroup hook in 575c95b4ab8f had bad consequences. So 575c95b4ab8f and the followup fixes (d87f0dc0919e, 4ba9b24da91b, 7ec8374652ad) were too unstable to release.
This release builds on 4b61dc057391 and includes only the fix for lock identifying the wrong file in a merge (7e3a4247e682 and 019d137a6ece) along with the packaging changes.
Lantiq Mercurial Team <MUC-LQ-ADM-HG-U@lantiq.com>