bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 
688
by Martin Pool
 - add deferred patch from abentley  | 
1  | 
***************
 | 
2  | 
*** 738,777 ****
 | 
|
3  | 
          revisions = []
 | 
|
4  | 
          pb = ProgressBar(show_spinner=True)
 | 
|
5  | 
          total = len(revision_ids)
 | 
|
6  | 
-         for i,f in enumerate(revision_ids):
 | 
|
7  | 
-             revisions.append(other.get_revision(f))
 | 
|
8  | 
-             pb.update('retrieving revisions', i+1, total)
 | 
|
9  | 
-         pb.clear()
 | 
|
10  | 
-         
 | 
|
11  | 
-         needed_texts = sets.Set()
 | 
|
12  | 
- 
 | 
|
13  | 
-         for index, rev in enumerate(revisions):
 | 
|
14  | 
-             pb.update('Scanning revisions for file contents', index, total)
 | 
|
15  | 
-             inv = other.get_inventory(str(rev.inventory_id))
 | 
|
16  | 
-             for key, entry in inv.iter_entries():
 | 
|
17  | 
-                 if entry.text_id is None:
 | 
|
18  | 
-                     continue
 | 
|
19  | 
-                 if entry.text_id not in self.text_store:
 | 
|
20  | 
-                     needed_texts.add(entry.text_id)
 | 
|
21  | 
-         pb.clear()
 | 
|
22  | 
-         count = self.text_store.copy_multi(other.text_store, needed_texts, pb,
 | 
|
23  | 
-                                            "Copying file contents")
 | 
|
24  | 
-         pb.clear()
 | 
|
25  | 
-         print "Added %d file contents." % count 
 | 
|
26  | 
-         inventory_ids = [ f.inventory_id for f in revisions ]
 | 
|
27  | 
-         count = self.inventory_store.copy_multi(other.inventory_store, 
 | 
|
28  | 
-                                                 inventory_ids, pb,
 | 
|
29  | 
-                                                 "Copying inventories")
 | 
|
30  | 
-         pb.clear()
 | 
|
31  | 
-         print "Added %d inventories." % count 
 | 
|
32  | 
-         revision_ids = [ f.revision_id for f in revisions]
 | 
|
33  | 
-         count = self.revision_store.copy_multi(other.revision_store, 
 | 
|
34  | 
-                                                revision_ids, pb, 
 | 
|
35  | 
-                                                "Copying revisions")
 | 
|
36  | 
-         pb.clear()
 | 
|
37  | 
-         for revision_id in revision_ids:
 | 
|
38  | 
-             self.append_revision(revision_id)
 | 
|
39  | 
-         print "Added %d revisions." % count
 | 
|
40  | 
                      
 | 
|
41  | 
          
 | 
|
42  | 
      def commit(self, *args, **kw):
 | 
|
43  | 
--- 738,799 ----
 | 
|
44  | 
          revisions = []
 | 
|
45  | 
          pb = ProgressBar(show_spinner=True)
 | 
|
46  | 
          total = len(revision_ids)
 | 
|
47  | 
+         tmp_dir = tempfile.mkdtemp(prefix = "temp-stores-")
 | 
|
48  | 
+         try:
 | 
|
49  | 
+             tmp_rev_dir = os.path.join(tmp_dir, "revisions")
 | 
|
50  | 
+             os.mkdir(tmp_rev_dir)
 | 
|
51  | 
+             tmp_revs = ImmutableStore(tmp_rev_dir)
 | 
|
52  | 
+             count = tmp_revs.copy_multi(other.revision_store, revision_ids, pb, 
 | 
|
53  | 
+                                         "Caching revisions")
 | 
|
54  | 
+             #EVIL! Substituting a local partial store for a complete one
 | 
|
55  | 
+             #This is a significant performance boost when complete one is
 | 
|
56  | 
+             #a remote store. 
 | 
|
57  | 
+             other.revision_store = tmp_revs
 | 
|
58  | 
+             pb.clear()
 | 
|
59  | 
+ 
 | 
|
60  | 
+             for i,f in enumerate(revision_ids):
 | 
|
61  | 
+                 revisions.append(other.get_revision(f))
 | 
|
62  | 
+                 pb.update("Parsing revisions", i, len(revision_ids))
 | 
|
63  | 
+             
 | 
|
64  | 
+             needed_texts = sets.Set()
 | 
|
65  | 
+ 
 | 
|
66  | 
+             #Again with the EVIL.
 | 
|
67  | 
+             tmp_rev_dir = os.path.join(tmp_dir, "inventories")
 | 
|
68  | 
+             os.mkdir(tmp_rev_dir)
 | 
|
69  | 
+             inv_ids = [r.inventory_id for r in revisions]
 | 
|
70  | 
+             tmp_revs = ImmutableStore(tmp_rev_dir)
 | 
|
71  | 
+             count = tmp_revs.copy_multi(other.inventory_store, inv_ids, pb, 
 | 
|
72  | 
+                                         "Caching inventories")
 | 
|
73  | 
+             other.inventory_store = tmp_revs
 | 
|
74  | 
+             pb.clear()
 | 
|
75  | 
+             for index, rev in enumerate(revisions):
 | 
|
76  | 
+                 pb.update('Scanning revisions for file contents', index, total)
 | 
|
77  | 
+                 inv = other.get_inventory(str(rev.inventory_id))
 | 
|
78  | 
+                 for key, entry in inv.iter_entries():
 | 
|
79  | 
+                     if entry.text_id is None:
 | 
|
80  | 
+                         continue
 | 
|
81  | 
+                     if entry.text_id not in self.text_store:
 | 
|
82  | 
+                         needed_texts.add(entry.text_id)
 | 
|
83  | 
+             pb.clear()
 | 
|
84  | 
+             count = self.text_store.copy_multi(other.text_store, needed_texts, pb,
 | 
|
85  | 
+                                                "Copying file contents")
 | 
|
86  | 
+             pb.clear()
 | 
|
87  | 
+             print "Added %d file contents." % count 
 | 
|
88  | 
+             inventory_ids = [ f.inventory_id for f in revisions ]
 | 
|
89  | 
+             count = self.inventory_store.copy_multi(other.inventory_store, 
 | 
|
90  | 
+                                                     inventory_ids, pb,
 | 
|
91  | 
+                                                     "Copying inventories")
 | 
|
92  | 
+             pb.clear()
 | 
|
93  | 
+             print "Added %d inventories." % count 
 | 
|
94  | 
+             revision_ids = [ f.revision_id for f in revisions]
 | 
|
95  | 
+             count = self.revision_store.copy_multi(other.revision_store, 
 | 
|
96  | 
+                                                    revision_ids)
 | 
|
97  | 
+             pb.clear()
 | 
|
98  | 
+             for revision_id in revision_ids:
 | 
|
99  | 
+                 self.append_revision(revision_id)
 | 
|
100  | 
+             print "Added %d revisions." % count
 | 
|
101  | 
+         finally:
 | 
|
102  | 
+             shutil.rmtree(tmp_dir)
 | 
|
103  | 
                      
 | 
|
104  | 
          
 | 
|
105  | 
      def commit(self, *args, **kw):
 |