##// END OF EJS Templates
filemerge: add config knob to check capabilities of internal merge tools...
FUJIWARA Katsunori -
r39161:cded904f default
parent child Browse files
Show More
@@ -771,6 +771,9 b" coreconfigitem('merge', 'on-failure',"
771 771 coreconfigitem('merge', 'preferancestor',
772 772 default=lambda: ['*'],
773 773 )
774 coreconfigitem('merge', 'strict-capability-check',
775 default=False,
776 )
774 777 coreconfigitem('merge-tools', '.*',
775 778 default=None,
776 779 generic=True,
@@ -137,6 +137,8 b' def findexternaltool(ui, tool):'
137 137 return procutil.findexe(util.expandpath(exe))
138 138
139 139 def _picktool(repo, ui, path, binary, symlink, changedelete):
140 strictcheck = ui.configbool('merge', 'strict-capability-check')
141
140 142 def hascapability(tool, capability, strict=False):
141 143 if strict and tool in internals:
142 144 if internals[tool].capabilities.get(capability):
@@ -155,9 +157,9 b' def _picktool(repo, ui, path, binary, sy'
155 157 ui.warn(_("couldn't find merge tool %s\n") % tmsg)
156 158 else: # configured but non-existing tools are more silent
157 159 ui.note(_("couldn't find merge tool %s\n") % tmsg)
158 elif symlink and not hascapability(tool, "symlink"):
160 elif symlink and not hascapability(tool, "symlink", strictcheck):
159 161 ui.warn(_("tool %s can't handle symlinks\n") % tmsg)
160 elif binary and not hascapability(tool, "binary"):
162 elif binary and not hascapability(tool, "binary", strictcheck):
161 163 ui.warn(_("tool %s can't handle binary\n") % tmsg)
162 164 elif changedelete and not supportscd(tool):
163 165 # the nomerge tools are the only tools that support change/delete
@@ -192,9 +194,13 b' def _picktool(repo, ui, path, binary, sy'
192 194 return (hgmerge, hgmerge)
193 195
194 196 # then patterns
197
198 # whether binary capability should be checked strictly
199 binarycap = binary and strictcheck
200
195 201 for pat, tool in ui.configitems("merge-patterns"):
196 202 mf = match.match(repo.root, '', [pat])
197 if mf(path) and check(tool, pat, symlink, False, changedelete):
203 if mf(path) and check(tool, pat, symlink, binarycap, changedelete):
198 204 if binary and not hascapability(tool, "binary", strict=True):
199 205 ui.warn(_("warning: check merge-patterns configurations,"
200 206 " if %r for binary file %r is unintentional\n"
@@ -1347,6 +1347,11 b' This section specifies behavior during m'
1347 1347 halted, the repository is left in a normal ``unresolved`` merge state.
1348 1348 (default: ``continue``)
1349 1349
1350 ``strict-capability-check``
1351 Whether capabilities of internal merge tools are checked strictly
1352 or not, while examining rules to decide merge tool to be used.
1353 (default: False)
1354
1350 1355 ``merge-patterns``
1351 1356 ------------------
1352 1357
@@ -80,10 +80,14 b' step specified via binary symlink'
80 80 ==== =============== ====== =======
81 81 1. --tool o o
82 82 2. HGMERGE o o
83 3. merge-patterns o x
84 4. ui.merge x x
83 3. merge-patterns o (*) x (*)
84 4. ui.merge x (*) x (*)
85 85 ==== =============== ====== =======
86 86
87 If ``merge.strict-capability-check`` configuration is true, Mercurial
88 checks capabilities of internal merge tools strictly in (*) cases
89 above. It is false by default for backward compatibility.
90
87 91 .. note::
88 92
89 93 After selecting a merge program, Mercurial will by default attempt
@@ -1913,8 +1913,12 b' Test dynamic list of merge tools only sh'
1913 1913 ----------------------------------
1914 1914 1. --tool o o
1915 1915 2. HGMERGE o o
1916 3. merge-patterns o x
1917 4. ui.merge x x
1916 3. merge-patterns o (*) x (*)
1917 4. ui.merge x (*) x (*)
1918
1919 If "merge.strict-capability-check" configuration is true, Mercurial checks
1920 capabilities of internal merge tools strictly in (*) cases above. It is
1921 false by default for backward compatibility.
1918 1922
1919 1923 Note:
1920 1924 After selecting a merge program, Mercurial will by default attempt to
@@ -1840,6 +1840,51 b' checked strictly.'
1840 1840 [1]
1841 1841 $ hg merge --abort -q
1842 1842
1843 (for ui.merge, ignored unintentionally)
1844
1845 $ hg merge 9 \
1846 > --config ui.merge=:other
1847 tool :other (for pattern b) can't handle binary
1848 tool true can't handle binary
1849 tool false can't handle binary
1850 no tool found to merge b
1851 keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved for b? u
1852 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
1853 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
1854 [1]
1855 $ hg merge --abort -q
1856
1857 With merge.strict-capability-check=true, binary files capability of
1858 internal merge tools is checked strictly.
1859
1860 $ f --hexdump b
1861 b:
1862 0000: 03 02 01 00 |....|
1863
1864 (for merge-patterns)
1865
1866 $ hg merge 9 --config merge.strict-capability-check=true \
1867 > --config merge-patterns.b=:merge-other \
1868 > --config merge-patterns.re:[a-z]=:other
1869 tool :merge-other (for pattern b) can't handle binary
1870 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
1871 (branch merge, don't forget to commit)
1872 $ f --hexdump b
1873 b:
1874 0000: 00 01 02 03 |....|
1875 $ hg merge --abort -q
1876
1877 (for ui.merge)
1878
1879 $ hg merge 9 --config merge.strict-capability-check=true \
1880 > --config ui.merge=:other
1881 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
1882 (branch merge, don't forget to commit)
1883 $ f --hexdump b
1884 b:
1885 0000: 00 01 02 03 |....|
1886 $ hg merge --abort -q
1887
1843 1888 Check that debugpicktool examines which merge tool is chosen for
1844 1889 specified file as expected
1845 1890
@@ -1883,6 +1928,36 b' specified file as expected'
1883 1928 $ hg debugpickmergetool -r 6d00b3726f6e
1884 1929 f = :prompt
1885 1930
1931 (by default, it is assumed that no internal merge tools has symlinks
1932 capability)
1933
1934 $ hg debugpickmergetool \
1935 > -r 6d00b3726f6e \
1936 > --config merge-patterns.f=:merge-other \
1937 > --config merge-patterns.re:[f]=:merge-local \
1938 > --config merge-patterns.re:[a-z]=:other
1939 f = :prompt
1940
1941 $ hg debugpickmergetool \
1942 > -r 6d00b3726f6e \
1943 > --config ui.merge=:other
1944 f = :prompt
1945
1946 (with strict-capability-check=true, actual symlink capabilities are
1947 checked striclty)
1948
1949 $ hg debugpickmergetool --config merge.strict-capability-check=true \
1950 > -r 6d00b3726f6e \
1951 > --config merge-patterns.f=:merge-other \
1952 > --config merge-patterns.re:[f]=:merge-local \
1953 > --config merge-patterns.re:[a-z]=:other
1954 f = :other
1955
1956 $ hg debugpickmergetool --config merge.strict-capability-check=true \
1957 > -r 6d00b3726f6e \
1958 > --config ui.merge=:other
1959 f = :other
1960
1886 1961 #endif
1887 1962
1888 1963 (--verbose shows some configurations)
General Comments 0
You need to be logged in to leave comments. Login now