| #!/bin/bash |
| |
| source "$(dirname "$BASH_SOURCE")/.validate" |
| |
| adds=$(validate_diff --numstat | awk '{ s += $1 } END { print s }') |
| dels=$(validate_diff --numstat | awk '{ s += $2 } END { print s }') |
| notDocs="$(validate_diff --numstat | awk '$3 !~ /^docs\// { print $3 }')" |
| |
| : ${adds:=0} |
| : ${dels:=0} |
| |
| if [ $adds -eq 0 -a $dels -eq 0 ]; then |
| echo '0 adds, 0 deletions; nothing to validate! :)' |
| elif [ -z "$notDocs" -a $adds -le 1 -a $dels -le 1 ]; then |
| echo 'Congratulations! DCO small-patch-exception material!' |
| else |
| dcoPrefix='Docker-DCO-1.1-Signed-off-by:' |
| dcoRegex="^$dcoPrefix ([^<]+) <([^<>@]+@[^<>]+)> \\(github: (\S+)\\)$" |
| commits=( $(validate_log --format='format:%H%n') ) |
| badCommits=() |
| for commit in "${commits[@]}"; do |
| if [ -z "$(git log -1 --format='format:' --name-status "$commit")" ]; then |
| # no content (ie, Merge commit, etc) |
| continue |
| fi |
| if ! git log -1 --format='format:%B' "$commit" | grep -qE "$dcoRegex"; then |
| badCommits+=( "$commit" ) |
| fi |
| done |
| if [ ${#badCommits[@]} -eq 0 ]; then |
| echo "Congratulations! All commits are properly signed with the DCO!" |
| else |
| { |
| echo "These commits do not have a proper '$dcoPrefix' marker:" |
| for commit in "${badCommits[@]}"; do |
| echo " - $commit" |
| done |
| echo |
| echo 'Please amend each commit to include a properly formatted DCO marker.' |
| echo |
| echo 'Visit the following URL for information about the Docker DCO:' |
| echo ' https://github.com/dotcloud/docker/blob/master/CONTRIBUTING.md#sign-your-work' |
| echo |
| } >&2 |
| false |
| fi |
| fi |