Compare commits

..

9 Commits

Author SHA1 Message Date
Lukáš Mešťan
7aea224e21 Merge pull request #98 from novadiscovery/97-new-lines-as-percent
add percentage for new lines as well
2020-05-01 11:37:49 +02:00
frederic.cogny
c37492bb4c chore(git-quick-stats): add tab instead of space for nicer alignment between percentage counts 2020-05-01 01:03:21 +02:00
frederic.cogny
c258e34afe feat(git-quick-stats): add percentage for new lines as well 2020-05-01 00:36:10 +02:00
Lukáš Mešťan
9e18cf35d4 Merge pull request #94 from arzzen/patch-issue-91
Update commitsByWeekday sorting
2020-02-18 11:31:35 +01:00
Lukáš Mešťan
24ae67ae57 update commitsByWeekday sorting
Fix inconsistent sum sorting in by-weekday, #91
2020-02-14 09:34:46 +01:00
Lukáš Mešťan
ed0e3cbb6b Merge pull request #93 from tomice/master
Fixing OS X compatibility with merge feature
2020-02-13 09:42:06 +01:00
Tom Ice
46a771138e Fixing OS X compatibility with merge feature
* OS X utilizes an older version of GNU Bash. As such, certain features
  such as lowercase expansion can fail. This commit removes the Bash 4.0
  syntax in favor of a POSIX syntax with awk.
2020-02-11 08:25:44 -05:00
Lukáš Mešťan
9f54b87ed5 Update FUNDING.yml 2020-02-05 09:33:07 +00:00
Lukáš Mešťan
246076f5f6 Bump year 2020-01-20 08:00:06 +00:00
3 changed files with 44 additions and 42 deletions

1
.github/FUNDING.yml vendored
View File

@@ -2,3 +2,4 @@
github: [arzzen]
open_collective: git-quick-stats
custom: ['https://lukasmestan.com/thanks/']

View File

@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2019 Lukáš Mešťan
Copyright (c) 2020 Lukáš Mešťan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -23,9 +23,10 @@ _pathspec=${_GIT_PATHSPEC:-}
# Exclusive shows only merge commits
# Enable shows regular commits together with normal commits
_merges=${_GIT_MERGE_VIEW:-}
if [[ "${_merges,,}" == "exclusive" ]]; then
_merges=$(echo "$_merges" | awk '{print tolower($0)}')
if [[ "${_merges}" == "exclusive" ]]; then
_merges="--merges"
elif [[ "${_merges,,}" == "enable" ]]; then
elif [[ "${_merges}" == "enable" ]]; then
_merges=""
else
_merges="--no-merges"
@@ -33,7 +34,7 @@ fi
# Limit git log output
_limit=${_GIT_LIMIT:-}
if [[ -n "${_limit}" ]]; then
if [[ -n "${_limit}" ]]; then
_limit=$_limit
else
_limit=10
@@ -52,7 +53,7 @@ function checkUtils() {
local -r msg="not found. Please make sure this is installed and in PATH."
declare -ar utils=("awk" "basename" "cat" "column" "echo" "git" "grep" "head"
"seq" "sort" "tput" "tr" "uniq" "wc")
for u in "${utils[@]}"
do
command -v "$u" >/dev/null 2>&1 || { echo >&2 "$u ${msg}"; exit 1; }
@@ -64,7 +65,7 @@ function checkUtils() {
# ARGS: None
# OUTS: None
################################################################################
function usage() {
function usage() {
local -r program=$(basename "$0")
echo "
@@ -165,7 +166,7 @@ function showMenu() {
help_txt="${normal}${cyan}" && readonly help_txt
exit_txt="${bold}${cyan}" && readonly exit_txt
fi
echo -e "\n${titles} Generate:${normal}"
echo -e "${nums} 1)${text} Contribution stats (by author)"
echo -e "${nums} 2)${text} Contribution stats (by author) on a specific branch"
@@ -200,7 +201,7 @@ function optionPicked() {
local -r red=$(tput setaf 1)
local -r reset=$(tput sgr0)
local msg=${*:-"${reset}Error: No message passed"}
echo -e "${bold}${red}${msg}${reset}\n"
}
@@ -215,7 +216,7 @@ function detailedGitStats() {
local is_branch_existing=false
local branch="${1:-}"
local _branch=""
# Check if requesting for a specific branch
if [[ -n "${branch}" ]]; then
# Check if branch exist
@@ -244,27 +245,27 @@ function detailedGitStats() {
printf "\t%s:\n", author
if(more["total"] > 0) {
printf "\t insertions: %d (%.0f%%)\n", more[author], \
printf "\t insertions: %d\t(%.0f%%)\n", more[author], \
(more[author] / more["total"] * 100)
}
if(less["total"] > 0) {
printf "\t deletions: %d (%.0f%%)\n", less[author], \
printf "\t deletions: %d\t(%.0f%%)\n", less[author], \
(less[author] / less["total"] * 100)
}
if(file["total"] > 0) {
printf "\t files: %d (%.0f%%)\n", file[author], \
printf "\t files: %d\t(%.0f%%)\n", file[author], \
(file[author] / file["total"] * 100)
}
if(commits["total"] > 0) {
printf "\t commits: %d (%.0f%%)\n", commits[author], \
printf "\t commits: %d\t(%.0f%%)\n", commits[author], \
(commits[author] / commits["total"] * 100)
}
if (first[author] != "") {
printf "\t lines changed: %s\n", more[author] + less[author]
printf "\t lines changed: %d\t(%.0f%%)\n", more[author] + less[author], ((more[author] + less[author])/ (more["total"]+ less["total"]) * 100 )
printf "\t first commit: %s\n", first[author]
printf "\t last commit: %s\n", last[author]
}
@@ -288,8 +289,8 @@ function detailedGitStats() {
/^[0-9]/ {
more[author] += $1
less[author] += $2
file[author] += 1
file[author] += 1
more["total"] += $1
less["total"] += $2
file["total"] += 1
@@ -350,11 +351,11 @@ function commitsByMonth() {
echo -en "\t$i\t"
git -c log.showSignature=false shortlog -n $_merges --format='%ad %s' \
$_since $_until | grep " $i " | wc -l
done | awk '{
count[$1] = $2
total += $2
}
END{
done | awk '{
count[$1] = $2
total += $2
}
END{
for (month in count) {
s="|";
if (total > 0) {
@@ -376,21 +377,21 @@ function commitsByMonth() {
function commitsByWeekday() {
optionPicked "Git commits by weekday:"
echo -e "\tday\tsum"
local counter=1
for i in Mon Tue Wed Thu Fri Sat Sun
do
echo -en "\t$i\t"
echo -en "\t$counter\t$i\t"
git -c log.showSignature=false shortlog -n $_merges --format='%ad %s' \
$_since $_until | grep "$i " | wc -l
counter=$((counter+1))
done | awk '{
}
NR == FNR {
count[$1] = $2;
total += $2;
next
NR == FNR {
count[$1" "$2] = $3;
total += $3;
next
}
END{
END{
for (day in count) {
s="|";
if (total > 0) {
@@ -398,10 +399,10 @@ function commitsByWeekday() {
for (i = 1; i <= percent; ++i) {
s=s"█"
}
printf( "\t%s\t%-0s\t%s\n", day, count[day], s );
printf("\t%s\t%s\t%-0s\t%s\n", substr(day,0,1), substr(day,3,5), count[day], s);
}
}
}' | sort -k 2 -n -r
}' | sort -k 1 -n | awk '{$1=""}1' | awk '{$1=$1}1' | awk '{printf("\t%s\t%s\t%s\n", $1, $2, $3)}'
}
################################################################################
@@ -426,11 +427,11 @@ function commitsByHour() {
echo -ne "\t$i\t"
git -c log.showSignature=false shortlog -n $_merges --format='%ad %s' \
"${_author}" $_since $_until | grep ' '$i: | wc -l
done | awk '{
count[$1] = $2
total += $2
}
END{
done | awk '{
count[$1] = $2
total += $2
}
END{
for (hour in count) {
s="|";
if (total > 0) {
@@ -595,7 +596,7 @@ if [[ "$#" -eq 1 ]]; then
-T|--detailed-git-stats) detailedGitStats;;
-R|--git-stats-by-branch)
branch=""
while [[ -z "${branch}" ]]; do
while [[ -z "${branch}" ]]; do
read -r -p "Which branch? " branch
done
detailedGitStats "${branch}";;
@@ -608,7 +609,7 @@ if [[ "$#" -eq 1 ]]; then
-c|--changelogs) changelogs;;
-L|--changelogs-by-author)
author="${_GIT_AUTHOR:-}"
while [[ -z "${author}" ]]; do
while [[ -z "${author}" ]]; do
read -r -p "Which author? " author
done
changelogs "${author}";;
@@ -616,12 +617,12 @@ if [[ "$#" -eq 1 ]]; then
-o|--commits-by-hour) commitsByHour;;
-A|--commits-by-author-by-hour)
author="${_GIT_AUTHOR:-}"
while [[ -z "${author}" ]]; do
while [[ -z "${author}" ]]; do
read -r -p "Which author? " author
done
commitsByHour "${author}";;
-m|--commits-by-month) commitsByMonth;;
-j|--json-output)
-j|--json-output)
json_path=""
while [[ -z "${json_path}" ]]; do
read -r -p "Path to save JSON file: " json_path
@@ -647,13 +648,13 @@ while [[ "${opt}" != "" ]]; do
case "${opt}" in
1) detailedGitStats; showMenu;;
2) branch=""
while [[ -z "${branch}" ]]; do
while [[ -z "${branch}" ]]; do
read -r -p "Which branch? " branch
done
detailedGitStats "${branch}"; showMenu;;
3) changelogs; showMenu;;
4) author=""
while [[ -z "${author}" ]]; do
while [[ -z "${author}" ]]; do
read -r -p "Which author? " author
done
changelogs "${author}"; showMenu;;
@@ -676,7 +677,7 @@ while [[ "${opt}" != "" ]]; do
13) commitsByWeekday; showMenu;;
14) commitsByHour; showMenu;;
15) author=""
while [[ -z "${author}" ]]; do
while [[ -z "${author}" ]]; do
read -r -p "Which author? " author
done
commitsByHour "${author}"; showMenu;;