TODO: tests: add test for bug #1283103 -- selinux mount vs security xattrs
[obnox/glusterfs.git] / rfc.sh
diff --git a/rfc.sh b/rfc.sh
index e6cce0d2cfcb06287621bc234aa7aa435498162f..287768eae8b9cf2466ce0dec3a9f9b2db2822d77 100755 (executable)
--- a/rfc.sh
+++ b/rfc.sh
@@ -1,9 +1,11 @@
 #!/bin/sh -e
-
+# Since we run with '#!/bin/sh -e'
+#   '$? != 0' will force an exit,
+# i.e. where we are interested in the result of a command,
+# we have to run the command in an if-statement.
 
 branch="master";
 
-
 set_hooks_commit_msg()
 {
     f=".git/hooks/commit-msg";
@@ -16,6 +18,9 @@ set_hooks_commit_msg()
     curl -o $f $u || wget -O $f $u;
 
     chmod +x .git/hooks/commit-msg;
+
+    # Let the 'Change-Id: ' header get assigned on first run of rfc.sh
+    GIT_EDITOR=true git commit --amend;
 }
 
 
@@ -31,8 +36,6 @@ is_num()
 
 rebase_changes()
 {
-    git fetch;
-
     GIT_EDITOR=$0 git rebase -i origin/$branch;
 }
 
@@ -80,14 +83,55 @@ assert_diverge()
 }
 
 
+check_patches_for_coding_style()
+{
+    git fetch origin;
+
+    check_patch_script=./extras/checkpatch.pl
+    if [ ! -e ./extras/checkpatch.pl ] ; then
+        echo "checkpatch is not executable .. abort"
+        exit 1
+    fi
+
+    # The URL of our Gerrit server
+    export GERRIT_URL="review.gluster.org"
+
+    echo "Running coding guidelines check ..."
+    head=$(git rev-parse --abbrev-ref HEAD)
+    # Kludge: "1>&2 && echo $? || echo $?" is to get around
+    #         "-e" from script invocation
+    RES=$(git format-patch --stdout origin/${branch}..${head} \
+          | ${check_patch_script} --terse - 1>&2 && echo $? || echo $?)
+    if [ "$RES" -eq 1 ] ; then
+        echo "Errors caught, get details by:"
+        echo "  git format-patch --stdout  origin/${branch}..${head} \\"
+        echo "  | ./extras/checkpatch.pl --gerrit-url ${GERRIT_URL} -"
+        echo "and correct errors"
+        exit 1
+    elif [ "$RES" -eq 2 ] ; then
+        echo "Warnings caught, get details by:"
+        echo "  git format-patch --stdout  origin/${branch}..${head} \\"
+        echo "  | ./extras/checkpatch.pl --gerrit-url ${GERRIT_URL} -"
+        echo -n "Do you want to continue anyway [no/yes]: "
+        read yesno
+        if [ "${yesno}" != "yes" ] ; then
+            echo "Aborting..."
+            exit 1
+        fi
+    fi
+}
+
+
 main()
 {
+    set_hooks_commit_msg;
+
     if [ -e "$1" ]; then
         editor_mode "$@";
         return;
     fi
 
-    set_hooks_commit_msg;
+    check_patches_for_coding_style;
 
     rebase_changes;