#!/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