summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-04-02 10:49:27 -0700
committerZac Medico <zmedico@gentoo.org>2010-04-02 10:49:27 -0700
commitc85836b52122679100c84410be14b36123e36c99 (patch)
treed48532adaebe15d78ab3a700d106f4eb45bc8366 /pym/portage
parentHandle missing $PORTDIR/metadata/herds.xml. Thanks to Arfrever for reporting. (diff)
downloadportage-idfetch-c85836b52122679100c84410be14b36123e36c99.tar.gz
portage-idfetch-c85836b52122679100c84410be14b36123e36c99.tar.bz2
portage-idfetch-c85836b52122679100c84410be14b36123e36c99.zip
Add a test which calls bash -n on all scripts with bash shebang.
Diffstat (limited to 'pym/portage')
-rw-r--r--pym/portage/tests/lint/test_bash_syntax.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/pym/portage/tests/lint/test_bash_syntax.py b/pym/portage/tests/lint/test_bash_syntax.py
new file mode 100644
index 00000000..aef8d74f
--- /dev/null
+++ b/pym/portage/tests/lint/test_bash_syntax.py
@@ -0,0 +1,42 @@
+# Copyright 2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+import stat
+
+from portage.const import BASH_BINARY, PORTAGE_BIN_PATH
+from portage.tests import TestCase
+from portage import os
+from portage import subprocess_getstatusoutput
+from portage import _encodings
+from portage import _shell_quote
+from portage import _unicode_decode, _unicode_encode
+
+class BashSyntaxTestCase(TestCase):
+
+ def testBashSyntax(self):
+ for parent, dirs, files in os.walk(PORTAGE_BIN_PATH):
+ parent = _unicode_decode(parent,
+ encoding=_encodings['fs'], errors='strict')
+ for x in files:
+ x = _unicode_decode(x,
+ encoding=_encodings['fs'], errors='strict')
+ ext = x.split('.')[-1]
+ if ext in ('.py', '.pyc', '.pyo'):
+ continue
+ x = os.path.join(parent, x)
+ st = os.lstat(x)
+ if not stat.S_ISREG(st.st_mode):
+ continue
+
+ # Check for bash shebang
+ f = open(_unicode_encode(x,
+ encoding=_encodings['fs'], errors='strict'), 'rb')
+ line = _unicode_decode(f.readline(),
+ encoding=_encodings['content'], errors='replace')
+ f.close()
+ if line[:2] == '#!' and \
+ 'bash' in line:
+ cmd = "%s -n %s" % (_shell_quote(BASH_BINARY), _shell_quote(x))
+ status, output = subprocess_getstatusoutput(cmd)
+ self.assertEqual(os.WIFEXITED(status) and \
+ os.WEXITSTATUS(status) == os.EX_OK, True, msg=output)