Mercurial > public > mercurial-scm > hg
comparison mercurial/manifest.py @ 24525:e118f74d246f
manifest: extract method for creating manifest text
Similar to the previous change, this one extracts a method for
producing a manifest text from an iterator over (path, node, flags)
tuples.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Fri, 27 Mar 2015 15:37:46 -0700 |
parents | 63b6031384fc |
children | cd50f3717639 |
comparison
equal
deleted
inserted
replaced
24524:63b6031384fc | 24525:e118f74d246f |
---|---|
29 if len(n) > 40: | 29 if len(n) > 40: |
30 yield f, revlog.bin(n[:40]), n[40:] | 30 yield f, revlog.bin(n[:40]), n[40:] |
31 else: | 31 else: |
32 yield f, revlog.bin(n), '' | 32 yield f, revlog.bin(n), '' |
33 | 33 |
34 def _text(it): | |
35 """Given an iterator over (path, node, flags) tuples, returns a manifest | |
36 text""" | |
37 files = [] | |
38 lines = [] | |
39 _hex = revlog.hex | |
40 for f, n, fl in it: | |
41 files.append(f) | |
42 # if this is changed to support newlines in filenames, | |
43 # be sure to check the templates/ dir again (especially *-raw.tmpl) | |
44 lines.append("%s\0%s%s\n" % (f, _hex(n), fl)) | |
45 | |
46 _checkforbidden(files) | |
47 return ''.join(lines) | |
48 | |
34 class _lazymanifest(dict): | 49 class _lazymanifest(dict): |
35 """This is the pure implementation of lazymanifest. | 50 """This is the pure implementation of lazymanifest. |
36 | 51 |
37 It has not been optimized *at all* and is not lazy. | 52 It has not been optimized *at all* and is not lazy. |
38 """ | 53 """ |
90 c[f] = n, fl | 105 c[f] = n, fl |
91 return c | 106 return c |
92 | 107 |
93 def text(self): | 108 def text(self): |
94 """Get the full data of this manifest as a bytestring.""" | 109 """Get the full data of this manifest as a bytestring.""" |
95 fl = self.iterentries() | 110 return _text(self.iterentries()) |
96 | |
97 _hex = revlog.hex | |
98 # if this is changed to support newlines in filenames, | |
99 # be sure to check the templates/ dir again (especially *-raw.tmpl) | |
100 return ''.join("%s\0%s%s\n" % ( | |
101 f, _hex(n[:20]), flag) for f, n, flag in fl) | |
102 | 111 |
103 try: | 112 try: |
104 _lazymanifest = parsers.lazymanifest | 113 _lazymanifest = parsers.lazymanifest |
105 except AttributeError: | 114 except AttributeError: |
106 pass | 115 pass |
576 _diff(self, m2) | 585 _diff(self, m2) |
577 return result | 586 return result |
578 | 587 |
579 def text(self): | 588 def text(self): |
580 """Get the full data of this manifest as a bytestring.""" | 589 """Get the full data of this manifest as a bytestring.""" |
581 fl = self.keys() | 590 flags = self.flags |
582 _checkforbidden(fl) | 591 return _text((f, self[f], flags(f)) for f in self.keys()) |
583 | |
584 hex, flags = revlog.hex, self.flags | |
585 # if this is changed to support newlines in filenames, | |
586 # be sure to check the templates/ dir again (especially *-raw.tmpl) | |
587 return ''.join("%s\0%s%s\n" % (f, hex(self[f]), flags(f)) for f in fl) | |
588 | 592 |
589 class manifest(revlog.revlog): | 593 class manifest(revlog.revlog): |
590 def __init__(self, opener): | 594 def __init__(self, opener): |
591 # During normal operations, we expect to deal with not more than four | 595 # During normal operations, we expect to deal with not more than four |
592 # revs at a time (such as during commit --amend). When rebasing large | 596 # revs at a time (such as during commit --amend). When rebasing large |