filemerge: fix crash when using filesets in [partial-merge-tools] stable 6.3.2
authorMartin von Zweigbergk <martinvonz@google.com>
Tue, 03 Jan 2023 13:38:56 -0800
branchstable
changeset 49837 59466b13a3ae
parent 49836 3d7bf111f01e
child 49838 72e208414f81
filemerge: fix crash when using filesets in [partial-merge-tools] Without this patch, you'd get `mercurial.error.ProgrammingError: fileset expression with no context`.
mercurial/filemerge.py
tests/test-merge-partial-tool.t
--- a/mercurial/filemerge.py	Tue Dec 06 17:12:59 2022 -0500
+++ b/mercurial/filemerge.py	Tue Jan 03 13:38:56 2023 -0800
@@ -1132,7 +1132,9 @@
         patterns = ui.configlist(section, b'%s.patterns' % name, [])
         is_match = True
         if patterns:
-            m = match.match(repo.root, b'', patterns)
+            m = match.match(
+                repo.root, b'', patterns, ctx=local.fctx.changectx()
+            )
             is_match = m(local.fctx.path())
         if is_match:
             if ui.configbool(section, b'%s.disable' % name):
--- a/tests/test-merge-partial-tool.t	Tue Dec 06 17:12:59 2022 -0500
+++ b/tests/test-merge-partial-tool.t	Tue Jan 03 13:38:56 2023 -0800
@@ -196,6 +196,30 @@
   >>>>>>> merge rev:       8c217da987be - test: a b c d e f2
 
 
+Filesets can be used to select which files to run partial merge tools on.
+
+  $ hg up -C 4
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg merge 3 -t :merge3 --config partial-merge-tools.head.patterns=set:other
+  merging file
+  warning: conflicts while merging file! (edit, then use 'hg resolve --mark')
+  0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
+  [1]
+  $ cat file
+  b
+  c
+  d
+  e
+  <<<<<<< working copy:    d57edaa6e21a - test: a b c d e f3
+  f3
+  ||||||| common ancestor: 8ae8bb9cc43a - test: a b c d e f
+  f
+  =======
+  f2
+  >>>>>>> merge rev:       8c217da987be - test: a b c d e f2
+
+
 If there are several matching tools, they are run in requested order. We move
 `head` after `tail` in order here so it has no effect (the conflict in "f" thus
 remains).