mercurial/commit.py
changeset 45323 aea6a812f7cb
parent 45251 0041a42c6f28
child 45324 6c56277317c2
--- a/mercurial/commit.py	Thu Aug 06 10:53:00 2020 -0700
+++ b/mercurial/commit.py	Sat Jul 25 15:49:12 2020 +0200
@@ -64,12 +64,10 @@
     user = ctx.user()
 
     with repo.lock(), repo.transaction(b"commit") as tr:
-        r = _prepare_files(tr, ctx, error=error, origctx=origctx)
-        mn, files, p1copies, p2copies, filesadded, filesremoved = r
+        mn, files = _prepare_files(tr, ctx, error=error, origctx=origctx)
 
         extra = ctx.extra().copy()
 
-        files = sorted(files)
         if extra is not None:
             for name in (
                 b'p1copies',
@@ -79,16 +77,14 @@
             ):
                 extra.pop(name, None)
         if repo.changelog._copiesstorage == b'extra':
-            extra = _extra_with_copies(
-                repo, extra, files, p1copies, p2copies, filesadded, filesremoved
-            )
+            extra = _extra_with_copies(repo, extra, files)
 
         # update changelog
         repo.ui.note(_(b"committing changelog\n"))
         repo.changelog.delayupdate(tr)
         n = repo.changelog.add(
             mn,
-            files,
+            files.touched,
             ctx.description(),
             tr,
             p1.node(),
@@ -96,10 +92,10 @@
             user,
             ctx.date(),
             extra,
-            p1copies,
-            p2copies,
-            filesadded,
-            filesremoved,
+            files.copied_from_p1,
+            files.copied_from_p2,
+            files.added,
+            files.removed,
         )
         xp1, xp2 = p1.hex(), p2 and p2.hex() or b''
         repo.hook(
@@ -149,7 +145,19 @@
     if origctx and origctx.manifestnode() == mn:
         touched = origctx.files()
 
-    return mn, touched, p1copies, p2copies, filesadded, filesremoved
+    files = metadata.ChangingFiles()
+    if touched:
+        files.update_touched(touched)
+    if p1copies:
+        files.update_copies_from_p1(p1copies)
+    if p2copies:
+        files.update_copies_from_p2(p2copies)
+    if filesadded:
+        files.update_added(filesadded)
+    if filesremoved:
+        files.update_removed(filesremoved)
+
+    return mn, files
 
 
 def _process_files(tr, ctx, error=False):
@@ -413,10 +421,13 @@
     return mn
 
 
-def _extra_with_copies(
-    repo, extra, files, p1copies, p2copies, filesadded, filesremoved
-):
+def _extra_with_copies(repo, extra, files):
     """encode copy information into a `extra` dictionnary"""
+    p1copies = files.copied_from_p1
+    p2copies = files.copied_from_p2
+    filesadded = files.added
+    filesremoved = files.removed
+    files = sorted(files.touched)
     if not _write_copy_meta(repo)[1]:
         # If writing only to changeset extras, use None to indicate that
         # no entry should be written. If writing to both, write an empty