Hi,

On 14-12-16 22:05, David Sommerseth wrote:
> This script will run all files related to the currently checked out
> git branch through uncrustify using a standardized style configuration.
> 
> Due to a bug in uncrustify 0.64, it is needed to add a special treatment
> to one of the files at the moment.  So this both pre- and post-patched
> before/after uncrustify is run.  This is to simply to assure that all
> file processing will happen consistently each time.
> 
> Also added doc/doxygen/doc_key_generation.h to an ignore list, as
> it carries some specific Doxygen formatting we should be careful with.
> This file is anyhow not so critical and can be managed manually.
> 
> The src/compat/compat-lz4.[ch] files are also not touched, as they
> are based on upstream formatting.  This makes it easier to update
> to a newer LZ4 version later on and even see what the differences
> are.
> 
> v2 - Include updated config from CodeStyle wiki page
>      Remove line lenght restriction for The Great Reformatting
>      Update the script with improvements by krzee
> 
> v3 - Update with a fixed config from the CodeStyle wiki page
>      Corrected a typo in the commit message (0.63->0.64)
>      Minor changes to the reformat script (no pushd/popd,
>      some new lines moved around)
> 
> Signed-off-by: David Sommerseth <dav...@openvpn.net>
> ---
>  dev-tools/reformat-all.sh                          | 136 
> +++++++++++++++++++++
>  .../after_include_openvpn-plugin.h.in.patch        |  13 ++
>  .../before_include_openvpn-plugin.h.in.patch       |  13 ++
>  dev-tools/special-files.lst                        |   4 +
>  dev-tools/uncrustify.conf                          |  65 ++++++++++
>  5 files changed, 231 insertions(+)
>  create mode 100755 dev-tools/reformat-all.sh
>  create mode 100644 
> dev-tools/reformat-patches/after_include_openvpn-plugin.h.in.patch
>  create mode 100644 
> dev-tools/reformat-patches/before_include_openvpn-plugin.h.in.patch
>  create mode 100644 dev-tools/special-files.lst
>  create mode 100644 dev-tools/uncrustify.conf
> 
> diff --git a/dev-tools/reformat-all.sh b/dev-tools/reformat-all.sh
> new file mode 100755
> index 0000000..ac5cf6f
> --- /dev/null
> +++ b/dev-tools/reformat-all.sh
> @@ -0,0 +1,136 @@
> +#!/bin/bash

Just tested, works fine when using /bin/sh too (on Ubuntu, so dash).

> +# reformat-all.sh - Reformat all git files in the checked out
> +#                   git branch using uncrustify.
> +#
> +# Copyright (C) 2016 - David Sommerseth <dav...@openvpn.net>
> +#
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License
> +# as published by the Free Software Foundation; either version 2
> +# of the License.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
> USA.
> +#
> +
> +tstamp="$(date +%Y%m%d-%H%M%S)"
> +files="$(pwd)/reformat-all_files-$tstamp.lst"
> +log="$(pwd)/reformat-all_log-$tstamp.txt"
> +
> +srcroot="$(git rev-parse --show-toplevel)"
> +cfg="$srcroot/dev-tools/uncrustify.conf"
> +specialfiles="$srcroot/dev-tools/special-files.lst"
> +
> +export gitfiles=0
> +export procfiles=0
> +
> +# Go to the root of the source tree
> +cd "$srcroot"
> +
> +{
> +    echo -n "** Starting $0: "
> +    date
> +
> +    # Find all C source/header files
> +    git ls-files | grep -E ".*\.[ch](\.in$|$)" > "${files}.git"
> +
> +    # Manage files which needs special treatment
> +    awk -F\# '{gsub("\n| ", "", $1); print $1}' "$specialfiles" > 
> "${files}.sp"
> +    while read srcfile
> +    do
> +        res=$(grep "$srcfile" "${files}.sp" 2>/dev/null)
> +        if [ $? -ne 0 ]; then
> +            # If grep didn't find the file among special files,
> +            # process it normally
> +            echo "$srcfile" >> "$files"
> +        else
> +            mode=$(echo "$res" | cut -d:  -f1)
> +            case "$mode" in
> +                E)
> +                    echo "** INFO **  Excluding '$srcfile'"
> +                    ;;
> +                P)
> +                    echo "** INFO **  Pre-patching '$srcfile'"
> +                    
> patchfile="${srcroot}"/dev-tools/reformat-patches/before_$(echo "$srcfile" | 
> tr "/" "_").patch
> +                    if [ -r "$patchfile" ]; then
> +                        git apply "$patchfile"
> +                        if [ $? -ne 0 ]; then
> +                            echo "** ERROR **  Failed to apply pre-patch 
> file: $patchfile"
> +                            exit 2
> +                        fi
> +                    else
> +                        echo "** WARN ** Pre-patch file for $srcfile is 
> missing: $patchfile"
> +                    fi
> +                    echo "$srcfile" >> "${files}.postpatch"
> +                    echo "$srcfile" >> "$files"
> +                    ;;
> +                *)
> +                    echo "** WARN ** Unknown mode '$mode' for file 
> '$srcfile'"
> +                    ;;
> +            esac
> +        fi
> +    done < "${files}.git"
> +    rm -f "${files}.git" "${files}.sp"
> +
> +    # Kick off uncrustify
> +    echo
> +    echo "** INFO ** Running: uncrustify -c $cfg --no-backup -l C -p 
> debug.uncr -F $files"
> +    uncrustify -c "$cfg" --no-backup -l C -p debug.uncr -F "$files" 2>&1
> +    res=$?
> +    echo "** INFO ** Uncrustify completed (exit code $res)"
> +} | tee "${log}-1"  # Log needs to be closed here, to be processed in next 
> block
> +
> +{
> +    # Check the results
> +    gitfiles=$(wc -l "$files" | cut -d\  -f1)
> +    procfiles=$(grep "Parsing: " "${log}-1" | wc -l)
> +    echo
> +    echo "C source/header files checked into git: $gitfiles"
> +    echo "Files processed by uncrustify:          $procfiles"
> +    echo
> +
> +    # Post-Patch files modified after we uncrustify have adjusted them
> +    if [ -r "${files}.postpatch" ]; then
> +        while read srcfile;
> +        do
> +            patchfile="${srcroot}"/dev-tools/reformat-patches/after_$(echo 
> "$srcfile" | tr "/" "_").patch
> +            if [ -r "$patchfile" ]; then
> +                echo "** INFO **  Post-patching '$srcfile'"
> +                git apply "$patchfile"
> +                if [ $? -ne 0 ]; then
> +                    echo "** WARN ** Failed to apply $patchfile"
> +                fi
> +            else
> +                echo "** WARN ** Post-patch file for $srcfile is missing: 
> $patchfile"
> +            fi
> +        done < "${files}.postpatch"
> +        rm -f "${files}.postpatch"
> +    fi
> +} | tee "${log}-2" # Log needs to be closed here, to be processed in next 
> block
> +
> +cat "${log}-1" "${log}-2" > "$log"
> +
> +{
> +    ec=1
> +    echo
> +    if [ "$gitfiles" -eq "$procfiles" ]; then
> +        echo "Reformatting completed successfully"
> +        ec=0
> +    else
> +        last=$(tail -n1 "${log}-1")
> +        echo "** ERROR ** Reformating failed to process all files."
> +        echo "            uncrustify exit code: $res"
> +        echo "            Last log line: $last"
> +        echo
> +    fi
> +    rm -f "${log}-1" "${log}-2"
> +} | tee -a "$log"
> +rm -f "${files}"
> +
> +exit $ec
> diff --git 
> a/dev-tools/reformat-patches/after_include_openvpn-plugin.h.in.patch 
> b/dev-tools/reformat-patches/after_include_openvpn-plugin.h.in.patch
> new file mode 100644
> index 0000000..4faa4d8
> --- /dev/null
> +++ b/dev-tools/reformat-patches/after_include_openvpn-plugin.h.in.patch
> @@ -0,0 +1,13 @@
> +diff --git a/include/openvpn-plugin.h.in b/include/openvpn-plugin.h.in
> +index 05bffab..05b4b6a 100644
> +--- a/include/openvpn-plugin.h.in
> ++++ b/include/openvpn-plugin.h.in
> +@@ -169,7 +169,7 @@ typedef void *openvpn_plugin_handle_t;
> + /*
> +  * We are compiling OpenVPN.
> +  */
> +-/* #define OPENVPN_PLUGIN_DEF        typedef */
> ++#define OPENVPN_PLUGIN_DEF        typedef
> + #define OPENVPN_PLUGIN_FUNC(name) (*name)
> + 
> + #else  /* ifdef OPENVPN_PLUGIN_H */
> diff --git 
> a/dev-tools/reformat-patches/before_include_openvpn-plugin.h.in.patch 
> b/dev-tools/reformat-patches/before_include_openvpn-plugin.h.in.patch
> new file mode 100644
> index 0000000..7c7249d
> --- /dev/null
> +++ b/dev-tools/reformat-patches/before_include_openvpn-plugin.h.in.patch
> @@ -0,0 +1,13 @@
> +diff --git a/include/openvpn-plugin.h.in b/include/openvpn-plugin.h.in
> +index 34ad18b..f4c5472 100644
> +--- a/include/openvpn-plugin.h.in
> ++++ b/include/openvpn-plugin.h.in
> +@@ -169,7 +169,7 @@ typedef void *openvpn_plugin_handle_t;
> + /*
> +  * We are compiling OpenVPN.
> +  */
> +-#define OPENVPN_PLUGIN_DEF        typedef
> ++// #define OPENVPN_PLUGIN_DEF        typedef
> + #define OPENVPN_PLUGIN_FUNC(name) (*name)
> + 
> + #else
> diff --git a/dev-tools/special-files.lst b/dev-tools/special-files.lst
> new file mode 100644
> index 0000000..f3f77ea
> --- /dev/null
> +++ b/dev-tools/special-files.lst
> @@ -0,0 +1,4 @@
> +E:doc/doxygen/doc_key_generation.h     # @verbatim section gets mistreated, 
> exclude it
> +E:src/compat/compat-lz4.c              # Preserve LZ4 upstream formatting
> +E:src/compat/compat-lz4.h              # Preserve LZ4 upstream formatting
> +P:include/openvpn-plugin.h.in          # uncrustify segfaults, patch it 
> before+after
> diff --git a/dev-tools/uncrustify.conf b/dev-tools/uncrustify.conf
> new file mode 100644
> index 0000000..95e0b2a
> --- /dev/null
> +++ b/dev-tools/uncrustify.conf
> @@ -0,0 +1,65 @@
> +# Use Allman-style
> +indent_columns=4
> +indent_braces=false
> +indent_else_if=false
> +indent_switch_case=4
> +indent_label=1
> +nl_if_brace=add
> +nl_brace_else=add
> +nl_elseif_brace=add
> +nl_else_brace=add
> +nl_else_if=remove
> +sp_func_proto_paren=Remove
> +sp_func_def_paren=Remove
> +sp_func_call_paren=Remove
> +sp_sizeof_paren=Remove
> +
> +# No tabs, spaces only
> +indent_with_tabs=0
> +align_with_tabs=false
> +cmt_convert_tab_to_spaces=true
> +
> +# Do not put spaces between the # and preprocessor statements
> +pp_space=remove
> +
> +# Various whitespace fiddling
> +sp_assign=add
> +sp_before_sparen=add
> +sp_inside_sparen=remove
> +sp_cond_colon=add
> +sp_cond_question=add
> +sp_bool=add
> +sp_else_brace=add
> +sp_brace_else=add
> +pos_arith=Lead
> +pos_bool=Lead
> +nl_func_type_name=add
> +nl_before_case=true
> +nl_assign_leave_one_liners=true
> +nl_enum_leave_one_liners=true
> +nl_brace_fparen=add
> +nl_max=4
> +nl_after_func_proto=2
> +
> +# Always use scoping braces for conditionals
> +mod_full_brace_if=add
> +mod_full_brace_if_chain=false
> +
> +# Annotate #else and #endif statements
> +mod_add_long_ifdef_endif_comment=20
> +mod_add_long_ifdef_else_comment=5
> +
> +# Misc cleanup
> +mod_remove_extra_semicolon=true
> +
> +# Use C-style comments (/* .. */)
> +cmt_c_nl_end=true
> +cmt_star_cont=true
> +cmt_cpp_to_c=true
> +
> +# Use "char **a"-style pointer stars/dereferences
> +sp_before_ptr_star=Add
> +sp_between_ptr_star=Remove
> +sp_after_ptr_star=Remove
> +sp_before_byref=Add
> +sp_after_byref=Remove
> 

Otherwise everything looks good now.  If you change the /bin/bash to
/bin/sh when committing, ACK.

-Steffan

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to