tests/test-update-issue1456.t
author Bryan O'Sullivan <bryano@fb.com>
Tue, 18 Sep 2012 15:42:19 -0700
changeset 17616 9535a0dc41f2
parent 16913 f2719b387380
child 18334 44bda93df90e
permissions -rw-r--r--
store: implement fncache basic path encoding in C (This is not yet enabled; it will be turned on in a followup patch.) The path encoding performed by fncache is complex and (perhaps surprisingly) slow enough to negatively affect the overall performance of Mercurial. For a short path (< 120 bytes), the Python code can be reduced to a fairly tractable state machine that either determines that nothing needs to be done in a single pass, or performs the encoding in a second pass. For longer paths, we avoid the more complicated hashed encoding scheme for now, and fall back to Python. Raw performance: I measured in a repo containing 150,000 files in its tip manifest, with a median path name length of 57 bytes, and 95th percentile of 96 bytes. In this repo, the Python code takes 3.1 seconds to encode all path names, while the hybrid C-and-Python code (called from Python) takes 0.21 seconds, for a speedup of about 14. Across several other large repositories, I've measured the speedup from the C code at between 26x and 40x. For path names above 120 bytes where we must fall back to Python for hashed encoding, the speedup is about 1.7x. Thus absolute performance will depend strongly on the characteristics of a particular repository.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15442
db0340f4b507 tests: use 'hghave execbit' for tests that manipulate x bit in file system
Mads Kiilerich <mads@kiilerich.com>
parents: 12316
diff changeset
     1
  $ "$TESTDIR/hghave" execbit || exit 80
db0340f4b507 tests: use 'hghave execbit' for tests that manipulate x bit in file system
Mads Kiilerich <mads@kiilerich.com>
parents: 12316
diff changeset
     2
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
     3
  $ rm -rf a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
     4
  $ hg init a
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
     5
  $ cd a
7569
89207edf3973 correctly update dirstate after update+mode change (issue1456)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
     6
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
     7
  $ echo foo > foo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
     8
  $ hg ci -qAm0
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
     9
  $ chmod +x foo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    10
  $ hg ci -m1
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    11
  $ hg co -q 0
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    12
  $ echo dirty > foo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    13
  $ hg up -c
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    14
  abort: uncommitted local changes
12316
4134686b83e1 tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents: 12279
diff changeset
    15
  [255]
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    16
  $ hg up -q
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    17
  $ cat foo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    18
  dirty
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    19
  $ hg st -A
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    20
  M foo
7569
89207edf3973 correctly update dirstate after update+mode change (issue1456)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    21
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    22
Validate update of standalone execute bit change:
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    23
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    24
  $ hg up -C 0
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    25
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    26
  $ chmod -x foo
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    27
  $ hg ci -m removeexec
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    28
  nothing changed
12316
4134686b83e1 tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents: 12279
diff changeset
    29
  [1]
12279
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    30
  $ hg up -C 0
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    31
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    32
  $ hg up
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    33
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    34
  $ hg st
28e2e3804f2e combine tests
Adrian Buehlmann <adrian@cadifra.com>
parents: 8855
diff changeset
    35
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 15442
diff changeset
    36
  $ cd ..