Mercurial > hg
comparison mercurial/changegroup.py @ 38981:227ebd88ce5e
changegroup: pull _fileheader out of cgpacker
It doesn't need any state from the packer.
Differential Revision: https://phab.mercurial-scm.org/D4138
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Fri, 03 Aug 2018 18:40:41 -0700 |
parents | 4a202bccafcf |
children | 037debbf869c |
comparison
equal
deleted
inserted
replaced
38980:4a202bccafcf | 38981:227ebd88ce5e |
---|---|
63 return struct.pack(">l", length + 4) | 63 return struct.pack(">l", length + 4) |
64 | 64 |
65 def closechunk(): | 65 def closechunk(): |
66 """return a changegroup chunk header (string) for a zero-length chunk""" | 66 """return a changegroup chunk header (string) for a zero-length chunk""" |
67 return struct.pack(">l", 0) | 67 return struct.pack(">l", 0) |
68 | |
69 def _fileheader(path): | |
70 """Obtain a changegroup chunk header for a named path.""" | |
71 return chunkheader(len(path)) + path | |
68 | 72 |
69 def writechunks(ui, chunks, filename, vfs=None): | 73 def writechunks(ui, chunks, filename, vfs=None): |
70 """Write chunks to a file and return its filename. | 74 """Write chunks to a file and return its filename. |
71 | 75 |
72 The stream is assumed to be a bundle file. | 76 The stream is assumed to be a bundle file. |
604 self._clrevtolocalrev = self._nextclrevtolocalrev | 608 self._clrevtolocalrev = self._nextclrevtolocalrev |
605 self._nextclrevtolocalrev = None | 609 self._nextclrevtolocalrev = None |
606 | 610 |
607 return closechunk() | 611 return closechunk() |
608 | 612 |
609 def _fileheader(self, fname): | |
610 return chunkheader(len(fname)) + fname | |
611 | |
612 # Extracted both for clarity and for overriding in extensions. | 613 # Extracted both for clarity and for overriding in extensions. |
613 def _sortgroup(self, store, ischangelog, nodelist, lookup): | 614 def _sortgroup(self, store, ischangelog, nodelist, lookup): |
614 """Sort nodes for change group and turn them into revnums.""" | 615 """Sort nodes for change group and turn them into revnums.""" |
615 # Ellipses serving mode. | 616 # Ellipses serving mode. |
616 # | 617 # |
699 can be sent. Multiple manifests is not supported by cg1 and cg2. | 700 can be sent. Multiple manifests is not supported by cg1 and cg2. |
700 """ | 701 """ |
701 | 702 |
702 if dir: | 703 if dir: |
703 assert self.version == b'03' | 704 assert self.version == b'03' |
704 yield self._fileheader(dir) | 705 yield _fileheader(dir) |
705 | 706 |
706 # TODO violates storage abstractions by assuming revlogs. | 707 # TODO violates storage abstractions by assuming revlogs. |
707 dirlog = self._repo.manifestlog._revlog.dirlog(dir) | 708 dirlog = self._repo.manifestlog._revlog.dirlog(dir) |
708 for chunk in self.group(mfnodes, dirlog, False, lookuplinknode, | 709 for chunk in self.group(mfnodes, dirlog, False, lookuplinknode, |
709 units=_('manifests')): | 710 units=_('manifests')): |
979 return linkrevnodes[x] | 980 return linkrevnodes[x] |
980 | 981 |
981 filenodes = self._prune(filerevlog, linkrevnodes, commonrevs) | 982 filenodes = self._prune(filerevlog, linkrevnodes, commonrevs) |
982 if filenodes: | 983 if filenodes: |
983 progress.update(i + 1, item=fname) | 984 progress.update(i + 1, item=fname) |
984 h = self._fileheader(fname) | 985 h = _fileheader(fname) |
985 size = len(h) | 986 size = len(h) |
986 yield h | 987 yield h |
987 for chunk in self.group(filenodes, filerevlog, False, | 988 for chunk in self.group(filenodes, filerevlog, False, |
988 lookupfilelog): | 989 lookupfilelog): |
989 size += len(chunk) | 990 size += len(chunk) |