--- 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):