tests/test-mq-missingfiles.t
author Mads Kiilerich <madski@unity3d.com>
Wed, 31 Dec 2014 14:45:02 +0100
branchstable
changeset 23694 97eb62b0f4a9
parent 16813 6d42c797ca6e
child 24365 f1eaf03dd608
permissions -rw-r--r--
tests: add test coverage for lfdirstate invalidation of linear update f72d73937853 introduced a significant performance regression: All largefiles are marked 'normallookup' in lfdirstate by linear (or noop) updates and has to be rehashed by the next command. To avoid such regressions, keep an eye on the dirstate content after a plain 'hg up'.


Issue835: qpush fails immediately when patching a missing file, but
remaining added files are still created empty which will trick a
future qrefresh.

  $ cat > writelines.py <<EOF
  > import sys
  > path = sys.argv[1]
  > args = sys.argv[2:]
  > assert (len(args) % 2) == 0
  > 
  > f = file(path, 'wb')
  > for i in xrange(len(args)/2):
  >    count, s = args[2*i:2*i+2]
  >    count = int(count)
  >    s = s.decode('string_escape')
  >    f.write(s*count)
  > f.close()
  > EOF

  $ echo "[extensions]" >> $HGRCPATH
  $ echo "mq=" >> $HGRCPATH

  $ hg init normal
  $ cd normal
  $ python ../writelines.py b 10 'a\n'
  $ hg ci -Am addb
  adding b
  $ echo a > a
  $ python ../writelines.py b 2 'b\n' 10 'a\n' 2 'c\n'
  $ echo c > c
  $ hg add a c
  $ hg qnew -f changeb
  $ hg qpop
  popping changeb
  patch queue now empty
  $ hg rm b
  $ hg ci -Am rmb

Push patch with missing target:

  $ hg qpush
  applying changeb
  unable to find 'b' for patching
  2 out of 2 hunks FAILED -- saving rejects to file b.rej
  patch failed, unable to continue (try -v)
  patch failed, rejects left in working dir
  errors during apply, please fix and refresh changeb
  [2]

Display added files:

  $ cat a
  a
  $ cat c
  c

Display rejections:

  $ cat b.rej
  --- b
  +++ b
  @@ -1,3 +1,5 @@
  +b
  +b
   a
   a
   a
  @@ -8,3 +10,5 @@
   a
   a
   a
  +c
  +c

Test missing renamed file

  $ hg qpop
  popping changeb
  patch queue now empty
  $ hg up -qC 0
  $ echo a > a
  $ hg mv b bb
  $ python ../writelines.py bb 2 'b\n' 10 'a\n' 2 'c\n'
  $ echo c > c
  $ hg add a c
  $ hg qnew changebb
  $ hg qpop
  popping changebb
  patch queue now empty
  $ hg up -qC 1
  $ hg qpush
  applying changebb
  patching file bb
  Hunk #1 FAILED at 0
  Hunk #2 FAILED at 7
  2 out of 2 hunks FAILED -- saving rejects to file bb.rej
  b not tracked!
  patch failed, unable to continue (try -v)
  patch failed, rejects left in working dir
  errors during apply, please fix and refresh changebb
  [2]
  $ cat a
  a
  $ cat c
  c
  $ cat bb.rej
  --- bb
  +++ bb
  @@ -1,3 +1,5 @@
  +b
  +b
   a
   a
   a
  @@ -8,3 +10,5 @@
   a
   a
   a
  +c
  +c

  $ cd ..


  $ echo "[diff]" >> $HGRCPATH
  $ echo "git=1" >> $HGRCPATH

  $ hg init git
  $ cd git
  $ python ../writelines.py b 1 '\x00'
  $ hg ci -Am addb
  adding b
  $ echo a > a
  $ python ../writelines.py b 1 '\x01' 1 '\x00'
  $ echo c > c
  $ hg add a c
  $ hg qnew -f changeb
  $ hg qpop
  popping changeb
  patch queue now empty
  $ hg rm b
  $ hg ci -Am rmb

Push git patch with missing target:

  $ hg qpush
  applying changeb
  unable to find 'b' for patching
  1 out of 1 hunks FAILED -- saving rejects to file b.rej
  patch failed, unable to continue (try -v)
  patch failed, rejects left in working dir
  errors during apply, please fix and refresh changeb
  [2]
  $ hg st
  ? b.rej

Display added files:

  $ cat a
  a
  $ cat c
  c

Display rejections:

  $ cat b.rej
  --- b
  +++ b
  GIT binary patch
  literal 2
  Jc${No0000400IC2
  
  $ cd ..

Test push creating directory during git copy or rename:

  $ hg init missingdir
  $ cd missingdir
  $ echo a > a
  $ hg ci -Am adda
  adding a
  $ mkdir d
  $ hg copy a d/a2
  $ hg mv a d/a
  $ hg qnew -g -f patch
  $ hg qpop
  popping patch
  patch queue now empty
  $ hg qpush
  applying patch
  now at: patch

  $ cd ..