view tests/test-lock-badness.t @ 23094:32dbd1294ea7 stable

tests: change obsolete timestamp to avoid "gmtime()" problem on Windows Before this patch, "test-obsolete.t" fails on Windows environment, because strings corresponded to "tm_wday" (day of the week) field are incorrect. On POSIX environment, "gmtime()" returns correct "tm_wday" value even for negative "time_t" value. On the other hand, it returns incorrect one on Windows environment. At least, "gmtime()" of the Windows runtime library bundled with Python 2.7.3 does. According to 9a7d0f7e0561 introducing original timestamp value '56 120', it shouldn't cause negative "time_t" value. test-obsolete: remove subminute timezone in test Obsmarker format "1" does not supports sub minute timezone. So we change the test to something slightly more sensible. It replaced "-d '56 12'" by "-d '56 120'".
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Tue, 28 Oct 2014 00:19:18 +0900
parents f484be02bd35
children 6fbe35588433
line wrap: on
line source

#require unix-permissions no-root no-windows

Prepare

  $ hg init a
  $ echo a > a/a
  $ hg -R a ci -A -m a
  adding a

  $ hg clone a b
  updating to branch default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved

Test that raising an exception in the release function doesn't cause the lock to choke

  $ cat > testlock.py << EOF
  > from mercurial import cmdutil, error, util
  > 
  > cmdtable = {}
  > command = cmdutil.command(cmdtable)
  > 
  > def acquiretestlock(repo, releaseexc):
  >     def unlock():
  >         if releaseexc:
  >             raise util.Abort('expected release exception')
  >     l = repo._lock(repo.vfs, 'testlock', False, unlock, None, 'test lock')
  >     return l
  > 
  > @command('testlockexc')
  > def testlockexc(ui, repo):
  >     testlock = acquiretestlock(repo, True)
  >     try:
  >         testlock.release()
  >     finally:
  >         try:
  >             testlock = acquiretestlock(repo, False)
  >         except error.LockHeld:
  >             raise util.Abort('lockfile on disk even after releasing!')
  >         testlock.release()
  > EOF
  $ cat >> $HGRCPATH << EOF
  > [extensions]
  > testlock=$TESTTMP/testlock.py
  > EOF

  $ hg -R b testlockexc
  abort: expected release exception
  [255]

One process waiting for another

  $ cat > hooks.py << EOF
  > import time
  > def sleepone(**x): time.sleep(1)
  > def sleephalf(**x): time.sleep(0.5)
  > EOF
  $ echo b > b/b
  $ hg -R b ci -A -m b --config hooks.precommit="python:`pwd`/hooks.py:sleepone" > stdout &
  $ hg -R b up -q --config hooks.pre-update="python:`pwd`/hooks.py:sleephalf"
  waiting for lock on working directory of b held by '*:*' (glob)
  got lock after ? seconds (glob)
  warning: ignoring unknown working parent d2ae7f538514!
  $ wait
  $ cat stdout
  adding b

Pushing to a local read-only repo that can't be locked

  $ chmod 100 a/.hg/store

  $ hg -R b push a
  pushing to a
  searching for changes
  abort: could not lock repository a: Permission denied
  [255]

  $ chmod 700 a/.hg/store