Rev 2949: (robertc) Add a progress bar has been added for knitpack -> knitpack fetching. (Robert Collins, #157789) in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Mon Oct 29 22:17:06 GMT 2007


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 2949
revision-id: pqm at pqm.ubuntu.com-20071029221703-zy7q7a0ehfvpybtn
parent: pqm at pqm.ubuntu.com-20071029050400-j2jmz8smj2yecfrr
parent: robertc at robertcollins.net-20071029210022-xd9vv00ud44w8cx8
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Mon 2007-10-29 22:17:03 +0000
message:
  (robertc) Add a progress bar has been added for knitpack -> knitpack fetching. (Robert Collins, #157789)
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/progress.py             progress.py-20050610070202-df9faaab791964c0
  bzrlib/repofmt/pack_repo.py    pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
    ------------------------------------------------------------
    revno: 2947.1.7
    merged: robertc at robertcollins.net-20071029210022-xd9vv00ud44w8cx8
    parent: robertc at robertcollins.net-20071029133535-yjj4ykvsr6ueqrvt
    committer: Robert Collins <robertc at robertcollins.net>
    branch nick: pack-progress
    timestamp: Tue 2007-10-30 08:00:22 +1100
    message:
      Review feedback - progress bars do not get periods in the status message.
    ------------------------------------------------------------
    revno: 2947.1.6
    merged: robertc at robertcollins.net-20071029133535-yjj4ykvsr6ueqrvt
    parent: robertc at robertcollins.net-20071029133250-giuy5zsjtycly6wz
    parent: pqm at pqm.ubuntu.com-20071029050400-j2jmz8smj2yecfrr
    committer: Robert Collins <robertc at robertcollins.net>
    branch nick: pack-progress
    timestamp: Tue 2007-10-30 00:35:35 +1100
    message:
      Merge bzr.dev.
    ------------------------------------------------------------
    revno: 2947.1.5
    merged: robertc at robertcollins.net-20071029133250-giuy5zsjtycly6wz
    parent: robertc at robertcollins.net-20071029040513-b1f6b3xkhslgkt2s
    committer: Robert Collins <robertc at robertcollins.net>
    branch nick: pack-progress
    timestamp: Tue 2007-10-30 00:32:50 +1100
    message:
      Signatures need a progress bar too.
    ------------------------------------------------------------
    revno: 2947.1.4
    merged: robertc at robertcollins.net-20071029040513-b1f6b3xkhslgkt2s
    parent: robertc at robertcollins.net-20071029040019-3x9as04a7s29motr
    committer: Robert Collins <robertc at robertcollins.net>
    branch nick: pack-progress
    timestamp: Mon 2007-10-29 15:05:13 +1100
    message:
      * A progress bar has been added for knitpack -> knitpack fetching.
        (Robert Collins, #157789)
=== modified file 'NEWS'
--- a/NEWS	2007-10-26 08:56:09 +0000
+++ b/NEWS	2007-10-29 04:05:13 +0000
@@ -114,6 +114,9 @@
 
   BUG FIXES:
 
+   * A progress bar has been added for knitpack -> knitpack fetching.
+     (Robert Collins, #157789)
+
    * Connection error reporting for the smart server has been fixed to
      display a user friendly message instead of a traceback.
      (Ian Clatworthy, #115601)

=== modified file 'bzrlib/progress.py'
--- a/bzrlib/progress.py	2007-10-05 02:18:53 +0000
+++ b/bzrlib/progress.py	2007-10-29 04:05:13 +0000
@@ -461,7 +461,8 @@
 
     def update(self, msg, current_cnt=None, total_cnt=None):
         self.current = current_cnt
-        self.total = total_cnt
+        if total_cnt is not None:
+            self.total = total_cnt
         self.message = msg
         self.child_fraction = 0
         self.tick()
@@ -548,7 +549,7 @@
             self.cur_phase = 0
         else:
             self.cur_phase += 1
-        assert self.cur_phase < self.total 
+        assert self.cur_phase < self.total
         self.pb.update(self.message, self.cur_phase, self.total)
 
 

=== modified file 'bzrlib/repofmt/pack_repo.py'
--- a/bzrlib/repofmt/pack_repo.py	2007-10-29 04:00:19 +0000
+++ b/bzrlib/repofmt/pack_repo.py	2007-10-29 21:00:22 +0000
@@ -623,6 +623,15 @@
                 return None
             else:
                 revision_ids = frozenset(revision_ids)
+        pb = ui.ui_factory.nested_progress_bar()
+        try:
+            return self._create_pack_from_packs(packs, suffix, revision_ids,
+                pb)
+        finally:
+            pb.finished()
+
+    def _create_pack_from_packs(self, packs, suffix, revision_ids, pb):
+        pb.update("Opening pack", 0, 5)
         new_pack = NewPack(self._upload_transport, self._index_transport,
             self._pack_transport, upload_suffix=suffix)
         # buffer data - we won't be reading-back during the pack creation and
@@ -650,6 +659,7 @@
             packs, 'revision_index')[0]
         revision_nodes = self._index_contents(revision_index_map, revision_keys)
         # copy revision keys and adjust values
+        pb.update("Copying revision texts", 1)
         list(self._copy_nodes_graph(revision_nodes, revision_index_map,
             new_pack._writer, new_pack.revision_index))
         if 'pack' in debug.debug_flags:
@@ -668,6 +678,7 @@
         # copy inventory keys and adjust values
         # XXX: Should be a helper function to allow different inv representation
         # at this point.
+        pb.update("Copying inventory texts", 2)
         inv_lines = self._copy_nodes_graph(inv_nodes, inventory_index_map,
             new_pack._writer, new_pack.inventory_index, output_lines=True)
         if revision_ids:
@@ -707,6 +718,7 @@
                 raise errors.RevisionNotPresent(a_missing_key[1],
                     a_missing_key[0])
         # copy text keys and adjust values
+        pb.update("Copying content texts", 3)
         list(self._copy_nodes_graph(text_nodes, text_index_map,
             new_pack._writer, new_pack.text_index))
         if 'pack' in debug.debug_flags:
@@ -721,6 +733,7 @@
         signature_nodes = self._index_contents(signature_index_map,
             signature_filter)
         # copy signature keys and adjust values
+        pb.update("Copying signature texts", 4)
         self._copy_nodes(signature_nodes, signature_index_map, new_pack._writer,
             new_pack.signature_index)
         if 'pack' in debug.debug_flags:
@@ -731,6 +744,7 @@
         if not new_pack.data_inserted():
             new_pack.abort()
             return None
+        pb.update("Finishing pack", 5)
         new_pack.finish()
         self.allocate(new_pack)
         return new_pack
@@ -828,6 +842,17 @@
         return pack_operations
 
     def _copy_nodes(self, nodes, index_map, writer, write_index):
+        """Copy knit nodes between packs with no graph references."""
+        pb = ui.ui_factory.nested_progress_bar()
+        try:
+            return self._do_copy_nodes(nodes, index_map, writer,
+                write_index, pb)
+        finally:
+            pb.finished()
+
+    def _do_copy_nodes(self, nodes, index_map, writer, write_index, pb):
+        # for record verification
+        knit_data = _KnitData(None)
         # plan a readv on each source pack:
         # group by pack
         nodes = sorted(nodes)
@@ -840,6 +865,8 @@
             if index not in request_groups:
                 request_groups[index] = []
             request_groups[index].append((key, value))
+        record_index = 0
+        pb.update("Copied record", record_index, len(nodes))
         for index, items in request_groups.iteritems():
             pack_readv_requests = []
             for key, value in items:
@@ -856,8 +883,13 @@
             for (names, read_func), (_1, _2, (key, eol_flag)) in \
                 izip(reader.iter_records(), pack_readv_requests):
                 raw_data = read_func(None)
+                # check the header only
+                df, _ = knit_data._parse_record_header(key[-1], raw_data)
+                df.close()
                 pos, size = writer.add_bytes_record(raw_data, names)
                 write_index.add_node(key, eol_flag + "%d %d" % (pos, size))
+                pb.update("Copied record", record_index)
+                record_index += 1
 
     def _copy_nodes_graph(self, nodes, index_map, writer, write_index,
         output_lines=False):
@@ -866,6 +898,15 @@
         :param output_lines: Return lines present in the copied data as
             an iterator.
         """
+        pb = ui.ui_factory.nested_progress_bar()
+        try:
+            return self._do_copy_nodes_graph(nodes, index_map, writer,
+                write_index, output_lines, pb)
+        finally:
+            pb.finished()
+
+    def _do_copy_nodes_graph(self, nodes, index_map, writer, write_index,
+        output_lines, pb):
         # for record verification
         knit_data = _KnitData(None)
         # for line extraction when requested (inventories only)
@@ -879,6 +920,8 @@
         # at this point - perhaps a helper library for the following code 
         # duplication points?
         request_groups = {}
+        record_index = 0
+        pb.update("Copied record", record_index, len(nodes))
         for index, key, value, references in nodes:
             if index not in request_groups:
                 request_groups[index] = []
@@ -914,6 +957,8 @@
                     df.close()
                 pos, size = writer.add_bytes_record(raw_data, names)
                 write_index.add_node(key, eol_flag + "%d %d" % (pos, size), references)
+                pb.update("Copied record", record_index)
+                record_index += 1
 
     def ensure_loaded(self):
         # NB: if you see an assertion error here, its probably access against




More information about the bazaar-commits mailing list