mercurial/localrepo.py
changeset 43142 beed7ce61681
parent 43137 81efc4a295e7
child 43167 bca9d1a6c4c5
--- a/mercurial/localrepo.py	Sun Oct 06 23:36:51 2019 -0400
+++ b/mercurial/localrepo.py	Sun Oct 06 23:36:51 2019 -0400
@@ -825,10 +825,13 @@
     else:  # explicitly mark repo as using revlogv0
         options[b'revlogv0'] = True
 
-    writecopiesto = ui.config(b'experimental', b'copies.write-to')
-    copiesextramode = (b'changeset-only', b'compatibility')
-    if writecopiesto in copiesextramode:
-        options[b'copies-storage'] = b'extra'
+    if COPIESSDC_REQUIREMENT in requirements:
+        options[b'copies-storage'] = b'changeset-sidedata'
+    else:
+        writecopiesto = ui.config(b'experimental', b'copies.write-to')
+        copiesextramode = (b'changeset-only', b'compatibility')
+        if writecopiesto in copiesextramode:
+            options[b'copies-storage'] = b'extra'
 
     return options
 
@@ -1182,6 +1185,10 @@
 
         self._extrafilterid = repoview.extrafilter(ui)
 
+        self.filecopiesmode = None
+        if COPIESSDC_REQUIREMENT in self.requirements:
+            self.filecopiesmode = b'changeset-sidedata'
+
     def _getvfsward(self, origfunc):
         """build a ward for self.vfs"""
         rref = weakref.ref(self)
@@ -2949,12 +2956,17 @@
         p1, p2 = ctx.p1(), ctx.p2()
         user = ctx.user()
 
-        writecopiesto = self.ui.config(b'experimental', b'copies.write-to')
-        writefilecopymeta = writecopiesto != b'changeset-only'
-        writechangesetcopy = writecopiesto in (
-            b'changeset-only',
-            b'compatibility',
-        )
+        if self.filecopiesmode == b'changeset-sidedata':
+            writechangesetcopy = True
+            writefilecopymeta = True
+            writecopiesto = None
+        else:
+            writecopiesto = self.ui.config(b'experimental', b'copies.write-to')
+            writefilecopymeta = writecopiesto != b'changeset-only'
+            writechangesetcopy = writecopiesto in (
+                b'changeset-only',
+                b'compatibility',
+            )
         p1copies, p2copies = None, None
         if writechangesetcopy:
             p1copies = ctx.p1copies()