Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/hg.py @ 25:daa724b27300
Fix corruption from manifest.listcache optimization
Put the remove edit text in the right place
author | mpm@selenic.com |
---|---|
date | Wed, 04 May 2005 22:47:25 -0800 |
parents | a664c2b624cf |
children | 4d3a5dcb6972 |
comparison
equal
deleted
inserted
replaced
24:57a1eef79415 | 25:daa724b27300 |
---|---|
78 def read(self, node): | 78 def read(self, node): |
79 if self.mapcache and self.mapcache[0] == node: | 79 if self.mapcache and self.mapcache[0] == node: |
80 return self.mapcache[1] | 80 return self.mapcache[1] |
81 text = self.revision(node) | 81 text = self.revision(node) |
82 map = {} | 82 map = {} |
83 self.listcache = text.splitlines(1) | 83 self.listcache = (text, text.splitlines(1)) |
84 for l in self.listcache: | 84 for l in self.listcache[1]: |
85 (f, n) = l.split('\0') | 85 (f, n) = l.split('\0') |
86 map[f] = bin(n[:40]) | 86 map[f] = bin(n[:40]) |
87 self.mapcache = (node, map) | 87 self.mapcache = (node, map) |
88 return map | 88 return map |
89 | 89 |
90 def diff(self, a, b): | 90 def diff(self, a, b): |
91 # this is sneaky, as we're not actually using a and b | 91 # this is sneaky, as we're not actually using a and b |
92 if self.listcache: | 92 if self.listcache and len(self.listcache[0]) == len(a): |
93 return mdiff.diff(self.listcache, self.addlist, 1) | 93 return mdiff.diff(self.listcache[1], self.addlist, 1) |
94 else: | 94 else: |
95 return mdiff.diff(a, b) | 95 return mdiff.diff(a, b) |
96 | 96 |
97 def add(self, map, transaction, link, p1=None, p2=None): | 97 def add(self, map, transaction, link, p1=None, p2=None): |
98 files = map.keys() | 98 files = map.keys() |
101 self.addlist = ["%s\000%s\n" % (f, hex(map[f])) for f in files] | 101 self.addlist = ["%s\000%s\n" % (f, hex(map[f])) for f in files] |
102 text = "".join(self.addlist) | 102 text = "".join(self.addlist) |
103 | 103 |
104 n = self.addrevision(text, transaction, link, p1, p2) | 104 n = self.addrevision(text, transaction, link, p1, p2) |
105 self.mapcache = (n, map) | 105 self.mapcache = (n, map) |
106 self.listcache = self.addlist | 106 self.listcache = (text, self.addlist) |
107 | 107 |
108 return n | 108 return n |
109 | 109 |
110 class changelog(revlog): | 110 class changelog(revlog): |
111 def __init__(self, opener): | 111 def __init__(self, opener): |
401 new = new.keys() | 401 new = new.keys() |
402 new.sort() | 402 new.sort() |
403 if co == cn: cn = -1 | 403 if co == cn: cn = -1 |
404 | 404 |
405 edittext = "\n"+"".join(["HG: changed %s\n" % f for f in new]) | 405 edittext = "\n"+"".join(["HG: changed %s\n" % f for f in new]) |
406 edittext += "".join(["HG: removed %s\n" % f for f in remove]) | |
407 edittext = self.ui.edit(edittext) | 406 edittext = self.ui.edit(edittext) |
408 n = self.changelog.add(node, new, edittext, tr, co, cn) | 407 n = self.changelog.add(node, new, edittext, tr, co, cn) |
409 | 408 |
410 tr.close() | 409 tr.close() |
411 | 410 |
444 # add changeset | 443 # add changeset |
445 new = new.keys() | 444 new = new.keys() |
446 new.sort() | 445 new.sort() |
447 | 446 |
448 edittext = text + "\n"+"".join(["HG: changed %s\n" % f for f in new]) | 447 edittext = text + "\n"+"".join(["HG: changed %s\n" % f for f in new]) |
448 edittext += "".join(["HG: removed %s\n" % f for f in remove]) | |
449 edittext = self.ui.edit(edittext) | 449 edittext = self.ui.edit(edittext) |
450 | 450 |
451 n = self.changelog.add(mnode, new, edittext, tr) | 451 n = self.changelog.add(mnode, new, edittext, tr) |
452 tr.close() | 452 tr.close() |
453 | 453 |