mercurial/lock.py
author mpm@selenic.com
Sat, 02 Jul 2005 18:25:15 -0800
changeset 579 ffeb2c3a1966
parent 515 03f27b1381f9
child 704 5ca319a641e1
child 705 574869103985
permissions -rw-r--r--
Actually warn on pulling from an unrelated repository -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Actually warn on pulling from an unrelated repository add some comments to findincoming track the base nodes of the fetch set report if the base set only contains nullid add a test case manifest hash: 3fc038a6041b0967a20503f5ec8876efc038841a -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCx0yLywK+sNU5EO8RAlK6AJ9J/GKPpYSMzTqmguXPWOISJ+zY5gCghd+j ClLpn0dKZnB46dh0F8zhuuk= =emNb -----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
import util

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:
            util.makelock(str(pid), self.f)
            self.held = 1
        except:
            raise LockHeld(util.readlock(self.f))

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