view tests/test-mq-missingfiles.t @ 44644:dbe9182c90f5

phabricator: combine commit messages into the review when folding commits No visible changes here, until an option to enable it is added to `phabsend`. This combines the Differential fields like Arcanist does, rather than simply concatenating the text blocks. Aside from populating everything properly in the web interface, Phabricator fails the review create/update if repeated fields are seen as would happen with simple concatenation. On the flip side, now that the Summary and Test Plan fields can contain data from multiple commits, we can't just join these fields together to determine if an amend is needed. If that were to happen, every single commit in the folded range would get amended with the combined commit message, which seems clearly wrong. Aside from making a minor assumption about the content of the Differential Revision field (it seems they allow some minor variances with spacing), this means that for folded reviews, you can't post it, go to the web page add a missing Test Plan, and then get it added to the commit message by re-posting it. I don't think that's a big deal. Differential Revision: https://phab.mercurial-scm.org/D8309
author Matt Harbison <matt_harbison@yahoo.com>
date Fri, 06 Mar 2020 17:03:04 -0500
parents c70bdd222dcd
children fe3303436b79
line wrap: on
line source


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
  > if sys.version_info[0] >= 3:
  >     encode = lambda x: x.encode('utf-8').decode('unicode_escape').encode('utf-8')
  > else:
  >     encode = lambda x: x.decode('string_escape')
  > path = sys.argv[1]
  > args = sys.argv[2:]
  > assert (len(args) % 2) == 0
  > 
  > f = open(path, 'wb')
  > for i in range(len(args) // 2):
  >    count, s = args[2 * i:2 * i + 2]
  >    count = int(count)
  >    s = encode(s)
  >    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
  (use '--prefix' to apply patch relative to the current directory)
  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 directory
  errors during apply, please fix and qrefresh 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 directory
  errors during apply, please fix and qrefresh 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
  (use '--prefix' to apply patch relative to the current directory)
  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 directory
  errors during apply, please fix and qrefresh 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 ..