mercurial/lock.py
author mpm@selenic.com
Tue, 07 Jun 2005 19:02:31 -0800
changeset 274 5da941efbb52
parent 161 0b4c5cb953d9
child 422 10c43444a38e
child 429 688d03d6997a
permissions -rw-r--r--
[PATCH] hgk should parse dates in the diff output -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 [PATCH] hgk should parse dates in the diff output hgk doesn't deal well with the difflib style diffs, it expects the filename to be the last thing on the line. This patch fixes the regexp to stop reading the filename at the first tab. Signed-off-by: Chris Mason <mason@suse.com> manifest hash: 9c5bcf427455dcf306ab6f91b1986723caa83f36 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCpl/HywK+sNU5EO8RAgAjAKCOuZsRtJDbdurTQry+7krtLTtRQQCfXLuN LZEFkcOGS0jiAC6vci/RLJ0= =jkr1 -----END PGP SIGNATURE-----

# lock.py - simple locking scheme for mercurial
#
# Copyright 2005 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.

import os, time

class LockHeld(Exception):
    pass

class lock:
    def __init__(self, file, wait = 1):
        self.f = file
        self.held = 0
        self.wait = wait
        self.lock()

    def __del__(self):
        self.release()

    def lock(self):
        while 1:
            try:
                self.trylock()
                return 1
            except LockHeld, inst:
                if self.wait:
                    time.sleep(1)
                    continue
                raise inst
        
    def trylock(self):
        pid = os.getpid()
        try:
            os.symlink(str(pid), self.f)
            self.held = 1
        except:
            raise LockHeld(os.readlink(self.f))

    def release(self):
        if self.held:
            self.held = 0
            os.unlink(self.f)