diff --git a/remotefilelog/__init__.py b/remotefilelog/__init__.py --- a/remotefilelog/__init__.py +++ b/remotefilelog/__init__.py @@ -891,7 +891,9 @@ ], _('hg debugkeepset')) def debugkeepset(ui, repo, **opts): # The command is used to measure keepset computation time - repackmod.keepset(repo) + def keyfn(fname, fnode): + return fileserverclient.getcachekey(repo.name, fname, hex(fnode)) + repackmod.keepset(repo, keyfn) return @command('debugwaitonrepack', [ diff --git a/remotefilelog/repack.py b/remotefilelog/repack.py --- a/remotefilelog/repack.py +++ b/remotefilelog/repack.py @@ -338,8 +338,16 @@ processed.add(r) # populate keepkeys with keys from the current manifest - for filename, filenode in m.iteritems(): - keepkeys.add(keyfn(filename, filenode)) + if type(m) is dict: + # m is a result of diff of two manifests and is a dictionary that + # maps filename to ((newnode, newflag), (oldnode, oldflag)) tuple + for filename, diff in m.iteritems(): + if diff[0][0] is not None: + keepkeys.add(keyfn(filename, diff[0][0])) + else: + # m is a manifest object + for filename, filenode in m.iteritems(): + keepkeys.add(keyfn(filename, filenode)) return keepkeys