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
#require no-reposimplestore
$ . "$TESTDIR/narrow-library.sh"
$ hg init master
$ cd master
$ cat >> .hg/hgrc <<EOF
> [narrow]
> serveellipses=True
> EOF
$ for x in `$TESTDIR/seq.py 10`
> do
> echo $x > "f$x"
> hg add "f$x"
> done
$ hg commit -m "Add root files"
$ mkdir d1 d2
$ for x in `$TESTDIR/seq.py 10`
> do
> echo d1/$x > "d1/f$x"
> hg add "d1/f$x"
> echo d2/$x > "d2/f$x"
> hg add "d2/f$x"
> done
$ hg commit -m "Add d1 and d2"
$ for x in `$TESTDIR/seq.py 10`
> do
> echo f$x rev2 > "f$x"
> echo d1/f$x rev2 > "d1/f$x"
> echo d2/f$x rev2 > "d2/f$x"
> hg commit -m "Commit rev2 of f$x, d1/f$x, d2/f$x"
> done
$ cd ..
narrow and shallow clone the d2 directory
$ hg clone --narrow ssh://user@dummy/master shallow --include "d2" --depth 2
requesting all changes
adding changesets
adding manifests
adding file changes
added 4 changesets with 13 changes to 10 files
new changesets *:* (glob)
updating to branch default
10 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd shallow
$ hg log -T '{rev}{if(ellipsis,"...")}: {desc}\n'
3: Commit rev2 of f10, d1/f10, d2/f10
2: Commit rev2 of f9, d1/f9, d2/f9
1: Commit rev2 of f8, d1/f8, d2/f8
0...: Commit rev2 of f7, d1/f7, d2/f7
$ hg update 0
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat d2/f7 d2/f8
d2/f7 rev2
d2/8
$ cd ..
change every upstream file once
$ cd master
$ for x in `$TESTDIR/seq.py 10`
> do
> echo f$x rev3 > "f$x"
> echo d1/f$x rev3 > "d1/f$x"
> echo d2/f$x rev3 > "d2/f$x"
> hg commit -m "Commit rev3 of f$x, d1/f$x, d2/f$x"
> done
$ cd ..
pull new changes with --depth specified. There were 10 changes to the d2
directory but the shallow pull should only fetch 3.
$ cd shallow
$ hg pull --depth 2
pulling from ssh://user@dummy/master
searching for changes
adding changesets
adding manifests
adding file changes
added 4 changesets with 10 changes to 10 files
new changesets *:* (glob)
(run 'hg update' to get a working copy)
$ hg log -T '{rev}{if(ellipsis,"...")}: {desc}\n'
7: Commit rev3 of f10, d1/f10, d2/f10
6: Commit rev3 of f9, d1/f9, d2/f9
5: Commit rev3 of f8, d1/f8, d2/f8
4...: Commit rev3 of f7, d1/f7, d2/f7
3: Commit rev2 of f10, d1/f10, d2/f10
2: Commit rev2 of f9, d1/f9, d2/f9
1: Commit rev2 of f8, d1/f8, d2/f8
0...: Commit rev2 of f7, d1/f7, d2/f7
$ hg update 4
10 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat d2/f7 d2/f8
d2/f7 rev3
d2/f8 rev2
$ hg update 7
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat d2/f10
d2/f10 rev3
$ cd ..
cannot clone with zero or negative depth
$ hg clone --narrow ssh://user@dummy/master bad --include "d2" --depth 0
requesting all changes
remote: abort: depth must be positive, got 0
abort: pull failed on remote
[100]
$ hg clone --narrow ssh://user@dummy/master bad --include "d2" --depth -1
requesting all changes
remote: abort: depth must be positive, got -1
abort: pull failed on remote
[100]