mirror of
https://github.com/moparisthebest/curl
synced 2024-12-23 08:38:49 -05:00
scripts/delta: show repo delta info from last release
... where "last release" should be the git tag in the repo.
This commit is contained in:
parent
e1be2ecba4
commit
70d8ac624f
137
scripts/delta
Executable file
137
scripts/delta
Executable file
@ -0,0 +1,137 @@
|
||||
#!/usr/bin/perl
|
||||
#***************************************************************************
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 2018, 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 respository 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 "") {
|
||||
print "Usage: summary [tag]\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
$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 (according to THANKS)
|
||||
$acontribs = `cat docs/THANKS | 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 "^ CINIT" include/curl/curl.h | grep -cv OBSOLETE`;
|
||||
$bsetopts=`git show $start:include/curl/curl.h | grep "^ CINIT" | 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 -r --summary origin/master $start | grep -c create`;
|
||||
$creates=`git diff-tree -r --summary origin/master $start | grep -c delete`;
|
||||
|
||||
# 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 currenly 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 (in THANKS): %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;
|
Loading…
Reference in New Issue
Block a user