meson: Setup pre commit hook and fix getpluginsdir for standalone case
authorThibault Saunier <thibault.saunier@osg.samsung.com>
Fri, 30 Sep 2016 14:35:41 +0000 (11:35 -0300)
committerThibault Saunier <thibault.saunier@osg.samsung.com>
Fri, 30 Sep 2016 16:31:16 +0000 (13:31 -0300)
hooks/multi-pre-commit.hook [moved from validate/multi-pre-commit.hook with 94% similarity]
hooks/pre-commit-python.hook [moved from validate/pre-commit-python.hook with 100% similarity]
hooks/pre-commit.hook [new file with mode: 0755]
meson.build
validate/tests/getpluginsdir

similarity index 94%
rename from validate/multi-pre-commit.hook
rename to hooks/multi-pre-commit.hook
index 4a1e8e0..98ae380 100755 (executable)
@@ -15,7 +15,7 @@
 # commit. They are executed in the order in which they are listed.
 ###########################################################
 
-HOOKS="validate/common/hooks/pre-commit.hook validate/pre-commit-python.hook"
+HOOKS="hooks/pre-commit.hook hooks/pre-commit-python.hook"
 
 # exit on error
 set -e
diff --git a/hooks/pre-commit.hook b/hooks/pre-commit.hook
new file mode 100755 (executable)
index 0000000..3c1062b
--- /dev/null
@@ -0,0 +1,83 @@
+#!/bin/sh
+#
+# Check that the code follows a consistant code style
+#
+
+# Check for existence of indent, and error out if not present.
+# On some *bsd systems the binary seems to be called gnunindent,
+# so check for that first.
+
+version=`gnuindent --version 2>/dev/null`
+if test "x$version" = "x"; then
+  version=`gindent --version 2>/dev/null`
+  if test "x$version" = "x"; then
+    version=`indent --version 2>/dev/null`
+    if test "x$version" = "x"; then
+      echo "GStreamer git pre-commit hook:"
+      echo "Did not find GNU indent, please install it before continuing."
+      exit 1
+    else
+      INDENT=indent
+    fi
+  else
+    INDENT=gindent
+  fi
+else
+  INDENT=gnuindent
+fi
+
+case `$INDENT --version` in
+  GNU*)
+      ;;
+  default)
+      echo "GStreamer git pre-commit hook:"
+      echo "Did not find GNU indent, please install it before continuing."
+      echo "(Found $INDENT, but it doesn't seem to be GNU indent)"
+      exit 1
+      ;;
+esac
+
+INDENT_PARAMETERS="--braces-on-if-line \
+       --case-brace-indentation0 \
+       --case-indentation2 \
+       --braces-after-struct-decl-line \
+       --line-length80 \
+       --no-tabs \
+       --cuddle-else \
+       --dont-line-up-parentheses \
+       --continuation-indentation4 \
+       --honour-newlines \
+       --tab-size8 \
+       --indent-level2 \
+       --leave-preprocessor-space"
+
+echo "--Checking style--"
+for file in `git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "\.c$"` ; do
+    # nf is the temporary checkout. This makes sure we check against the
+    # revision in the index (and not the checked out version).
+    nf=`git checkout-index --temp ${file} | cut -f 1`
+    newfile=`mktemp /tmp/${nf}.XXXXXX` || exit 1
+    $INDENT ${INDENT_PARAMETERS} \
+       $nf -o $newfile 2>> /dev/null
+    # FIXME: Call indent twice as it tends to do line-breaks
+    # different for every second call.
+    $INDENT ${INDENT_PARAMETERS} \
+        $newfile 2>> /dev/null
+    diff -u -p "${nf}" "${newfile}"
+    r=$?
+    rm "${newfile}"
+    rm "${nf}"
+    if [ $r != 0 ] ; then
+echo "================================================================================================="
+echo " Code style error in: $file                                                                      "
+echo "                                                                                                 "
+echo " Please fix before committing. Don't forget to run git add before trying to commit again.        "
+echo " If the whole file is to be committed, this should work (run from the top-level directory):      "
+echo "                                                                                                 "
+echo "   gst-indent $file; git add $file; git commit"
+echo "                                                                                                 "
+echo "================================================================================================="
+        exit 1
+    fi
+done
+echo "--Checking style pass--"
index e49d44c..6497c26 100644 (file)
@@ -54,3 +54,6 @@ gnome = import('gnome')
 gtkdoc = find_program('gtkdoc-scan', required : false)
 
 subdir('validate')
+
+python3 = find_program('python3')
+run_command(python3, '-c', 'import shutil; shutil.copy("hooks/multi-pre-commit.hook", ".git/hooks/pre-commit")')
index 98054b4..aa41ca8 100644 (file)
@@ -16,11 +16,12 @@ for i in range(0, len(args), 2):
         res += ':' + path
     else:
         try:
-            res += ':' + subprocess.check_output(['pkg-config',
-                                                  '--variable=pluginsdir',
-                                                  pkg_name]).decode()
-        except subprocess.CalledProcessError:
-            exit(1)
+            res += ':' + subprocess.check_output([
+                'pkg-config', '--variable=pluginsdir',
+                pkg_name]).decode().replace("\n", "")
+        except subprocess.CalledProcessError as e:
+            # Probably means there is no .pc file for the module
+            # and it should hopefully no be too bad.
+            pass
 
 print(res.strip(":"))
-