From b985bae7c432a2c8189585a17f54e538b4198297 Mon Sep 17 00:00:00 2001
From: Eric Harney <eharney@redhat.com>
Date: Fri, 28 Aug 2015 14:32:30 -0400
Subject: [PATCH] Detect addition of executable files

When running pep8 checks, fail if executable
files have accidentally been added.

Change-Id: Ia0efa629acf794f8e0e9b78de24b5385776c1e66
---
 run_tests.sh        |  1 +
 tools/check_exec.py | 42 ++++++++++++++++++++++++++++++++++++++++++
 tox.ini             |  1 +
 3 files changed, 44 insertions(+)
 create mode 100755 tools/check_exec.py

diff --git a/run_tests.sh b/run_tests.sh
index 7d5a32448..db32c57eb 100755
--- a/run_tests.sh
+++ b/run_tests.sh
@@ -185,6 +185,7 @@ function run_pep8 {
   warn_on_flake8_without_venv
   bash -c "${wrapper} flake8"
   ${wrapper} bash tools/config/check_uptodate.sh --checkonly
+  ${wrapper} tools/check_exec.py cinder || exit 1
 }
 
 
diff --git a/tools/check_exec.py b/tools/check_exec.py
new file mode 100755
index 000000000..d423f3d9a
--- /dev/null
+++ b/tools/check_exec.py
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+# Print a list and return with error if any executable files are found.
+# Compatible with both python 2 and 3.
+
+import os.path
+import stat
+import sys
+
+if len(sys.argv) < 2:
+    print("Usage: %s <directory>" % sys.argv[0])
+    sys.exit(1)
+
+directory = sys.argv[1]
+
+executable = []
+
+for root, mydir, myfile in os.walk(directory):
+    for f in myfile:
+        path = os.path.join(root, f)
+        mode = os.lstat(path).st_mode
+        if stat.S_IXUSR & mode:
+            executable.append(path)
+
+if executable:
+    print("Executable files found:")
+    for f in executable:
+        print(f)
+
+    sys.exit(1)
diff --git a/tox.ini b/tox.ini
index b026e036b..4eea5df4c 100644
--- a/tox.ini
+++ b/tox.ini
@@ -112,6 +112,7 @@ commands =
   # Check that .po and .pot files are valid:
   bash -c "find cinder -type f -regex '.*\.pot?' -print0|xargs -0 -n 1 msgfmt --check-format -o /dev/null"
   {toxinidir}/tools/config/check_uptodate.sh --checkonly
+  {toxinidir}/tools/check_exec.py {toxinidir}/cinder
 
 [testenv:pylint]
 deps = -r{toxinidir}/requirements.txt
-- 
2.45.2