tests/test-mq-eol.t
author Augie Fackler <augie@google.com>
Wed, 03 Apr 2019 11:46:29 -0400
changeset 42054 399ed3e86a49
parent 41707 140b542b0e59
permissions -rw-r--r--
py2exe: add workaround to allow bundling of hgext3rd.* extensions py2exe doesn't know how to handle namespace packages *at all*, so it treats them like normal packages. As a result, if we try and bundle hgext3rd.evolve in a py2exe build, it won't work if we install evolve into the virtualenv. In order to work around this, tortoisehg installs hgext3rd.evolve etc into its staged hg directory, since it doesn't use a virtualenv. As a workaround for us, we'll just allow any extra packages users want bundled are part of hg during the pseudo-install phase that py2exe uses. I'm not happy about this, but it *works*. As a sample of how you'd make an MSI with evolve bundled: import os import shutil import subprocess import tempfile def stage_evolve(version): """Stage evolve for inclusion in py2exe binary.""" with tempfile.TemporaryDirectory() as temp: evolve = os.path.join(temp, "evolve") subprocess.check_call([ "hg.exe", "clone", "https://www.mercurial-scm.org/repo/evolve/", "--update", version, evolve, ]) dest = os.path.join('..', 'hgext3rd', 'evolve') if os.path.exists(dest): shutil.rmtree(dest) shutil.copytree(os.path.join(evolve, "hgext3rd", "evolve"), dest) def main(): stage_evolve('tip') print("\0") print("hgext3rd") print("hgext3rd.evolve") print("hgext3rd.evolve.hack") print("hgext3rd.evolve.thirdparty") if __name__ == "__main__": main() is a script you can pass to the wix/build.py as --extra-packages-script, and the resulting .msi will have an hg binary with evolve baked in. users will still need to enable evolve in their hgrc, so you'd probably also want to bundle configs in your msi for an enterprise environment, but that's already easy to do with the support for extra features and wxs files in the wix build process. Differential Revision: https://phab.mercurial-scm.org/D6189


Test interactions between mq and patch.eol


  $ cat <<EOF >> $HGRCPATH
  > [extensions]
  > mq =
  > [diff]
  > nodates = 1
  > EOF

  $ cat > makepatch.py <<EOF
  > f = open('eol.diff', 'wb')
  > w = f.write
  > w(b'test message\n')
  > w(b'diff --git a/a b/a\n')
  > w(b'--- a/a\n')
  > w(b'+++ b/a\n')
  > w(b'@@ -1,5 +1,5 @@\n')
  > w(b' a\n')
  > w(b'-b\r\n')
  > w(b'+y\r\n')
  > w(b' c\r\n')
  > w(b' d\n')
  > w(b'-e\n')
  > w(b'\\\\ No newline at end of file\n')
  > w(b'+z\r\n')
  > w(b'\\\\ No newline at end of file\r\n')
  > EOF

  $ cat > cateol.py <<EOF
  > import sys
  > try:
  >     stdout = sys.stdout.buffer
  > except AttributeError:
  >     stdout = sys.stdout
  > for line in open(sys.argv[1], 'rb'):
  >     line = line.replace(b'\r', b'<CR>')
  >     line = line.replace(b'\n', b'<LF>')
  >     stdout.write(line + b'\n')
  > EOF

  $ hg init repo
  $ cd repo
  $ echo '\.diff' > .hgignore
  $ echo '\.rej' >> .hgignore


Test different --eol values

  $ "$PYTHON" -c 'open("a", "wb").write(b"a\nb\nc\nd\ne")'
  $ hg ci -Am adda
  adding .hgignore
  adding a
  $ "$PYTHON" ../makepatch.py
  $ hg qimport eol.diff
  adding eol.diff to series file

should fail in strict mode

  $ hg qpush
  applying eol.diff
  patching file a
  Hunk #1 FAILED at 0
  1 out of 1 hunks FAILED -- saving rejects to file a.rej
  patch failed, unable to continue (try -v)
  patch failed, rejects left in working directory
  errors during apply, please fix and qrefresh eol.diff
  [2]
  $ hg qpop
  popping eol.diff
  patch queue now empty

invalid eol

  $ hg --config patch.eol='LFCR' qpush
  applying eol.diff
  patch failed, unable to continue (try -v)
  patch failed, rejects left in working directory
  errors during apply, please fix and qrefresh eol.diff
  [2]
  $ hg qpop
  popping eol.diff
  patch queue now empty

force LF

  $ hg --config patch.eol='CRLF' qpush
  applying eol.diff
  now at: eol.diff
  $ hg qrefresh
  $ "$PYTHON" ../cateol.py .hg/patches/eol.diff
  # HG changeset patch<LF>
  # Parent  0d0bf99a8b7a3842c6f8ef09e34f69156c4bd9d0<LF>
  test message<LF>
  <LF>
  diff -r 0d0bf99a8b7a a<LF>
  --- a/a<LF>
  +++ b/a<LF>
  @@ -1,5 +1,5 @@<LF>
  -a<LF>
  -b<LF>
  -c<LF>
  -d<LF>
  -e<LF>
  \ No newline at end of file<LF>
  +a<CR><LF>
  +y<CR><LF>
  +c<CR><LF>
  +d<CR><LF>
  +z<LF>
  \ No newline at end of file<LF>
  $ "$PYTHON" ../cateol.py a
  a<CR><LF>
  y<CR><LF>
  c<CR><LF>
  d<CR><LF>
  z
  $ hg qpop
  popping eol.diff
  patch queue now empty

push again forcing LF and compare revisions

  $ hg --config patch.eol='CRLF' qpush
  applying eol.diff
  now at: eol.diff
  $ "$PYTHON" ../cateol.py a
  a<CR><LF>
  y<CR><LF>
  c<CR><LF>
  d<CR><LF>
  z
  $ hg qpop
  popping eol.diff
  patch queue now empty

push again without LF and compare revisions

  $ hg qpush
  applying eol.diff
  now at: eol.diff
  $ "$PYTHON" ../cateol.py a
  a<CR><LF>
  y<CR><LF>
  c<CR><LF>
  d<CR><LF>
  z
  $ hg qpop
  popping eol.diff
  patch queue now empty
  $ cd ..


Test .rej file EOL are left unchanged

  $ hg init testeol
  $ cd testeol
  $ "$PYTHON" -c "open('a', 'wb').write(b'1\r\n2\r\n3\r\n4')"
  $ hg ci -Am adda
  adding a
  $ "$PYTHON" -c "open('a', 'wb').write(b'1\r\n2\r\n33\r\n4')"
  $ hg qnew patch1
  $ hg qpop
  popping patch1
  patch queue now empty
  $ "$PYTHON" -c "open('a', 'wb').write(b'1\r\n22\r\n33\r\n4')"
  $ hg ci -m changea

  $ hg --config 'patch.eol=LF' qpush
  applying patch1
  patching file a
  Hunk #1 FAILED at 0
  1 out of 1 hunks FAILED -- saving rejects to file a.rej
  patch failed, unable to continue (try -v)
  patch failed, rejects left in working directory
  errors during apply, please fix and qrefresh patch1
  [2]
  $ hg qpop
  popping patch1
  patch queue now empty
  $ cat a.rej
  --- a
  +++ a
  @@ -1,4 +1,4 @@
   1\r (esc)
   2\r (esc)
  -3\r (esc)
  +33\r (esc)
   4
  \ No newline at end of file

  $ hg --config 'patch.eol=auto' qpush
  applying patch1
  patching file a
  Hunk #1 FAILED at 0
  1 out of 1 hunks FAILED -- saving rejects to file a.rej
  patch failed, unable to continue (try -v)
  patch failed, rejects left in working directory
  errors during apply, please fix and qrefresh patch1
  [2]
  $ hg qpop
  popping patch1
  patch queue now empty
  $ cat a.rej
  --- a
  +++ a
  @@ -1,4 +1,4 @@
   1\r (esc)
   2\r (esc)
  -3\r (esc)
  +33\r (esc)
   4
  \ No newline at end of file
  $ cd ..