~maria-captains/bzr-git/serg

« back to all changes in this revision

Viewing changes to mapping.py

  • Committer: Sergei Golubchik
  • Date: 2013-09-04 12:54:41 UTC
  • Revision ID: sergii@pisem.net-20130904125441-zqphnoym25uumidw
different approach for generating file-id's
that creates unique ids for all files and allows
to merge many repositories into one.

incompatible with the old file-id == file-path approach,
and with old branched (from git) repositories.

Show diffs side-by-side

added added

removed removed

Lines of Context:
403
403
        return self.revid_prefix
404
404
 
405
405
 
 
406
class BzrGitMappingRevidBased(BzrGitMappingv1):
 
407
    revid_prefix = 'git-revid'
 
408
    revid_suffix = ''
 
409
 
 
410
    def set_tree(self, tree):
 
411
        self.tree = tree
 
412
        self.set_revid(None)
 
413
 
 
414
    def set_revid(self, revid):
 
415
        if revid is None:
 
416
            self.revid_suffix = ''
 
417
        else:
 
418
            self.revid_suffix = '@' + self.revision_id_bzr_to_foreign(revid)[0]
 
419
 
 
420
    def generate_file_id(self, path):
 
421
        if path == "":
 
422
            return ROOT_ID
 
423
        file_id = self.tree.path2id(path)
 
424
        if file_id is not None:
 
425
            return file_id
 
426
        if type(path) is unicode:
 
427
            path = path.encode("utf-8")
 
428
        return escape_file_id(path) + self.revid_suffix
 
429
 
 
430
    def parse_file_id(self, file_id):
 
431
        if file_id == ROOT_ID:
 
432
            return ""
 
433
        return self.tree.id2path(file_id)
 
434
 
406
435
class BzrGitMappingExperimental(BzrGitMappingv1):
407
436
    revid_prefix = 'git-experimental'
408
437
    experimental = True
459
488
#mapping_registry.set_default('git-experimental')
460
489
mapping_registry.set_default('git-v1')
461
490
 
 
491
mapping_registry.register_lazy('git-revid', "bzrlib.plugins.git.mapping",
 
492
    "BzrGitMappingRevidBased")
 
493
mapping_registry.set_default('git-revid')
 
494
 
462
495
 
463
496
class ForeignGit(ForeignVcs):
464
497
    """The Git Stupid Content Tracker"""
619
652
            file_id = self.file_ids[path]
620
653
        except KeyError:
621
654
            file_id = self.mapping.generate_file_id(path)
 
655
            self.file_ids[path] = file_id
622
656
        assert type(file_id) is str
623
657
        return file_id
624
658