blob: 0a4a3a7982059e40e74a811604922f2b3db52860 [file] [log] [blame]
#!/bin/sh
#******************************************************************************
# Copyright (c) 2006, 2007 Wind River Systems, Inc.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# Martin Oberhuber - initial API and implementation
#******************************************************************************
#:#
#:# lcp - Count lines of code, data and documentation in a file submitted
#:# as a patch
#:#
#:# Usage:
#:# lcp [-eh] {patchfile}
#:# Options:
#:# -e .. include empty lines in count (like wc -l)
#:# -h .. show help
#:# Examples:
#:# lcp bug12345.patch.diff
curdir=`pwd`
case x$1 in
x-e*) INCLUDE_EMPTY=1 ;;
x-*) HELP=1 ;;
esac
if [ "$HELP" = "1" ]; then
grep '^#:#' $0 | grep -v grep | sed -e 's,^#:#,,'
exit 0
fi
if [ ! -f "$1" ]; then
echo "Error: Argument is not a file: $1"
echo "Type `basename $0` -help for help"
exit 1
fi
################################
# Here's our contribution line counting algorithm for patches:
# 1. Cat the patch (necessary to support patches embedding binary data)
# 2. Extract all lines that were added in the patch (starting with '+').
# We use -a in order to work around embedded icons and other binary data
# 3. Suppress filenames (starting with '+++').
# 4. Suppress empty lines and lines only containing /*#{}
#
# Known limitations:
# a. "Moving around" type modications count too many + lines.
if [ x${INCLUDE_EMPTY} = x1 ]; then
cat "$1" | grep -a '^[+]' | grep -a -v '^[+][+][+]' | wc -l
else
cat "$1" | grep -a '^[+]' | grep -a -v '^[+][+][+]' \
| egrep -a -v '^\+[^a-zA-Z0-9_!?"|@~`$%&()+;,.:<>=+-]*$' | wc -l
fi