Mercurial > hg
comparison hgext/convert/__init__.py @ 4719:1069205a8894
fix 'convert' with single commit repositories
The attached patch passes the three 'convert' testcases, and also is
able to successfully convert the git.git repository.
author | Hollis Blanchard <hollisb@us.ibm.com> |
---|---|
date | Mon, 25 Jun 2007 14:50:25 -0500 |
parents | 63b9d2deed48 |
children | 07efcce17d28 72ac66e88c43 |
comparison
equal
deleted
inserted
replaced
4718:934275cd4526 | 4719:1069205a8894 |
---|---|
58 if opts.get('authors'): | 58 if opts.get('authors'): |
59 self.readauthormap(opts.get('authors')) | 59 self.readauthormap(opts.get('authors')) |
60 self.authorfile = self.dest.authorfile() | 60 self.authorfile = self.dest.authorfile() |
61 | 61 |
62 def walktree(self, heads): | 62 def walktree(self, heads): |
63 '''Return a mapping that identifies the uncommitted parents of every | |
64 uncommitted changeset.''' | |
63 visit = heads | 65 visit = heads |
64 known = {} | 66 known = {} |
65 parents = {} | 67 parents = {} |
66 while visit: | 68 while visit: |
67 n = visit.pop(0) | 69 n = visit.pop(0) |
68 if n in known or n in self.map: continue | 70 if n in known or n in self.map: continue |
69 known[n] = 1 | 71 known[n] = 1 |
70 self.commitcache[n] = self.source.getcommit(n) | 72 self.commitcache[n] = self.source.getcommit(n) |
71 cp = self.commitcache[n].parents | 73 cp = self.commitcache[n].parents |
74 parents[n] = [] | |
72 for p in cp: | 75 for p in cp: |
73 parents.setdefault(n, []).append(p) | 76 parents[n].append(p) |
74 visit.append(p) | 77 visit.append(p) |
75 | 78 |
76 return parents | 79 return parents |
77 | 80 |
78 def toposort(self, parents): | 81 def toposort(self, parents): |
82 '''Return an ordering such that every uncommitted changeset is | |
83 preceeded by all its uncommitted ancestors.''' | |
79 visit = parents.keys() | 84 visit = parents.keys() |
80 seen = {} | 85 seen = {} |
81 children = {} | 86 children = {} |
82 | 87 |
83 while visit: | 88 while visit: |
84 n = visit.pop(0) | 89 n = visit.pop(0) |
85 if n in seen: continue | 90 if n in seen: continue |
86 seen[n] = 1 | 91 seen[n] = 1 |
87 pc = 0 | 92 # Ensure that nodes without parents are present in the 'children' |
88 if n in parents: | 93 # mapping. |
89 for p in parents[n]: | 94 children.setdefault(n, []) |
90 if p not in self.map: pc += 1 | 95 for p in parents[n]: |
96 if not p in self.map: | |
91 visit.append(p) | 97 visit.append(p) |
92 children.setdefault(p, []).append(n) | 98 children.setdefault(p, []).append(n) |
93 if not pc: root = n | |
94 | 99 |
95 s = [] | 100 s = [] |
96 removed = {} | 101 removed = {} |
97 visit = children.keys() | 102 visit = children.keys() |
98 while visit: | 103 while visit: |