diff -r 0171483b082f -r 54e943b28101 mercurial/changelog.py --- a/mercurial/changelog.py Wed Oct 09 22:59:38 2019 +0200 +++ b/mercurial/changelog.py Sun Oct 06 23:36:51 2019 -0400 @@ -16,6 +16,7 @@ from .thirdparty import attr from . import ( + copies, encoding, error, pycompat, @@ -89,61 +90,6 @@ return b"\0".join(items) -def encodecopies(files, copies): - items = [] - for i, dst in enumerate(files): - if dst in copies: - items.append(b'%d\0%s' % (i, copies[dst])) - if len(items) != len(copies): - raise error.ProgrammingError( - b'some copy targets missing from file list' - ) - return b"\n".join(items) - - -def decodecopies(files, data): - try: - copies = {} - if not data: - return copies - for l in data.split(b'\n'): - strindex, src = l.split(b'\0') - i = int(strindex) - dst = files[i] - copies[dst] = src - return copies - except (ValueError, IndexError): - # Perhaps someone had chosen the same key name (e.g. "p1copies") and - # used different syntax for the value. - return None - - -def encodefileindices(files, subset): - subset = set(subset) - indices = [] - for i, f in enumerate(files): - if f in subset: - indices.append(b'%d' % i) - return b'\n'.join(indices) - - -def decodefileindices(files, data): - try: - subset = [] - if not data: - return subset - for strindex in data.split(b'\n'): - i = int(strindex) - if i < 0 or i >= len(files): - return None - subset.append(files[i]) - return subset - except (ValueError, IndexError): - # Perhaps someone had chosen the same key name (e.g. "added") and - # used different syntax for the value. - return None - - def stripdesc(desc): """strip trailing whitespace and leading and trailing empty lines""" return b'\n'.join([l.rstrip() for l in desc.splitlines()]).strip(b'\n') @@ -368,7 +314,7 @@ rawindices = self.extra.get(b'filesadded') if rawindices is None: return None - return decodefileindices(self.files, rawindices) + return copies.decodefileindices(self.files, rawindices) @property def filesremoved(self): @@ -378,7 +324,7 @@ rawindices = self.extra.get(b'filesremoved') if rawindices is None: return None - return decodefileindices(self.files, rawindices) + return copies.decodefileindices(self.files, rawindices) @property def p1copies(self): @@ -388,7 +334,7 @@ rawcopies = self.extra.get(b'p1copies') if rawcopies is None: return None - return decodecopies(self.files, rawcopies) + return copies.decodecopies(self.files, rawcopies) @property def p2copies(self): @@ -398,7 +344,7 @@ rawcopies = self.extra.get(b'p2copies') if rawcopies is None: return None - return decodecopies(self.files, rawcopies) + return copies.decodecopies(self.files, rawcopies) @property def description(self): @@ -711,13 +657,13 @@ ): extra.pop(name, None) if p1copies is not None: - p1copies = encodecopies(sortedfiles, p1copies) + p1copies = copies.encodecopies(sortedfiles, p1copies) if p2copies is not None: - p2copies = encodecopies(sortedfiles, p2copies) + p2copies = copies.encodecopies(sortedfiles, p2copies) if filesadded is not None: - filesadded = encodefileindices(sortedfiles, filesadded) + filesadded = copies.encodefileindices(sortedfiles, filesadded) if filesremoved is not None: - filesremoved = encodefileindices(sortedfiles, filesremoved) + filesremoved = copies.encodefileindices(sortedfiles, filesremoved) if self._copiesstorage == b'extra': extrasentries = p1copies, p2copies, filesadded, filesremoved if extra is None and any(x is not None for x in extrasentries):