Show More
@@ -502,6 +502,9 b" coreconfigitem('experimental', 'worddiff" | |||||
502 | coreconfigitem('experimental', 'maxdeltachainspan', |
|
502 | coreconfigitem('experimental', 'maxdeltachainspan', | |
503 | default=-1, |
|
503 | default=-1, | |
504 | ) |
|
504 | ) | |
|
505 | coreconfigitem('experimental', 'mergetempdirprefix', | |||
|
506 | default=None, | |||
|
507 | ) | |||
505 | coreconfigitem('experimental', 'mmapindexthreshold', |
|
508 | coreconfigitem('experimental', 'mmapindexthreshold', | |
506 | default=None, |
|
509 | default=None, | |
507 | ) |
|
510 | ) |
@@ -10,6 +10,7 b' from __future__ import absolute_import' | |||||
10 | import contextlib |
|
10 | import contextlib | |
11 | import os |
|
11 | import os | |
12 | import re |
|
12 | import re | |
|
13 | import shutil | |||
13 | import tempfile |
|
14 | import tempfile | |
14 |
|
15 | |||
15 | from .i18n import _ |
|
16 | from .i18n import _ | |
@@ -668,12 +669,23 b' def _maketempfiles(repo, fco, fca):' | |||||
668 | """Writes out `fco` and `fca` as temporary files, so an external merge |
|
669 | """Writes out `fco` and `fca` as temporary files, so an external merge | |
669 | tool may use them. |
|
670 | tool may use them. | |
670 | """ |
|
671 | """ | |
|
672 | tmproot = None | |||
|
673 | tmprootprefix = repo.ui.config('experimental', 'mergetempdirprefix') | |||
|
674 | if tmprootprefix: | |||
|
675 | tmproot = tempfile.mkdtemp(prefix=tmprootprefix) | |||
|
676 | ||||
671 | def temp(prefix, ctx): |
|
677 | def temp(prefix, ctx): | |
672 | fullbase, ext = os.path.splitext(ctx.path()) |
|
678 | fullbase, ext = os.path.splitext(ctx.path()) | |
673 |
pre = "%s~%s |
|
679 | pre = "%s~%s" % (os.path.basename(fullbase), prefix) | |
674 | (fd, name) = tempfile.mkstemp(prefix=pre, suffix=ext) |
|
680 | if tmproot: | |
|
681 | name = os.path.join(tmproot, pre) | |||
|
682 | if ext: | |||
|
683 | name += ext | |||
|
684 | f = open(name, r"wb") | |||
|
685 | else: | |||
|
686 | (fd, name) = tempfile.mkstemp(prefix=pre + '.', suffix=ext) | |||
|
687 | f = os.fdopen(fd, r"wb") | |||
675 | data = repo.wwritedata(ctx.path(), ctx.data()) |
|
688 | data = repo.wwritedata(ctx.path(), ctx.data()) | |
676 | f = os.fdopen(fd, r"wb") |
|
|||
677 | f.write(data) |
|
689 | f.write(data) | |
678 | f.close() |
|
690 | f.close() | |
679 | return name |
|
691 | return name | |
@@ -683,8 +695,11 b' def _maketempfiles(repo, fco, fca):' | |||||
683 | try: |
|
695 | try: | |
684 | yield b, c |
|
696 | yield b, c | |
685 | finally: |
|
697 | finally: | |
686 | util.unlink(b) |
|
698 | if tmproot: | |
687 | util.unlink(c) |
|
699 | shutil.rmtree(tmproot) | |
|
700 | else: | |||
|
701 | util.unlink(b) | |||
|
702 | util.unlink(c) | |||
688 |
|
703 | |||
689 | def _filemerge(premerge, repo, wctx, mynode, orig, fcd, fco, fca, labels=None): |
|
704 | def _filemerge(premerge, repo, wctx, mynode, orig, fcd, fco, fca, labels=None): | |
690 | """perform a 3-way merge in the working directory |
|
705 | """perform a 3-way merge in the working directory |
@@ -1363,6 +1363,33 b' mergemarkertemplate settings:' | |||||
1363 | (branch merge, don't forget to commit) |
|
1363 | (branch merge, don't forget to commit) | |
1364 | $ rm -f 'printargs_merge_tool' |
|
1364 | $ rm -f 'printargs_merge_tool' | |
1365 |
|
1365 | |||
|
1366 | Same test with experimental.mergetempdirprefix set: | |||
|
1367 | ||||
|
1368 | $ beforemerge | |||
|
1369 | [merge-tools] | |||
|
1370 | false.whatever= | |||
|
1371 | true.priority=1 | |||
|
1372 | true.executable=cat | |||
|
1373 | # hg update -C 1 | |||
|
1374 | $ cat <<EOF > printargs_merge_tool | |||
|
1375 | > while test \$# -gt 0; do echo arg: \"\$1\"; shift; done | |||
|
1376 | > EOF | |||
|
1377 | $ hg --config experimental.mergetempdirprefix=$TESTTMP/hgmerge. \ | |||
|
1378 | > --config merge-tools.true.executable='sh' \ | |||
|
1379 | > --config merge-tools.true.args='./printargs_merge_tool ll:$labellocal lo: $labelother lb:$labelbase": "$base' \ | |||
|
1380 | > --config merge-tools.true.mergemarkertemplate='tooltmpl {short(node)}' \ | |||
|
1381 | > --config ui.mergemarkertemplate='uitmpl {rev}' \ | |||
|
1382 | > --config ui.mergemarkers=detailed \ | |||
|
1383 | > merge -r 2 | |||
|
1384 | merging f | |||
|
1385 | arg: "ll:working copy" | |||
|
1386 | arg: "lo:" | |||
|
1387 | arg: "merge rev" | |||
|
1388 | arg: "lb:base: $TESTTMP/hgmerge.*/f~base" (glob) | |||
|
1389 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | |||
|
1390 | (branch merge, don't forget to commit) | |||
|
1391 | $ rm -f 'printargs_merge_tool' | |||
|
1392 | ||||
1366 | Merge using a tool that supports labellocal, labelother, and labelbase, checking |
|
1393 | Merge using a tool that supports labellocal, labelother, and labelbase, checking | |
1367 | that they're quoted properly as well. This is using 'detailed' mergemarkers, |
|
1394 | that they're quoted properly as well. This is using 'detailed' mergemarkers, | |
1368 | even though ui.mergemarkers is 'basic', and using the tool's |
|
1395 | even though ui.mergemarkers is 'basic', and using the tool's | |
@@ -1562,6 +1589,21 b' Verify naming of temporary files and tha' | |||||
1562 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
1589 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
1563 | (branch merge, don't forget to commit) |
|
1590 | (branch merge, don't forget to commit) | |
1564 |
|
1591 | |||
|
1592 | Verify naming of temporary files and that extension is preserved | |||
|
1593 | (experimental.mergetempdirprefix version): | |||
|
1594 | ||||
|
1595 | $ hg update -q -C 1 | |||
|
1596 | $ hg mv f f.txt | |||
|
1597 | $ hg ci -qm "f.txt" | |||
|
1598 | $ hg update -q -C 2 | |||
|
1599 | $ hg merge -y -r tip --tool echo \ | |||
|
1600 | > --config merge-tools.echo.args='$base $local $other $output' \ | |||
|
1601 | > --config experimental.mergetempdirprefix=$TESTTMP/hgmerge. | |||
|
1602 | merging f and f.txt to f.txt | |||
|
1603 | $TESTTMP/hgmerge.*/f~base $TESTTMP/f.txt.orig $TESTTMP/hgmerge.*/f~other.txt $TESTTMP/f.txt (glob) | |||
|
1604 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | |||
|
1605 | (branch merge, don't forget to commit) | |||
|
1606 | ||||
1565 | Check that debugpicktool examines which merge tool is chosen for |
|
1607 | Check that debugpicktool examines which merge tool is chosen for | |
1566 | specified file as expected |
|
1608 | specified file as expected | |
1567 |
|
1609 |
General Comments 0
You need to be logged in to leave comments.
Login now