##// END OF EJS Templates
filemerge: use a single temp dir instead of temp files...
Kyle Lippincott -
r37017:e349ad5c default
parent child Browse files
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." % (os.path.basename(fullbase), prefix)
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