~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to tools/history2weaves.py

  • Committer: Martin Pool
  • Date: 2005-09-22 01:03:43 UTC
  • Revision ID: mbp@sourcefrog.net-20050922010343-69138f05800a9500
- set reasonable name_versions

- to support pychecker: 

  - add __main__ check before running 
  - turn off psyco for p

Show diffs side-by-side

added added

removed removed

Lines of Context:
68
68
# versions.
69
69
 
70
70
 
71
 
if True:
 
71
if False:
72
72
    try:
73
73
        import psyco
74
74
        psyco.full()
80
80
import hotshot, hotshot.stats
81
81
import sys
82
82
import logging
83
 
import time
84
83
 
85
84
from bzrlib.branch import Branch, find_branch
86
85
from bzrlib.revfile import Revfile
115
114
        self.ancestries = {}
116
115
        # holds in-memory weaves for all files
117
116
        self.text_weaves = {}
118
 
 
119
117
        self.branch = Branch('.', relax_version_check=True)
120
 
 
121
 
        revno = 1
122
118
        rev_history = self.branch.revision_history()
123
 
        last_idx = None
124
 
        inv_parents = []
125
 
 
126
119
        # to_read is a stack holding the revisions we still need to process;
127
120
        # appending to it adds new highest-priority revisions
128
 
        importorder = []
129
121
        self.known_revisions = set(rev_history)
130
122
        self.to_read = [rev_history[-1]]
131
123
        while self.to_read:
249
241
               rev_id)
250
242
        for file_id in inv:
251
243
            ie = inv[file_id]
 
244
            self._set_name_version(rev, ie)
252
245
            if ie.kind != 'file':
253
246
                continue
254
247
            self._convert_file_version(rev, ie)
255
 
            # TODO: Check and convert name versions
 
248
 
 
249
 
 
250
    def _set_name_version(self, rev, ie):
 
251
        """Set name version for a file.
 
252
 
 
253
        Done in a slightly lazy way: if the file is renamed or in a merge revision
 
254
        it gets a new version, otherwise the same as before.
 
255
        """
 
256
        file_id = ie.file_id
 
257
        if len(rev.parent_ids) != 1:
 
258
            ie.name_version = rev.revision_id
 
259
        else:
 
260
            old_inv = self.inventories[rev.parent_ids[0]]
 
261
            if not old_inv.has_id(file_id):
 
262
                ie.name_version = rev.revision_id
 
263
            else:
 
264
                old_ie = old_inv[file_id]
 
265
                if (old_ie.parent_id != ie.parent_id
 
266
                    or old_ie.name != ie.name):
 
267
                    ie.name_version = rev.revision_id
 
268
                else:
 
269
                    ie.name_version = old_ie.name_version
 
270
 
256
271
 
257
272
 
258
273
    def _convert_file_version(self, rev, ie):
288
303
                    text_changed = True
289
304
        if len(file_parents) != 1 or text_changed:
290
305
            w.add(rev_id, file_parents, file_lines, ie.text_sha1)
291
 
            ie.name_version = ie.text_version = rev_id
 
306
            ie.text_version = rev_id
292
307
            self.text_count += 1
293
308
            ##mutter('import text {%s} of {%s}',
294
309
            ##       ie.text_id, file_id)
295
310
        else:
296
311
            ##mutter('text of {%s} unchanged from parent', file_id)            
297
312
            ie.text_version = file_parents[0]
298
 
            ie.name_version = file_parents[0]
299
313
        del ie.text_id
300
314
                   
301
315
 
349
363
    stats.print_stats(100)
350
364
 
351
365
 
352
 
enable_default_logging()
 
366
if __name__ == '__main__':
 
367
    enable_default_logging()
353
368
 
354
 
if '-p' in sys.argv[1:]:
355
 
    profile_convert()
356
 
else:
357
 
    Convert()
358
 
    
 
369
    if '-p' in sys.argv[1:]:
 
370
        profile_convert()
 
371
    else:
 
372
        Convert()