Patchwork D7374: hghave: add a check for the `xz` compression utility

login
register
mail settings
Submitter phabricator
Date Nov. 13, 2019, 2:44 p.m.
Message ID <differential-rev-PHID-DREV-nrisag4wrfsjkkd2fhyc-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/43158/
State Superseded
Headers show

Comments

phabricator - Nov. 13, 2019, 2:44 p.m.
mharbison72 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This isn't install by default on Mac, which causes a test failure.  The logic
  for avoiding the command is a little goofy, but nested `#if` isn't supported,
  and it still seems worth running the hg command to see if anything explodes.
  
  With this, the py3 tests run (almost) cleanly on 10.14.6:
  
  1. Ran 835 tests, 58 skipped, 1 failed.
  
  Alas, the mac-packaging test is skipped because it's slow.  The failure here is
  in test-releasenotes-merging.t, complaining about not being able to import the
  `fuzzywuzzy` module.  I have it installed on py3 (thus the test isn't skipped),
  but not on py2.  So there must be some unintended cross pollination here when
  running `hg` commands.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D7374

AFFECTED FILES
  tests/hghave.py
  tests/test-archive.t

CHANGE DETAILS




To: mharbison72, #hg-reviewers
Cc: mercurial-devel
phabricator - Nov. 19, 2019, 3:41 a.m.
This revision is now accepted and ready to land.
indygreg added a comment.
indygreg accepted this revision.


  Regarding nested conditionals, you could do something like `#if py3 xz`. But then we wouldn't have test coverage of Mercurial itself generating lzma, which is built in to Python 3. So this suggestion is not appropriate here: the patch as authored is great!

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D7374/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D7374

To: mharbison72, #hg-reviewers, indygreg
Cc: indygreg, mercurial-devel

Patch

diff --git a/tests/test-archive.t b/tests/test-archive.t
--- a/tests/test-archive.t
+++ b/tests/test-archive.t
@@ -574,8 +574,8 @@ 
 
 #if py3
   $ hg archive ../archive.txz
-  $ xz -l ../archive.txz | head -n1
-  Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename
+  $ which xz >/dev/null && xz -l ../archive.txz | head -n1 || true
+  Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename (xz !)
   $ rm -f ../archive.txz
 #else
   $ hg archive ../archive.txz
diff --git a/tests/hghave.py b/tests/hghave.py
--- a/tests/hghave.py
+++ b/tests/hghave.py
@@ -673,6 +673,13 @@ 
         return False
 
 
+@check("xz", "xz compression utility")
+def has_xz():
+    # When Windows invokes a subprocess in shell mode, it uses `cmd.exe`, which
+    # only knows `where`, not `which`.  So invoke MSYS shell explicitly.
+    return matchoutput("sh -c 'test -x \"`which xz`\"'", b'')
+
+
 @check("msys", "Windows with MSYS")
 def has_msys():
     return os.getenv('MSYSTEM')