CasperSecurity

Current Path : /usr/share/doc/git/contrib/
Upload File :
Current File : //usr/share/doc/git/contrib/coverage-diff.sh

#!/bin/sh

# Usage: Run 'contrib/coverage-diff.sh <version1> <version2>' from source-root
# after running
#
#     make coverage-test
#     make coverage-report
#
# while checked out at <version2>. This script combines the *.gcov files
# generated by the 'make' commands above with 'git diff <version1> <version2>'
# to report new lines that are not covered by the test suite.

V1=$1
V2=$2

diff_lines () {
	perl -e '
		my $line_num;
		while (<>) {
			# Hunk header?  Grab the beginning in postimage.
			if (/^@@ -\d+(?:,\d+)? \+(\d+)(?:,\d+)? @@/) {
				$line_num = $1;
				next;
			}

			# Have we seen a hunk?  Ignore "diff --git" etc.
			next unless defined $line_num;

			# Deleted line? Ignore.
			if (/^-/) {
				next;
			}

			# Show only the line number of added lines.
			if (/^\+/) {
				print "$line_num\n";
			}
			# Either common context or added line appear in
			# the postimage.  Count it.
			$line_num++;
		}
	'
}

files=$(git diff --name-only "$V1" "$V2" -- \*.c)

# create empty file
>coverage-data.txt

for file in $files
do
	git diff "$V1" "$V2" -- "$file" |
	diff_lines |
	sort >new_lines.txt

	if ! test -s new_lines.txt
	then
		continue
	fi

	hash_file=$(echo $file | sed "s/\//\#/")

	if ! test -s "$hash_file.gcov"
	then
		continue
	fi

	sed -ne '/#####:/{
			s/    #####://
			s/:.*//
			s/ //g
			p
		}' "$hash_file.gcov" |
	sort >uncovered_lines.txt

	comm -12 uncovered_lines.txt new_lines.txt |
	sed -e 's/$/\)/' |
	sed -e 's/^/ /' >uncovered_new_lines.txt

	grep -q '[^[:space:]]' <uncovered_new_lines.txt &&
	echo $file >>coverage-data.txt &&
	git blame -s "$V2" -- "$file" |
	sed 's/\t//g' |
	grep -f uncovered_new_lines.txt >>coverage-data.txt &&
	echo >>coverage-data.txt

	rm -f new_lines.txt uncovered_lines.txt uncovered_new_lines.txt
done

cat coverage-data.txt

echo "Commits introducing uncovered code:"

commit_list=$(cat coverage-data.txt |
	grep -E '^[0-9a-f]{7,} ' |
	awk '{print $1;}' |
	sort |
	uniq)

(
	for commit in $commit_list
	do
		git log --no-decorate --pretty=format:'%an      %h: %s' -1 $commit
		echo
	done
) | sort

rm coverage-data.txt
Hacker Blog, Shell İndir, Sql İnjection, XSS Attacks, LFI Attacks, Social Hacking, Exploit Bot, Proxy Tools, Web Shell, PHP Shell, Alfa Shell İndir, Hacking Training Set, DDoS Script, Denial Of Service, Botnet, RFI Attacks, Encryption
Telegram @BIBIL_0DAY