/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/rename_map.py

  • Committer: Aaron Bentley
  • Date: 2009-03-12 14:58:11 UTC
  • mto: This revision was merged to the branch mainline in revision 4196.
  • Revision ID: aaron@aaronbentley.com-20090312145811-v68cm6it0f1ejdrf
Saner algorithm for picking optimal file.

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
 
9
9
    def iter_edge_hashes(self, lines):
10
10
        for n in range(len(lines)):
11
 
            yield hash(tuple(lines[n:n+2]))
 
11
            yield hash(tuple(lines[n:n+2])) % 4096
12
12
 
13
13
    def add_edge_hashes(self, lines, tag):
14
14
        for my_hash in self.iter_edge_hashes(lines):
35
35
        return hits
36
36
 
37
37
    def file_match(self, tree, paths):
38
 
        seen = set()
 
38
        seen_file_ids = set()
 
39
        seen_paths = set()
39
40
        path_map = {}
 
41
        ordered_hits = []
40
42
        for path in paths:
41
43
            my_file = tree.get_file(None, path=path)
42
44
            try:
43
45
                hits = self.hitcounts(my_file.readlines())
44
46
            finally:
45
47
                my_file.close()
46
 
            ordered_hits = sorted([(v,k) for k, v in hits.items()
47
 
                                   if k not in seen], reverse=True)
48
 
            if len(ordered_hits) > 0:
49
 
                file_id = ordered_hits[0][1]
50
 
                seen.add(file_id)
51
 
                path_map[path] = file_id
 
48
            ordered_hits.extend((v, path, k) for k, v in hits.items())
 
49
        ordered_hits.sort(reverse=True)
 
50
        for count, path, file_id in ordered_hits:
 
51
            if path in seen_paths or file_id in seen_file_ids:
 
52
                continue
 
53
            path_map[path] = file_id
 
54
            seen_paths.add(path)
 
55
            seen_file_ids.add(file_id)
52
56
        return path_map