synthrepo: create filectx instance in 'filectxfn' callback
authorMartin von Zweigbergk <martinvonz@google.com>
Sat, 09 Dec 2017 14:15:30 -0800
changeset 35398 2123e7629ec0
parent 35397 a7ff4071c8aa
child 35399 dffc35a5be9f
synthrepo: create filectx instance in 'filectxfn' callback I would like to pass the memctx to the memfilectx constructor, but it's not available where we currently create the memfilectx. It is available in the 'filectxfn' callback, so let's create the memfilectx there instead. A later patch will start actually passing the memctx. Differential Revision: https://phab.mercurial-scm.org/D1669
contrib/synthrepo.py
--- a/contrib/synthrepo.py	Tue Dec 12 20:28:38 2017 -0500
+++ b/contrib/synthrepo.py	Sat Dec 09 14:15:30 2017 -0800
@@ -369,14 +369,14 @@
             while not validpath(path):
                 path = pickpath()
             data = '%s contents\n' % path
-            files[path] = context.memfilectx(repo, path, data)
+            files[path] = data
             dir = os.path.dirname(path)
             while dir and dir not in dirs:
                 dirs.add(dir)
                 dir = os.path.dirname(dir)
 
         def filectxfn(repo, memctx, path):
-            return files[path]
+            return context.memfilectx(repo, path, files[path])
 
         ui.progress(_synthesizing, None)
         message = 'synthesized wide repo with %d files' % (len(files),)
@@ -444,14 +444,12 @@
                 for __ in xrange(add):
                     lines.insert(random.randint(0, len(lines)), makeline())
                 path = fctx.path()
-                changes[path] = context.memfilectx(repo, path,
-                                                   '\n'.join(lines) + '\n')
+                changes[path] = '\n'.join(lines) + '\n'
             for __ in xrange(pick(filesremoved)):
                 path = random.choice(mfk)
                 for __ in xrange(10):
                     path = random.choice(mfk)
                     if path not in changes:
-                        changes[path] = None
                         break
         if filesadded:
             dirs = list(pctx.dirs())
@@ -466,9 +464,11 @@
                 pathstr = '/'.join(filter(None, path))
             data = '\n'.join(makeline()
                              for __ in xrange(pick(linesinfilesadded))) + '\n'
-            changes[pathstr] = context.memfilectx(repo, pathstr, data)
+            changes[pathstr] = data
         def filectxfn(repo, memctx, path):
-            return changes[path]
+            if path not in changes:
+                return None
+            return context.memfilectx(repo, path, changes[path])
         if not changes:
             continue
         if revs: