filemerge: when using in-memory merge, always put backup files in temp dir
Before calling a merge tool, we create a backup of the local side of
the merge. That file can be put in the working copy or in a temporary
directory, depending on the user's config. When we're merging in
memory, we don't want to write to the actual, on-disk working copy, so
we write the file to the in-memory working copy instead. However,
since we don't support external merge tools with in-memory merge, it
makes no difference where the file is actually stored (and if we ever
do add support for external merge tools, then the file clearly can't
live in the in-memory working-copy object anyway). So, since it
doesn't matter where the file is stored, we can simplify by always
putting them in the system's temp directory.
Differential Revision: https://phab.mercurial-scm.org/D12187
Testing narrow clones when changesets modifying a matching file exist on
multiple branches
$ . "$TESTDIR/narrow-library.sh"
$ hg init master
$ cd master
$ cat >> .hg/hgrc <<EOF
> [narrow]
> serveellipses=True
> EOF
$ hg branch default
marked working directory as branch default
(branches are permanent and global, did you want a bookmark?)
$ for x in `$TESTDIR/seq.py 10`; do
> echo $x > "f$x"
> hg add "f$x"
> hg commit -m "Add $x"
> done
$ hg branch release-v1
marked working directory as branch release-v1
(branches are permanent and global, did you want a bookmark?)
$ hg commit -m "Start release for v1"
$ hg update default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ for x in `$TESTDIR/seq.py 10`; do
> echo "$x v2" > "f$x"
> hg commit -m "Update $x to v2"
> done
$ hg update release-v1
10 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg branch release-v1
marked working directory as branch release-v1
$ for x in `$TESTDIR/seq.py 1 5`; do
> echo "$x v1 hotfix" > "f$x"
> hg commit -m "Hotfix $x in v1"
> done
$ hg update default
10 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg branch release-v2
marked working directory as branch release-v2
$ hg commit -m "Start release for v2"
$ hg update default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg branch default
marked working directory as branch default
$ for x in `$TESTDIR/seq.py 10`; do
> echo "$x v3" > "f$x"
> hg commit -m "Update $x to v3"
> done
$ hg update release-v2
10 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg branch release-v2
marked working directory as branch release-v2
$ for x in `$TESTDIR/seq.py 4 9`; do
> echo "$x v2 hotfix" > "f$x"
> hg commit -m "Hotfix $x in v2"
> done
$ hg heads -T '{rev} <- {p1rev} ({branch}): {desc}\n'
42 <- 41 (release-v2): Hotfix 9 in v2
36 <- 35 (default): Update 10 to v3
25 <- 24 (release-v1): Hotfix 5 in v1
$ cd ..
We now have 3 branches: default, which has v3 of all files, release-v1 which
has v1 of all files, and release-v2 with v2 of all files.
Narrow clone which should get all branches
$ hg clone --narrow ssh://user@dummy/master narrow --include "f5"
requesting all changes
adding changesets
adding manifests
adding file changes
added 12 changesets with 5 changes to 1 files (+2 heads)
new changesets *:* (glob)
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd narrow
$ hg log -G -T "{if(ellipsis, '...')}{node|short} ({branch}): {desc}\n"
o ...031f516143fe (release-v2): Hotfix 9 in v2
|
o 9cd7f7bb9ca1 (release-v2): Hotfix 5 in v2
|
o ...37bbc88f3ef0 (release-v2): Hotfix 4 in v2
|
| @ ...dae2f368ca07 (default): Update 10 to v3
| |
| o 9c224e89cb31 (default): Update 5 to v3
| |
| o ...04fb59c7c9dc (default): Update 4 to v3
|/
| o b2253e82401f (release-v1): Hotfix 5 in v1
| |
| o ...960ac37d74fd (release-v1): Hotfix 4 in v1
| |
o | 986298e3f347 (default): Update 5 to v2
| |
o | ...75d539c667ec (default): Update 4 to v2
|/
o 04c71bd5707f (default): Add 5
|
o ...881b3891d041 (default): Add 4
Narrow clone the first file, hitting edge condition where unaligned
changeset and manifest revnums cross branches.
$ hg clone --narrow ssh://user@dummy/master narrow --include "f1"
requesting all changes
adding changesets
adding manifests
adding file changes
added 10 changesets with 4 changes to 1 files (+2 heads)
new changesets *:* (glob)
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd narrow
$ hg log -G -T "{if(ellipsis, '...')}{node|short} ({branch}): {desc}\n"
o ...031f516143fe (release-v2): Hotfix 9 in v2
|
| @ ...dae2f368ca07 (default): Update 10 to v3
| |
| o 1f5d184b8e96 (default): Update 1 to v3
|/
| o ...b2253e82401f (release-v1): Hotfix 5 in v1
| |
| o 133502f6b7e5 (release-v1): Hotfix 1 in v1
| |
o | ...79165c83d644 (default): Update 10 to v2
| |
o | c7b7a5f2f088 (default): Update 1 to v2
| |
| o ...f0531a3db7a9 (release-v1): Start release for v1
|/
o ...6a3f0f0abef3 (default): Add 10
|
o e012ac15eaaa (default): Add 1