[PATCH] move lock_read() into "bzr log"

Robert Widhopf-Fenk hack at robf.de
Fri Jun 9 23:09:45 BST 2006


Also with the earlier changes in the revspec date: the
current code still reads the knit (index) twice.

The attached patch removes the two lock_read() calls and adds
a single lock_read() earlier in the call stack.

-------------- next part --------------
=== modified file 'bzrlib/builtins.py'
--- bzrlib/builtins.py	2006-06-09 21:48:56 +0000
+++ bzrlib/builtins.py	2006-06-09 21:55:35 +0000
@@ -1280,48 +1280,52 @@
             dir, relpath = bzrdir.BzrDir.open_containing('.')
             b = dir.open_branch()
 
-        if revision is None:
-            rev1 = None
-            rev2 = None
-        elif len(revision) == 1:
-            rev1 = rev2 = revision[0].in_history(b).revno
-        elif len(revision) == 2:
-            if revision[0].spec is None:
-                # missing begin-range means first revision
-                rev1 = 1
-            else:
-                rev1 = revision[0].in_history(b).revno
-
-            if revision[1].spec is None:
-                # missing end-range means last known revision
-                rev2 = b.revno()
-            else:
-                rev2 = revision[1].in_history(b).revno
-        else:
-            raise BzrCommandError('bzr log --revision takes one or two values.')
-
-        # By this point, the revision numbers are converted to the +ve
-        # form if they were supplied in the -ve form, so we can do
-        # this comparison in relative safety
-        if rev1 > rev2:
-            (rev2, rev1) = (rev1, rev2)
-
-        if (log_format == None):
-            default = bzrlib.config.BranchConfig(b).log_format()
-            log_format = get_log_format(long=long, short=short, line=line, default=default)
-        lf = log_formatter(log_format,
-                           show_ids=show_ids,
-                           to_file=self.outf,
-                           show_timezone=timezone)
-
-        show_log(b,
-                 lf,
-                 file_id,
-                 verbose=verbose,
-                 direction=direction,
-                 start_revision=rev1,
-                 end_revision=rev2,
-                 search=message)
+        b.lock_read()
+        try:
+            if revision is None:
+                rev1 = None
+                rev2 = None
+            elif len(revision) == 1:
+                rev1 = rev2 = revision[0].in_history(b).revno
+            elif len(revision) == 2:
+                if revision[0].spec is None:
+                    # missing begin-range means first revision
+                    rev1 = 1
+                else:
+                    rev1 = revision[0].in_history(b).revno
+
+                if revision[1].spec is None:
+                    # missing end-range means last known revision
+                    rev2 = b.revno()
+                else:
+                    rev2 = revision[1].in_history(b).revno
+            else:
+                raise BzrCommandError('bzr log --revision takes one or two values.')
+
+            # By this point, the revision numbers are converted to the +ve
+            # form if they were supplied in the -ve form, so we can do
+            # this comparison in relative safety
+            if rev1 > rev2:
+                (rev2, rev1) = (rev1, rev2)
+
+            if (log_format == None):
+                default = bzrlib.config.BranchConfig(b).log_format()
+                log_format = get_log_format(long=long, short=short, line=line, default=default)
+            lf = log_formatter(log_format,
+                               show_ids=show_ids,
+                               to_file=self.outf,
+                               show_timezone=timezone)
+
+            show_log(b,
+                     lf,
+                     file_id,
+                     verbose=verbose,
+                     direction=direction,
+                     start_revision=rev1,
+                     end_revision=rev2,
+                     search=message)
+        finally:
+            b.unlock()
 
 
 def get_log_format(long=False, short=False, line=False, default='long'):

=== modified file 'bzrlib/log.py'
--- bzrlib/log.py	2006-06-07 19:13:41 +0000
+++ bzrlib/log.py	2006-06-09 21:50:12 +0000
@@ -155,12 +155,8 @@
     end_revision
         If not None, only show revisions <= end_revision
     """
-    branch.lock_read()
-    try:
-        _show_log(branch, lf, specific_fileid, verbose, direction,
-                  start_revision, end_revision, search)
-    finally:
-        branch.unlock()
+    _show_log(branch, lf, specific_fileid, verbose, direction,
+              start_revision, end_revision, search)
     
 def _show_log(branch,
              lf,

=== modified file 'bzrlib/revisionspec.py'
--- bzrlib/revisionspec.py	2006-05-24 00:06:33 +0000
+++ bzrlib/revisionspec.py	2006-06-09 21:50:12 +0000
@@ -308,11 +308,7 @@
 
             dt = datetime.datetime(year=year, month=month, day=day,
                     hour=hour, minute=minute, second=second)
-        branch.lock_read()
-        try:
-            rev = bisect.bisect(RevisionSpec_revs(revs, branch), dt)
-        finally:
-            branch.unlock()
+        rev = bisect.bisect(RevisionSpec_revs(revs, branch), dt)
         if rev == len(revs):
             return RevisionInfo(branch, None)
         else:



More information about the bazaar mailing list