tests/test-import-eol.t
author Matt Harbison <matt_harbison@yahoo.com>
Fri, 12 Jun 2015 22:09:41 -0400
changeset 25568 c1ff82daed62
parent 22947 c63a09b6b337
child 32940 75be14993fda
permissions -rw-r--r--
ui: flush stderr after printing a non-chained exception for Windows There were consistent test failures in test-bad-extension.t, because Windows buffers stderr when redirected to a file (per the comment in ui.write_err()). That resulted in failures like this: --- c:/Users/Matt/Projects/hg/tests/test-bad-extension.t +++ c:/Users/Matt/Projects/hg/tests/test-bad-extension.t.err @@ -23,11 +23,11 @@ Traceback (most recent call last): Exception: bit bucket overflow *** failed to import extension badext2: No module named badext2 - Traceback (most recent call last): - ImportError: No module named badext2 hg help [-ec] [TOPIC] show help for a given topic or a help overview + Traceback (most recent call last): + ImportError: No module named badext2 show traceback for ImportError of hgext.name if debug is set (note that --debug option isn't applied yet when loading extensions) Instead of inserting another flush immediately after the print, to go along with the one recently added prior to the print (see 3ff4b07412ad), funnel the output through ui.write_err(). The flush prior to printing the traceback only mentions that stdout needs to be flushed, and only stderr needs to be flushed after printing the traceback. ui.write_err() does both for us without needing to redocument the quirky Windows behavior. It will also clear any progress bar.

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

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


Test different --eol values

  $ $PYTHON -c 'file("a", "wb").write("a\nbbb\ncc\n\nd\ne")'
  $ hg ci -Am adda
  adding .hgignore
  adding a
  $ python ../makepatch.py


invalid eol

  $ hg --config patch.eol='LFCR' import eol.diff
  applying eol.diff
  abort: unsupported line endings type: LFCR
  [255]
  $ hg revert -a


force LF

  $ hg --traceback --config patch.eol='LF' import eol.diff
  applying eol.diff
  $ cat a
  a
  yyyy
  cc
  
  d
  e (no-eol)
  $ hg st


force CRLF

  $ hg up -C 0
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg --traceback --config patch.eol='CRLF' import eol.diff
  applying eol.diff
  $ cat a
  a\r (esc)
  yyyy\r (esc)
  cc\r (esc)
  \r (esc)
  d\r (esc)
  e (no-eol)
  $ hg st


auto EOL on LF file

  $ hg up -C 0
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg --traceback --config patch.eol='auto' import eol.diff
  applying eol.diff
  $ cat a
  a
  yyyy
  cc
  
  d
  e (no-eol)
  $ hg st


auto EOL on CRLF file

  $ $PYTHON -c 'file("a", "wb").write("a\r\nbbb\r\ncc\r\n\r\nd\r\ne")'
  $ hg commit -m 'switch EOLs in a'
  $ hg --traceback --config patch.eol='auto' import eol.diff
  applying eol.diff
  $ cat a
  a\r (esc)
  yyyy\r (esc)
  cc\r (esc)
  \r (esc)
  d\r (esc)
  e (no-eol)
  $ hg st


auto EOL on new file or source without any EOL

  $ $PYTHON -c 'file("noeol", "wb").write("noeol")'
  $ hg add noeol
  $ hg commit -m 'add noeol'
  $ $PYTHON -c 'file("noeol", "wb").write("noeol\r\nnoeol\n")'
  $ $PYTHON -c 'file("neweol", "wb").write("neweol\nneweol\r\n")'
  $ hg add neweol
  $ hg diff --git > noeol.diff
  $ hg revert --no-backup noeol neweol
  $ rm neweol
  $ hg --traceback --config patch.eol='auto' import -m noeol noeol.diff
  applying noeol.diff
  $ cat noeol
  noeol\r (esc)
  noeol
  $ cat neweol
  neweol
  neweol\r (esc)
  $ hg st


Test --eol and binary patches

  $ $PYTHON -c 'file("b", "wb").write("a\x00\nb\r\nd")'
  $ hg ci -Am addb
  adding b
  $ $PYTHON -c 'file("b", "wb").write("a\x00\nc\r\nd")'
  $ hg diff --git > bin.diff
  $ hg revert --no-backup b

binary patch with --eol

  $ hg import --config patch.eol='CRLF' -m changeb bin.diff
  applying bin.diff
  $ cat b
  a\x00 (esc)
  c\r (esc)
  d (no-eol)
  $ hg st
  $ cd ..