/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/lockdir.py

  • Committer: John Arbash Meinel
  • Date: 2010-01-12 22:51:31 UTC
  • mto: This revision was merged to the branch mainline in revision 4955.
  • Revision ID: john@arbash-meinel.com-20100112225131-he8h411p6aeeb947
Delay grabbing an output stream until we actually go to show a diff.

This makes the test suite happy, but it also seems to be reasonable.
If we aren't going to write anything, we don't need to hold an
output stream open.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006, 2007, 2008, 2009 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
252
252
        if info is None:
253
253
            raise LockFailed(self, "lock was renamed into place, but "
254
254
                "now is missing!")
255
 
        if info.get('nonce') != self.nonce:
 
255
        if info['nonce'] != self.nonce:
256
256
            self._trace("rename succeeded, "
257
257
                "but lock is still held by someone else")
258
258
            raise LockContention(self)
430
430
    def peek(self):
431
431
        """Check if the lock is held by anyone.
432
432
 
433
 
        If it is held, this returns the lock info structure as a dict
 
433
        If it is held, this returns the lock info structure as a rio Stanza,
434
434
        which contains some information about the current lock holder.
435
435
        Otherwise returns None.
436
436
        """
459
459
        return s.to_string()
460
460
 
461
461
    def _parse_info(self, info_bytes):
462
 
        stanza = rio.read_stanza(osutils.split_lines(info_bytes))
463
 
        if stanza is None:
464
 
            # see bug 185013; we fairly often end up with the info file being
465
 
            # empty after an interruption; we could log a message here but
466
 
            # there may not be much we can say
467
 
            return {}
468
 
        else:
469
 
            return stanza.as_dict()
 
462
        # TODO: Handle if info_bytes is empty
 
463
        return rio.read_stanza(osutils.split_lines(info_bytes)).as_dict()
470
464
 
471
465
    def attempt_lock(self):
472
466
        """Take the lock; fail if it's already held.
540
534
                    deadline_str = time.strftime('%H:%M:%S',
541
535
                                                 time.localtime(deadline))
542
536
                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
537
                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
 
                    )
 
538
                                      '%s\n' # held by
 
539
                                      '%s\n' # locked ... ago
 
540
                                      'Will continue to try until %s, unless '
 
541
                                      'you press Ctrl-C\n'
 
542
                                      'If you\'re sure that it\'s not being '
 
543
                                      'modified, use bzr break-lock %s',
 
544
                                      start,
 
545
                                      formatted_info[0],
 
546
                                      formatted_info[1],
 
547
                                      formatted_info[2],
 
548
                                      deadline_str,
 
549
                                      lock_url)
559
550
 
560
551
            if (max_attempts is not None) and (attempt_count >= max_attempts):
561
552
                self._trace("exceeded %d attempts")
617
608
    def _format_lock_info(self, info):
618
609
        """Turn the contents of peek() into something for the user"""
619
610
        lock_url = self.transport.abspath(self.path)
620
 
        start_time = info.get('start_time')
621
 
        if start_time is None:
622
 
            time_ago = '(unknown)'
623
 
        else:
624
 
            time_ago = format_delta(time.time() - int(info['start_time']))
 
611
        delta = time.time() - int(info['start_time'])
625
612
        return [
626
613
            '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,),
 
614
            'held by %(user)s on host %(hostname)s [process #%(pid)s]' % info,
 
615
            'locked %s' % (format_delta(delta),),
630
616
            ]
631
617
 
632
618
    def validate_token(self, token):