Mercurial > hg
annotate tests/test-issue2137.t @ 23923:ab6fd3205dad stable
largefiles: fix commit of a directory with no largefile changes (issue4330)
When a directory is named in the commit file list, the previous behavior was to
walk the list, and if no normal files in the directory were also named, add the
corresponding standin for each largefile in that directory. The directory is
then dropped from the list, so that committing a directory with no normal file
changes works. It then added the corresponding standin directory for the first
largefile seen, by prefixing it with '.hglf/'.
The latter is unnecessary since each affected largefile is explicitly referenced
by its standin in the list. It also caused an abort if there were no changed
largefiles in the directory, because none of its standins changed:
abort: .hglf/foo/bar: no match under directory!
This list of files is used to tweak a matcher in lfutil.updatestandinsbymatch(),
which is what is passed to commit().
The status() call that is ultimately done in the commit code with this matcher
seems to have some OS specific differences. It is not necessary to append '.'
for Windows to run the largefiles tests cleanly. But if '.' is not added to the
list, the match function isn't called on Linux, so status() would miss any
normal files that were also in a named directory. The commit then proceeds
without those normal files, or says "nothing changed" if there were no changed
largefiles in the directory. This is not filesystem specific, as VFAT on Linux
had the same behavior as when run on ext4. It is also not an issue with
lfilesrepo.status(), since that only calls the overridden implementation when
paths are passed to commit. I dont have access to an OS X machine ATM to test
there.
Maybe there's a better way to do this. But since the standin directory for the
first largefile was previously being added, and that caused the same walk in
status(), there's no preformance change to this. There is no danger of
erroneously committing files in '.', because the original match function is
called, and if it fails, the lfutil.updatestandinsbymatch() tweaked matcher only
indicates a match if the file is in the list of standins- and '.' never is. The
added tests confirm this.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 18 Jan 2015 15:15:40 -0500 |
parents | a421459b83c0 |
children | 2fc86d92c4a9 |
rev | line source |
---|---|
12328
b63f6422d2a7
tests: fix a bunch of pointless #s in unified tests
Matt Mackall <mpm@selenic.com>
parents:
12204
diff
changeset
|
1 http://mercurial.selenic.com/bts/issue2137 |
10914
b7ca37b90762
revlog: fix lazyparser.__iter__() to return all revisions (issue2137)
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
2 |
12204
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
3 Setup: |
10914
b7ca37b90762
revlog: fix lazyparser.__iter__() to return all revisions (issue2137)
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
4 |
12328
b63f6422d2a7
tests: fix a bunch of pointless #s in unified tests
Matt Mackall <mpm@selenic.com>
parents:
12204
diff
changeset
|
5 create a little extension that has 3 side-effects: |
b63f6422d2a7
tests: fix a bunch of pointless #s in unified tests
Matt Mackall <mpm@selenic.com>
parents:
12204
diff
changeset
|
6 1) ensure changelog data is not inlined |
b63f6422d2a7
tests: fix a bunch of pointless #s in unified tests
Matt Mackall <mpm@selenic.com>
parents:
12204
diff
changeset
|
7 2) make revlog to use lazyparser |
b63f6422d2a7
tests: fix a bunch of pointless #s in unified tests
Matt Mackall <mpm@selenic.com>
parents:
12204
diff
changeset
|
8 3) test that repo.lookup() works |
b63f6422d2a7
tests: fix a bunch of pointless #s in unified tests
Matt Mackall <mpm@selenic.com>
parents:
12204
diff
changeset
|
9 1 and 2 are preconditions for the bug; 3 is the bug. |
10914
b7ca37b90762
revlog: fix lazyparser.__iter__() to return all revisions (issue2137)
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
10 |
12204
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
11 $ cat > commitwrapper.py <<EOF |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
12 > from mercurial import extensions, node, revlog |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
13 > |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
14 > def reposetup(ui, repo): |
17802
a421459b83c0
test: use proper subclassing in `test-issue2137.t`.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16913
diff
changeset
|
15 > class wraprepo(repo.__class__): |
a421459b83c0
test: use proper subclassing in `test-issue2137.t`.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16913
diff
changeset
|
16 > def commit(self, *args, **kwargs): |
a421459b83c0
test: use proper subclassing in `test-issue2137.t`.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16913
diff
changeset
|
17 > result = super(wraprepo, self).commit(*args, **kwargs) |
a421459b83c0
test: use proper subclassing in `test-issue2137.t`.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16913
diff
changeset
|
18 > tip1 = node.short(repo.changelog.tip()) |
a421459b83c0
test: use proper subclassing in `test-issue2137.t`.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16913
diff
changeset
|
19 > tip2 = node.short(repo.lookup(tip1)) |
a421459b83c0
test: use proper subclassing in `test-issue2137.t`.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16913
diff
changeset
|
20 > assert tip1 == tip2 |
a421459b83c0
test: use proper subclassing in `test-issue2137.t`.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16913
diff
changeset
|
21 > ui.write('new tip: %s\n' % tip1) |
a421459b83c0
test: use proper subclassing in `test-issue2137.t`.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16913
diff
changeset
|
22 > return result |
a421459b83c0
test: use proper subclassing in `test-issue2137.t`.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16913
diff
changeset
|
23 > repo.__class__ = wraprepo |
12204
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
24 > |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
25 > def extsetup(ui): |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
26 > revlog._maxinline = 8 # split out 00changelog.d early |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
27 > revlog._prereadsize = 8 # use revlog.lazyparser |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
28 > EOF |
10914
b7ca37b90762
revlog: fix lazyparser.__iter__() to return all revisions (issue2137)
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
29 |
12204
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
30 $ cat >> $HGRCPATH <<EOF |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
31 > [extensions] |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
32 > commitwrapper = `pwd`/commitwrapper.py |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
33 > EOF |
10914
b7ca37b90762
revlog: fix lazyparser.__iter__() to return all revisions (issue2137)
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
34 |
12204
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
35 $ hg init repo1 |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
36 $ cd repo1 |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
37 $ echo a > a |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
38 $ hg commit -A -m'add a with a long commit message to make the changelog a bit bigger' |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
39 adding a |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
40 new tip: 553596fad57b |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
41 |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
42 Test that new changesets are visible to repo.lookup(): |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
43 |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
44 $ echo a >> a |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
45 $ hg commit -m'one more commit to demonstrate the bug' |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
46 new tip: 799ae3599e0e |
10914
b7ca37b90762
revlog: fix lazyparser.__iter__() to return all revisions (issue2137)
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
47 |
12204
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
48 $ hg tip |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
49 changeset: 1:799ae3599e0e |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
50 tag: tip |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
51 user: test |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
52 date: Thu Jan 01 00:00:00 1970 +0000 |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
53 summary: one more commit to demonstrate the bug |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
11072
diff
changeset
|
54 |
16913
f2719b387380
tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents:
12328
diff
changeset
|
55 |
f2719b387380
tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents:
12328
diff
changeset
|
56 $ cd .. |