remotefilelog: do not delta lfs revisions

Summary: This is similar to the previous patch, but applies to remotefilelog.

Reviewed By: DurhamG

Differential Revision: D6906212

fbshipit-source-id: 30383632046f57b169dcb8a2ba1c0dd73113154a
This commit is contained in:
Jun Wu 2018-02-06 14:18:25 -08:00 committed by Saurabh Singh
parent 07042a2157
commit 1be09a10bc
2 changed files with 16 additions and 3 deletions

View File

@ -169,6 +169,13 @@ class remotefilelog(object):
rawsize = size
def candelta(self, basenode, node):
# Do not use delta if either node is LFS. Avoids issues if clients have
# the delta base stored in different forms: one LFS, one non-LFS.
if self.flags(basenode) or self.flags(node):
return False
return True
def cmp(self, node, text):
"""compare text with a given file revision
@ -201,6 +208,8 @@ class remotefilelog(object):
if isinstance(node, int):
raise error.ProgrammingError(
'remotefilelog does not accept integer rev for flags')
if node == nullid:
return revlog.REVIDX_DEFAULT_FLAGS
store = self.repo.contentstore
return store.getmeta(self.filename, node).get(constants.METAKEYFLAG, 0)

View File

@ -224,15 +224,19 @@ class shallowcg1packer(changegroup.cg1packer):
def nodechunk(self, revlog, node, prevnode, linknode):
prefix = ''
if prevnode == nullid:
if prevnode is not nullid and not revlog.candelta(prevnode, node):
basenode = nullid
else:
basenode = prevnode
if basenode == nullid:
delta = revlog.revision(node, raw=True)
prefix = mdiff.trivialdiffheader(len(delta))
else:
# Actually uses remotefilelog.revdiff which works on nodes, not revs
delta = revlog.revdiff(prevnode, node)
delta = revlog.revdiff(basenode, node)
p1, p2 = revlog.parents(node)
flags = revlog.flags(node)
meta = self.builddeltaheader(node, p1, p2, prevnode, linknode, flags)
meta = self.builddeltaheader(node, p1, p2, basenode, linknode, flags)
meta += prefix
l = len(meta) + len(delta)
yield changegroup.chunkheader(l)