~bzr/ubuntu/lucid/bzr/beta-ppa

« back to all changes in this revision

Viewing changes to bzrlib/lockdir.py

  • Committer: Martin Pool
  • Date: 2010-08-18 04:26:39 UTC
  • mfrom: (129.1.8 packaging-karmic)
  • Revision ID: mbp@sourcefrog.net-20100818042639-mjoxtngyjwiu05fo
* PPA rebuild for lucid.
* PPA rebuild for karmic.
* PPA rebuild onto jaunty.
* New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
151
151
# files/dirs created.
152
152
 
153
153
 
154
 
_DEFAULT_TIMEOUT_SECONDS = 300
 
154
_DEFAULT_TIMEOUT_SECONDS = 30
155
155
_DEFAULT_POLL_SECONDS = 1.0
156
156
 
157
157
 
243
243
        # have a similar bug allowing someone to think they got the lock
244
244
        # when it's already held.
245
245
        #
246
 
        # See <https://bugs.edge.launchpad.net/bzr/+bug/498378> for one case.
 
246
        # See <https://bugs.launchpad.net/bzr/+bug/498378> for one case.
247
247
        #
248
248
        # Strictly the check is unnecessary and a waste of time for most
249
249
        # people, but probably worth trapping if something is wrong.
447
447
        # XXX: is creating this here inefficient?
448
448
        config = bzrlib.config.GlobalConfig()
449
449
        try:
450
 
            user = config.user_email()
451
 
        except errors.NoEmailInUsername:
452
450
            user = config.username()
 
451
        except errors.NoWhoami:
 
452
            user = osutils.getuser_unicode()
453
453
        s = rio.Stanza(hostname=get_host_name(),
454
454
                   pid=str(os.getpid()),
455
455
                   start_time=str(int(time.time())),
539
539
                if deadline_str is None:
540
540
                    deadline_str = time.strftime('%H:%M:%S',
541
541
                                                 time.localtime(deadline))
 
542
                # As local lock urls are correct we display them.
 
543
                # We avoid displaying remote lock urls.
542
544
                lock_url = self.transport.abspath(self.path)
543
 
                # See <https://bugs.edge.launchpad.net/bzr/+bug/250451>
544
 
                # the URL here is sometimes not one that is useful to the
545
 
                # user, perhaps being wrapped in a lp-%d or chroot decorator,
546
 
                # especially if this error is issued from the server.
547
 
                self._report_function('%s %s\n'
548
 
                    '%s\n' # held by
549
 
                    '%s\n' # locked ... ago
550
 
                    'Will continue to try until %s, unless '
551
 
                    'you press Ctrl-C.\n'
552
 
                    'See "bzr help break-lock" for more.',
553
 
                    start,
554
 
                    formatted_info[0],
555
 
                    formatted_info[1],
556
 
                    formatted_info[2],
557
 
                    deadline_str,
558
 
                    )
559
 
 
 
545
                if lock_url.startswith('file://'):
 
546
                    lock_url = lock_url.split('.bzr/')[0]
 
547
                else:
 
548
                    lock_url = ''
 
549
                user, hostname, pid, time_ago = formatted_info
 
550
                msg = ('%s lock %s '        # lock_url
 
551
                    'held by '              # start
 
552
                    '%s\n'                  # user
 
553
                    'at %s '                # hostname
 
554
                    '[process #%s], '       # pid
 
555
                    'acquired %s.')         # time ago
 
556
                msg_args = [start, lock_url, user, hostname, pid, time_ago]
 
557
                if timeout > 0:
 
558
                    msg += ('\nWill continue to try until %s, unless '
 
559
                        'you press Ctrl-C.')
 
560
                    msg_args.append(deadline_str)
 
561
                msg += '\nSee "bzr help break-lock" for more.'
 
562
                self._report_function(msg, *msg_args)
560
563
            if (max_attempts is not None) and (attempt_count >= max_attempts):
561
564
                self._trace("exceeded %d attempts")
562
565
                raise LockContention(self)
564
567
                self._trace("waiting %ss", poll)
565
568
                time.sleep(poll)
566
569
            else:
 
570
                # As timeout is always 0 for remote locks
 
571
                # this block is applicable only for local
 
572
                # lock contention
567
573
                self._trace("timeout after waiting %ss", timeout)
568
 
                raise LockContention(self)
 
574
                raise LockContention('(local)', lock_url)
569
575
 
570
576
    def leave_in_place(self):
571
577
        self._locked_via_token = True
616
622
 
617
623
    def _format_lock_info(self, info):
618
624
        """Turn the contents of peek() into something for the user"""
619
 
        lock_url = self.transport.abspath(self.path)
620
625
        start_time = info.get('start_time')
621
626
        if start_time is None:
622
627
            time_ago = '(unknown)'
623
628
        else:
624
629
            time_ago = format_delta(time.time() - int(info['start_time']))
 
630
        user = info.get('user', '<unknown>')
 
631
        hostname = info.get('hostname', '<unknown>')
 
632
        pid = info.get('pid', '<unknown>')
625
633
        return [
626
 
            'lock %s' % (lock_url,),
627
 
            'held by %s on host %s [process #%s]' %
628
 
                tuple([info.get(x, '<unknown>') for x in ['user', 'hostname', 'pid']]),
629
 
            'locked %s' % (time_ago,),
 
634
            user,
 
635
            hostname,
 
636
            pid,
 
637
            time_ago,
630
638
            ]
631
639
 
632
640
    def validate_token(self, token):