| #!/usr/bin/perl |
| #*************************************************************************** |
| # _ _ ____ _ |
| # Project ___| | | | _ \| | |
| # / __| | | | |_) | | |
| # | (__| |_| | _ <| |___ |
| # \___|\___/|_| \_\_____| |
| # |
| # Copyright (C) 2018-2020, Daniel Stenberg, <daniel@haxx.se>, et al. |
| # |
| # This software is licensed as described in the file COPYING, which |
| # you should have received as part of this distribution. The terms |
| # are also available at https://curl.haxx.se/docs/copyright.html. |
| # |
| # You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| # copies of the Software, and permit persons to whom the Software is |
| # furnished to do so, under the terms of the COPYING file. |
| # |
| # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| # KIND, either express or implied. |
| # |
| ########################################################################### |
| |
| # Display changes done in the repository from [tag] until now. |
| # |
| # Uses git for repo data. |
| # Uses docs/THANKS and RELEASE-NOTES for current status. |
| # |
| # In the git clone root, invoke 'scripts/delta [release tag]' |
| |
| $start = $ARGV[0]; |
| |
| if($start eq "-h") { |
| print "Usage: summary [tag]\n"; |
| exit; |
| } |
| elsif($start eq "") { |
| $start = `git tag --sort=taggerdate | tail -1`; |
| chomp $start; |
| } |
| |
| $commits = `git log --oneline $start.. | wc -l`; |
| $committers = `git shortlog -s $start.. | wc -l`; |
| $bcommitters = `git shortlog -s $start | wc -l`; |
| |
| $acommits = `git log --oneline | wc -l`; |
| $acommitters = `git shortlog -s | wc -l`; |
| |
| # delta from now compared to before |
| $ncommitters = $acommitters - $bcommitters; |
| |
| # number of contributors right now |
| $acontribs = `./scripts/contrithanks.sh | grep -c '^[^ ]'`; |
| # number when the tag tag was set |
| $bcontribs = `git show $start:docs/THANKS | grep -c '^[^ ]'`; |
| # delta |
| $contribs = $acontribs - $bcontribs; |
| |
| # number of setops: |
| $asetopts=`grep '^ CURLOPT(' include/curl/curl.h | grep -cv OBSOLETE`; |
| $bsetopts=`git show $start:include/curl/curl.h | grep '^ CURLOPT(' | grep -cv OBSOLETE`; |
| $nsetopts = $asetopts - $bsetopts; |
| |
| # Number of command line options: |
| $aoptions=`grep -c '{"....--' src/tool_help.c`; |
| $boptions=`git show $start:src/tool_help.c | grep -c '{"....--'`; |
| $noptions=$aoptions - $boptions; |
| |
| # Number of files in git |
| $afiles=`git ls-files | wc -l`; |
| $deletes=`git diff-tree --diff-filter=A -r --summary origin/master $start | wc -l`; |
| $creates=`git diff-tree --diff-filter=D -r --summary origin/master $start | wc -l`; |
| |
| # Time since that tag |
| $tagged=`git for-each-ref --format="%(refname:short) | %(taggerdate:unix)" refs/tags/* | grep ^$start | cut "-d|" -f2`; # unix timestamp |
| $taggednice=`git for-each-ref --format="%(refname:short) | %(creatordate)" refs/tags/* | grep ^$start | cut '-d|' -f2`; # human readable time |
| chomp $taggednice; |
| $now=`date +%s`; |
| $elapsed=$now - $tagged; # number of seconds since tag |
| |
| # Number of public functions in libcurl |
| $apublic=`git grep ^CURL_EXTERN -- include/curl | wc -l`; |
| $bpublic=`git grep ^CURL_EXTERN $start -- include/curl | wc -l`; |
| $public = $apublic - $bpublic; |
| |
| # Changes/bug-fixes currently logged |
| open(F, "<RELEASE-NOTES"); |
| while(<F>) { |
| if($_ =~ /following changes:/) { |
| $mode=1; |
| } |
| elsif($_ =~ /following bugfixes:/) { |
| $mode=2; |
| } |
| elsif($_ =~ /known bugs:/) { |
| $mode=3; |
| } |
| elsif($_ =~ /like these:/) { |
| $mode=4; |
| } |
| if($_ =~ /^ o /) { |
| if($mode == 1) { |
| $numchanges++; |
| } |
| elsif($mode == 2) { |
| $numbugfixes++; |
| } |
| } |
| if(($mode == 4) && ($_ =~ /^ \((\d+) contributors/)) { |
| $numcontributors = $1; |
| } |
| } |
| close(F); |
| |
| ######################################################################## |
| # Produce the summary |
| |
| print "== Since $start ==\n"; |
| printf "Commits: %d (out of %d)\n", |
| $commits, $acommits; |
| printf "Commit authors: %d out of which %d are new (out of %d)\n", |
| $committers, $ncommitters, $acommitters; |
| printf "Contributors in RELEASE-NOTES: %d\n", |
| $numcontributors; |
| printf "New contributors: %d (out of %d)\n", |
| $contribs, $acontribs; |
| printf "New curl_easy_setopt() options: %d (out of %d)\n", |
| $nsetopts, $asetopts; |
| printf "New command line options: %d (out of %d)\n", |
| $noptions, $aoptions; |
| |
| printf "Deleted %d files, added %d files (total %d)\n", |
| $deletes, $creates, $afiles; |
| |
| printf "Elapsed time: %.1f days (since$taggednice)\n", |
| $elapsed / 3600 / 24; |
| printf "Changes logged: %d\n", $numchanges; |
| printf "Bugfixes logged: %d\n", $numbugfixes; |
| |
| printf "New public functions: %d (out of %d)\n", |
| $public, $apublic; |