Compare commits

..

144 Commits

Author SHA1 Message Date
arzzen
38d61213ee refresh
- remove gtm
- update images
2024-01-26 10:29:03 +01:00
Lukáš Mešťan
77cd232849 Update index.html 2021-03-21 20:12:11 +01:00
arzzen
6578188c3e update donate 2020-11-23 15:41:26 +01:00
Lukáš Mešťan
1aeb8034c4 Update index.html 2020-05-10 19:08:12 +02:00
Lukáš Mešťan
bd96088ffc Update index.html 2020-01-22 07:39:15 +00:00
Lukáš Mešťan
cabc6ebc59 add info about Git merge view strategy 2020-01-22 07:38:26 +00:00
Lukas Mestan
689bbe5d7f update 2020-01-11 13:43:31 +01:00
Lukas Mestan
f7d233bee4 add install script 2020-01-11 13:40:43 +01:00
Lukas Mestan
afc5846b63 update site 2020-01-10 13:16:23 +01:00
Lukas Mestan
bc79860e34 update site 2019-12-16 14:25:15 +01:00
Lukas Mestan
877adc5a65 update template 2019-12-16 14:17:53 +01:00
Lukas Mestan
c2d3d798b2 init github pages 2019-12-16 13:22:07 +01:00
Lukáš Mešťan
85b7fb1cdf Create CNAME 2019-12-16 13:11:25 +01:00
Lukáš Mešťan
151b260be1 Update README.md 2019-12-16 11:04:15 +01:00
Lukáš Mešťan
f06b7f4833 Update README.md 2019-12-16 11:01:04 +01:00
Lukáš Mešťan
bf7533afa7 Merge pull request #86 from frxyt/develop
Add Dockerfile
2019-12-16 10:52:26 +01:00
Jérémy WALTHER
27edcf0f7a Add Dockerfile 2019-12-12 19:09:56 +01:00
Lukáš Mešťan
dc72babb20 Merge pull request #82 from 4ndrej/patch-1
refactor checkUtils: remove repeating commands
2019-10-27 10:12:00 +01:00
Andrej
c8ad2fba84 array of util names are read only now 2019-10-25 14:23:15 +02:00
Andrej
5cf8feee53 refactor checkUtils: remove repeating commands
putting checked utils into array and running through the array in for loop cleans the code
2019-10-25 10:41:05 +02:00
Lukáš Mešťan
17fc8f326c Merge pull request #81 from lightopenid/gh-68
update travis yml
2019-10-13 17:49:01 +02:00
Lukas Mestan
d5c17e43c0 update travis yml 2019-10-13 17:44:51 +02:00
Lukáš Mešťan
75c8bdc0de Merge pull request #80 from ProcrastinatorCp/gh-70
Support commits by co-authors
2019-10-13 17:41:05 +02:00
Lukáš Mešťan
1a9be34f4c Update .travis.yml 2019-10-13 17:30:01 +02:00
Chandra Prakash
4979eaa69f Support commits by co-authors
https://github.com/arzzen/git-quick-stats/issues/70

Commits by multiple authors (co-authored-by) were only counted towards main author.
Modified commitsPerAuthor() to include co-author's commits.
2019-10-13 02:16:54 +08:00
Lukáš Mešťan
1ed838f532 Merge pull request #79 from tomice/master
Updating README.md
2019-10-10 14:26:04 +02:00
Tom Ice
0fd9171e11 Adding info on how to exclude files in the docs
* Added information in the README.md to show how to exclude files
  from the stats by utilizing git pathspec
* Updated the built-in help, manpage, and tests to reflect how git
  pathspec can be utilized on files and folders
* Removed the \r tokens that were put in README.md from Windows

Fixes #61
2019-10-10 08:15:42 -04:00
Lukáš Mešťan
b14f364b6a Update FUNDING.yml 2019-10-10 08:08:18 +00:00
Tom Ice
10ad00bcbb Updating README.md
* Added info that demonstrates this utility has the ability to
  choose between running this as "git-quick-stats" or
  "git quick-stats" as requested in Issue #77
* Adjusted Table of Contents to show all sections and subsections
  of the README.md
* Cleaned up some grammar and added some extra info in various
  places
* Ran through VS Code's markdownlint extension and adjusted some
  syntax accordingly
2019-10-09 13:44:52 -04:00
Lukáš Mešťan
539f49bb68 Merge pull request #74 from jorgesumle/master
Update text errors from README.md
2019-09-18 12:21:07 +02:00
Jorge Maldonado Ventura
10bc3106f6 Update text errors from README.md
Hyphens are necessary for compound adjectives
2019-09-18 11:21:05 +02:00
Lukáš Mešťan
7160e3c39d Update README.md 2019-09-17 18:10:16 +02:00
Lukáš Mešťan
f17cbd0ff7 Merge pull request #72 from keur/makefile_destdir
make: Use DESTDIR
2019-08-12 09:42:07 +02:00
Kevin Kuehler
a3cd429850 make: Use DESTDIR
This is more standard than forcing the user to specify the destination
directory as part of PREFIX.
2019-08-11 13:59:33 -07:00
Lukáš Mešťan
e069deaf8a Update FUNDING.yml 2019-06-07 19:01:29 +02:00
Lukáš Mešťan
b1285b828e Create FUNDING.yml 2019-05-28 08:47:17 +00:00
Tom Ice
c11bce17bd Merge pull request #71 from tomice/master
Added ability to save log as a JSON formatted file
2019-05-26 10:27:58 -04:00
Tom Ice
5f0bc1c7cf Removed GPG info from JSON and updated README pics
* The GPG settings don't play well with OS X if you don't have
  certain tools installed, so they were removed from the git log
  format settings for the JSON output.

* Pictures have been updated to reflect the new menu option.
2019-05-24 23:35:11 -04:00
Tom Ice
5f71b785ac Added ability to save log as a JSON formatted file
* The main feature of this commit is addressing the feature request
  of adding the ability to save the output as a file to use in other
  tools. I decided to use the JSON format as it's relatively straight
  forward and easy to create thanks to a few Google searches.

  The original feature request was to add the ability to output any of
  the options as a JSON/XML/YAML format. That said, because this entire project
  is relying only on built-in shell utilities, we kind of have to format stuff
  ourselves in relatively primitive tools such as awk, sed, and bash in order
  to adhere to the "spirit" of this codebase.

  It is possible to use Perl and/or Python, but that would defeat the purpose
  of this, in my opinion. The downside of not using these tools is that it
  might not be as robust and battle hardened as the others.

  AS SUCH, THIS FEATURE IS CURRENTLY EXPERIMENTAL.

  As people provide feedback, we can adjust this and possibly extend it to
  more options. For now, it respects _GIT_SINCE and _GIT_UNTIL. It does not
  respect variable expansion in paths, though, so saving it to a location such
  as "${my_save_location}" will fail.

* Made some of the variables a bit more robust by utilizing the -r flag to
  make the variables readonly. It should be noted that "local readonly" does
  not work, nor does "readonly local". The best way to do this is either via
  "local -r foo=bar" or "local foo=bar && readonly bar".

* Fixed a few comments describing how functions work.

* Added a .gitignore.

* Changed all functions to adhere to camelCase style for no real reason
  other than consistency and a few other minor things.

* Closes #31
2019-05-24 21:15:19 -04:00
Tom Ice
cdb3f20790 Fixing failed test that occurred after merging PR
* This is just a small change to make it so that the build passes
  tests. It is minor and does not affect the release functionality
2019-05-17 17:28:02 -04:00
Tom Ice
dd69477293 Merge pull request #69 from mhickman/master
Change format of _GIT_SINCE in help
2019-05-17 13:00:16 -04:00
Matt Hickman
4aef465e6b Change format of _GIT_SINCE in help
The format _GIT_SINCE is what `git --since` takes in
which is YYYY-MM-DD.

Ref: https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History
2019-05-17 09:54:27 -07:00
Tom Ice
81fce5cadf Updating README.md to reflect new theme(s) 2019-05-13 10:35:59 -04:00
Tom Ice
f3931eb1a3 Merge pull request #65 from Calinou/improve-interactive-menu
Improve the interactive menu
2019-05-13 10:31:03 -04:00
Tom Ice
bdfe3beb25 New default theme with toggle-able legacy theme
* This sets the newly proposed theme as the main theme. In order to
  switch back to the legacy theme, set _MENU_THEME to legacy.
  This feature is currently an experimental feature and may change
  in the future.

* Fixes documentation and updates test to reflect newly changed theme.
2019-05-12 19:32:11 -04:00
Tom Ice
90d118f09f Fixing some menu color issues 2019-05-10 22:55:42 -04:00
Tom Ice
d12c1c6c4f Added color scheme toggle-ability and updated docs
* You can now switch between the default theme and an alternative theme
  for those who would like a different look to the interactive menu.
  In order to set this, simply do export _MENU_THEME=alternative. Anything
  that isn't "alternative" will simply fall back to the default menu option.

* Fixed merge conflicts based on the latest master branch which added the
  contribution stats by branch option.

* Fixed tests, updated docs, and all that fun stuff.
2019-05-10 16:17:42 -04:00
Tom Ice
1282e4b46f Updating README.md 2019-05-10 13:18:12 -04:00
Tom Ice
96de74cf4f Merge pull request #67 from joshuadeguzman/feature-request/contribution-stats-by-branch
Add non-interactive detailed git stats for a specific branch
2019-05-10 12:48:55 -04:00
Joshua de Guzman
096fd86324 Add new feature in man page 2019-05-10 23:59:12 +08:00
Joshua de Guzman
dd6a23568e Add new feature in README 2019-05-10 23:50:32 +08:00
jdeguzman
48c062f8fa Prevent logging refs when checking branch existence 2019-05-10 18:57:04 +08:00
jdeguzman
c3194f77e3 Add interactive menu for the detailed stats by branch 2019-05-10 18:08:38 +08:00
jdeguzman
52f4eff27c Add on the current branch 2019-05-10 18:00:25 +08:00
jdeguzman
c7d456465e Optimize branch existence validator 2019-05-10 11:00:38 +08:00
Joshua de Guzman
e9f085f20e Add git stats by branch to the options and update unit test 2019-05-10 01:08:53 +08:00
Joshua de Guzman
625ec404bc Update validation rules 2019-05-10 00:24:16 +08:00
jdeguzman
e6ffee5850 Add branch existence validation 2019-05-09 20:17:57 +08:00
jdeguzman
2422a010c6 Add non interactive request for detailed stats by branch 2019-05-09 19:41:47 +08:00
Hugo Locurcio
749367701d Improve the interactive menu
This adds a `>` at the end of the message to denote the program
is waiting for user input.

This also tweaks colors for better readability.
2019-04-11 14:40:16 +02:00
Lukáš Mešťan
3d86fa9664 Merge pull request #64 from opencollective/opencollective
Activating Open Collective
2019-03-05 07:44:32 +01:00
Jess
a6a65faa8d Added backers and sponsors on the README 2019-03-02 10:12:36 -08:00
Lukáš Mešťan
0cc67fd4ac Merge pull request #63 from laurence6/master
Fix some items are not displayed
2019-02-19 19:13:22 +01:00
Laurence
3344a05237 Fix some items are not displayed 2019-02-18 19:58:26 -05:00
Lukáš Mešťan
da78123ca8 Update README.md 2019-02-07 21:27:25 +01:00
Lukáš Mešťan
ad50a915b0 Merge pull request #60 from loonies/makefile
Makefile improvements
2019-02-04 14:05:28 +01:00
Miodrag Tokić
88f970632f Add man page to reinstall target
Update man page on reinstall as well. Also remove unnecessary uninstall
as the "install" command handles this gracefully.
2019-02-04 12:42:21 +01:00
Miodrag Tokić
7f3220abb7 Remove unnecessary Git alias
Git is able to find binary by the prefixed "git" name.
2019-02-04 12:41:22 +01:00
Miodrag Tokić
7a9e9c7f85 Improve man install / uninstall
- Create man directory prior to installing the page
 - Do not force root ownership of the man page
 - Remove man page when uninstalling
2019-02-03 18:10:06 +01:00
Miodrag Tokić
190ae631e5 Straightforward binary removal
Remove binary using the full path instead of jumping to directory.
2019-02-03 18:06:31 +01:00
Miodrag Tokić
94ea505dbd Replace "mkdir" with "install"
Favour "install" over "mkdir" in installation scripts.
2019-02-03 18:04:13 +01:00
Miodrag Tokić
601986fbe1 Remove EXEC_FILES
Variable doesn't make much sense and makes the code more convoluted.
2019-02-03 17:57:28 +01:00
Miodrag Tokić
01f60821ea Help formatting 2019-02-03 17:44:18 +01:00
Lukáš Mešťan
6579c31047 Merge pull request #59 from tomice/master
Added internal documentation and minor cleanup
2019-02-02 19:47:58 +01:00
Tom Ice
e82339b777 Added internal documentation and minor cleanup
* All internal functions now have documentation describing what they are,
  what arguments they take, and what external variables are set in an effort
  to help others understand the codebase more quickly

* Changed a few lines where grep | wc -l occurred, as grep has a built-in
  option to do this: grep -c

* Removed a $* where the suggestReviewers function expected a string but
  never received one during the life of the program

* Adjusted some lines so they weren't quite as long, adjusted some variable
  names, and other minor cleanup
2019-02-01 13:51:21 -05:00
Lukáš Mešťan
f3f0ab4730 Update LICENSE 2019-01-19 13:37:04 +01:00
Lukáš Mešťan
258b52eda8 Merge pull request #58 from tomice/master
Fixed issue where signatures were parsed in logs
2019-01-17 14:43:49 +01:00
Tom Ice
187c03ae98 Fixed issue where signatures were parsed in logs
* When someone has the showSignature=true flag set in their .gitconfig
  file, gpg verifying signature related text would be parsed as if it
  was actual log information. This change ignores signature-related text
  by passing the -c log.showSignature=false option to git so it ignores
  a user's custom .gitconfig showSignature flag regardless as to what it
  is set to.

Resolves: Issue #52
2019-01-16 18:10:59 -05:00
Lukáš Mešťan
5e00e35a30 Merge pull request #57 from arzzen/feature/issue-50
add man page, refs #50
2019-01-16 19:08:40 +01:00
Lukas Mestan
c107529335 add man page 2019-01-16 19:06:53 +01:00
Lukáš Mešťan
255f1a6976 Merge pull request #56 from tomice/master
Changed non-interactive args and fixed main loop
2019-01-16 07:32:14 +01:00
Tom Ice
2cc5cae1a8 Changed non-interactive args and fixed main loop
* The previous commands were Lower CamelCase style and had no equivalent
  short options. If you wanted to see the branch tree via non-interactive
  mode, you always needed to supply "branchTree" as the passing argument to
  the git-quick-stats script.

  This commit changes the argument style to be more akin to the POSIX and GNU
  styles of arguments commonly seen in many other applications. As of this
  commit, there is no compatibility with legacy commands, so those who have
  been using the old commands will unfortunately need to get familiar with the
  new ones. All documentation and tests have been updated accordingly to
  reflect the new changes.

* The main interactive loop contained a non-variable constant that was only
  getting parsed correctly due to legacy fallback behavior. This commit fixes
  the main loop and cleans up the formatting a little bit.

* Added -r to more areas where read reads in a variable to help prevent
  it from mangling backslashes.

* Changed everything to use bash's built-in [[ notation and did some minor
  formatting changes to reduce the LOC.

* Removed some unnecessary echo statements and did some other minor cleanup.
2019-01-10 20:47:40 -05:00
Lukáš Mešťan
4f95691967 Merge pull request #55 from tomice/master
Fix bug related to author name in hourly stats
2019-01-06 17:30:54 +01:00
Tom Ice
36405591ec Fix bug related to author name in hourly stats
* Fixing a bug where, if you insert an author's name that has a space in the
  "Git commits by author per hour" option, it fails due to improper variable
  expansion. Note that the current implementation is a "greedy" one in that
  it will attempt to look for any instance of the user provided string in the
  author field
2019-01-01 14:37:11 -05:00
Lukáš Mešťan
4e3f4ba826 Merge pull request #54 from tomice/master
Fix divide by zero error and add utility checker
2018-12-27 14:21:44 +01:00
Tom Ice
83e96f8b80 Fix divide by zero error and add utility checker
* In some situations, the awk statements in the functions commitsByMonth,
  commitsByDay, and commitsByHour attempt to divide by zero and display
  an error to the user. To invoke this bug, checkout any of the previous
  commits and attempt to see commits by hour from some user who has never
  committed to this repository.

  This commit fixes this bug by making sure the awk statement only ever
  executes when the total commits is greater than zero.

* Added a utility checker to make sure that the user has all of the necessary
  tools in their path in order to run this script. If they do not exist, it
  exits and informs the user that this script cannot locate them in PATH.

* Adjusted shell logic to prevent double negatives from confusing developers
  as ! -z is technically read as something akin to "not has no value"

* Changed some statements to utilize safer and more predictable bash-isms

* Minor white space fixes and adjusted the README.md slightly
2018-12-21 14:50:13 -05:00
Lukáš Mešťan
206ebd8a76 Merge pull request #53 from tomice/master
Improve color compatibility and other minor fixes
2018-12-21 19:35:55 +01:00
Tom Ice
2274ca1284 Improve color compatibility and other minor fixes
* Color was originally done with ANSI escape characters for defining
  different "expected" colors. However, this is not uniform across all
  terminals. To improve what the designers of this program expect
  colors to be, escape codes were replaced with tput equivalents.
  For more information, see the GNU manual here:

  https://www.gnu.org/software/termutils/manual/termutils-2.0/html_chapter/tput_1.html

* Limited scope of variables to their local scope instead of having them
  be global

* Renamed menu variables to aid in readability and adjusted formatting
  slightly to be more uniform

* Fixed a bug where option_picked was assigning an array to a string
  and relying on the default behavior of the shell to interpret it

* Added the -r option to "read" for safety, as read without -r will
  interpret backslashes before spaces/line feeds, which tends to
  be an unintended side effect

* Updated all backtick notation to the newer POSIX $(..) notation for
  aid in readability when paired next to single quotes and improved
  safety

* Updated the README.md to include missing utilities and fixed some
  minor formatting issues
2018-12-21 12:05:53 -05:00
Lukáš Mešťan
37f15f6381 Update index.html 2018-12-07 15:43:23 +01:00
Lukáš Mešťan
337ead38e3 Update index.html 2018-12-07 15:42:16 +01:00
Lukáš Mešťan
c38e4eb7b6 Merge pull request #49 from motiprajapati/respect-mailmap-author-email
Respect mailmap author email
2018-11-30 09:19:50 +01:00
motiprajapati
b767822eb3 Respect mailmap author email
While using this tool feature "Contribution stats (by author)", I observed that script was not respecting author email as option was being used here was "%ae". Corrected it to "%aE", output looks good now.
2018-11-30 13:26:17 +05:30
Lukáš Mešťan
08520bf068 Merge pull request #48 from danieltaub96/master
fixed  Git changelogs wont work
2018-11-05 21:40:36 +01:00
Daniel
374527dbe1 changelogs printed with days limit 2018-11-05 20:45:01 +02:00
Daniel
dba2d87206 fixed git changelogs without author wont work 2018-11-05 20:40:13 +02:00
Lukáš Mešťan
8bfc58710a Merge pull request #47 from mixn/master
Fixes minor typos
2018-09-28 11:46:59 +02:00
mixn
6f931ac9b5 Fixes minor typos 2018-09-27 13:56:19 +02:00
Lukáš Mešťan
42a657b0de Merge pull request #45 from thangdc94/thangdc94-patch-1
fix: author not show fullname in contribution stats
2018-09-21 08:55:32 +02:00
Lukáš Mešťan
a48347e0df Merge pull request #46 from mathstuf/fix-install-to-empty-prefix
Makefile: fix installing to an empty prefix
2018-09-21 08:52:09 +02:00
Ben Boeckel
f4930f152d Makefile: fix installing to an empty prefix
If `$(PREFIX)` was an empty directory, `$(PREFIX)/bin` would end up
being the executable instead of a directory. Create the `bin` directory
first.
2018-09-20 13:34:18 -04:00
Phạm Ngọc Thắng
e5727cf4e9 fix: author not show fullname 2018-09-19 10:17:16 +07:00
Lukáš Mešťan
6b54e9d8df Merge pull request #44 from dkalowsk/fix_makefile
Makefile: set PREFIX to conditional assignment
2018-08-23 09:32:17 +02:00
Dan Kalowsky
7f70c8b728 Makefile: set PREFIX to conditional assignment
When the variable PREFIX is provided on the command line, do not
override the value.

Signed-off-by: Dan Kalowsky <dank@deadmime.org>
2018-08-22 14:37:11 -07:00
Lukáš Mešťan
dc86f8b6ae Merge pull request #43 from afarah1/master
Fix ambiguous argument when author is not specified for commits by hour
2018-07-26 10:56:39 +02:00
Alef Farah
36967bc6f4 Fix ambiguous argument when author is not specified 2018-07-25 18:38:37 -03:00
Lukáš Mešťan
cdfa6bf467 Merge pull request #42 from RobertBeilich/master
Fix error on whitespace in author name
2018-07-17 16:34:43 +02:00
Robert Beilich
a496390884 Fix error on whitespace in author name
Fixes https://github.com/arzzen/git-quick-stats/issues/37
2018-07-17 09:42:39 +02:00
Lukáš Mešťan
e81d3ab9f4 Update README.md 2018-01-22 20:15:45 +01:00
Lukáš Mešťan
b0e62d64c7 Update README.md 2018-01-22 08:25:42 +01:00
Lukáš Mešťan
01b6e17007 Update LICENSE 2018-01-07 12:33:34 +01:00
Lukáš Mešťan
ac730dbfbc Merge pull request #36 from a7r3/master
Makefile: Don't treat newline characters literally
2017-10-20 08:20:50 +02:00
a7r3
37b37bb5c8 Makefile: Don't treat newline characters literally
Signed-off-by: a7r3 <arvindultimate7352@gmail.com>
2017-10-19 22:04:33 +05:30
Lukáš Mešťan
db8009ff6d Update README.md 2017-09-29 13:41:25 +02:00
Lukáš Mešťan
5a275c87b8 Delete CONTRIBUTING.md 2017-09-29 13:40:28 +02:00
Lukáš Mešťan
98c0252e97 Rename CONTRIBUTING.md to contributing.md 2017-09-29 13:40:15 +02:00
Lukáš Mešťan
5a389f5071 Create issue_template.md 2017-09-29 13:38:57 +02:00
Lukáš Mešťan
382f6759cf Create CONTRIBUTING.md 2017-09-29 13:37:36 +02:00
Lukáš Mešťan
6362149953 Update README.md 2017-09-29 13:33:00 +02:00
Lukáš Mešťan
36cae305a4 Update .travis.yml 2017-09-29 13:28:50 +02:00
Lukáš Mešťan
90f6b631a9 update badges 2017-09-11 15:53:31 +02:00
Lukáš Mešťan
6a894d9efe Update README.md 2017-09-11 15:51:12 +02:00
Lukas Mestan
ef6120fa64 add .mailmap 2017-09-05 08:42:41 +02:00
Lukas Mestan
7c6b9b01e4 update makefile 2017-09-04 12:01:34 +02:00
Lukas Mestan
10353cbeff respecting .mailmap, refs #33 2017-09-04 11:23:16 +02:00
Lukáš Mešťan
0f68ba1588 fix define function 2017-07-28 09:42:33 +02:00
Lukáš Mešťan
a985e4decf Merge pull request #32 from arzzen/add-code-of-conduct-1
Create CODE_OF_CONDUCT.md
2017-06-16 08:24:05 +02:00
Lukáš Mešťan
6b33554bea Create CODE_OF_CONDUCT.md 2017-06-16 08:22:00 +02:00
Lukáš Mešťan
a6aed25d4b citations 2017-06-07 10:28:08 +02:00
Lukáš Mešťan
9418613d42 fix #30
update readme
2017-05-08 12:15:08 +02:00
Lukáš Mešťan
ab633cf8ea update reinstall section 2017-04-03 09:08:29 +02:00
Lukas Mestan
3c3f261a7c update readme 2017-04-02 17:31:31 +02:00
Lukas Mestan
d6c1d1e4fd verbose tests 2017-04-02 17:02:56 +02:00
Lukas Mestan
75e3a87a24 cmd: make reinstall 2017-03-30 14:45:28 +02:00
Lukáš Mešťan
daa7b94103 Merge pull request #27 from arzzen/feature/changelogsByAuthor
Feature/changelogs by author
2017-03-28 19:05:43 +02:00
Lukáš Mešťan
515fdb3b08 fix invalid argument test 2017-03-28 11:46:40 +02:00
Lukas Mestan
aa6065ed3b changelogsByAuthor 2017-03-28 10:36:56 +02:00
Lukas Mestan
66d7eee893 add author to changelogs 2017-03-28 10:15:19 +02:00
Lukas Mestan
fe2557b92c github pages 2017-03-19 14:39:41 +00:00
Lukas Mestan
5494388655 fix exit code 2017-03-18 14:04:03 +01:00
Lukas Mestan
8d209e371f travisci 2017-03-18 13:59:30 +01:00
Lukas Mestan
d2fe6fe5ce bugfix tree view 2017-03-18 12:09:17 +01:00
Lukáš Mešťan
8f5dd5bed7 Merge pull request #26 from bpkroth/add-commitsByAuthorByHour-support 2017-03-18 12:06:21 +01:00
Brian Kroth
d4f09f23be adapts commitsByHour to allow reporting by author as well 2017-03-17 10:53:25 -05:00
Lukáš Mešťan
89a62ebe06 remove dot in pathspec 2017-03-17 07:30:29 +01:00
17 changed files with 1382 additions and 506 deletions

4
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,4 @@
# These are supported funding model platforms
github: [arzzen]
open_collective: git-quick-stats

10
.gitignore vendored Normal file
View File

@@ -0,0 +1,10 @@
*.json
*.db
.DS_Store*
._*
.*.swp
.*.swo
.Spotlight*
.Trash*
**/*~
/nbproject/*

1
CNAME Normal file
View File

@@ -0,0 +1 @@
git-quick-stats.sh

View File

@@ -1,25 +0,0 @@
Contributing
============
Want to contribute? Great! First, read this page.
# Code reviews
All submissions, including submissions by project members, require review. We
use Github pull requests for this purpose.
# Some tips for good pull requests:
* Use our code
When in doubt, try to stay true to the existing code of the project.
* Write a descriptive commit message. What problem are you solving and what
are the consequences? Where and what did you test? Some good tips:
[here](http://robots.thoughtbot.com/5-useful-tips-for-a-better-commit-message)
and [here](https://www.kernel.org/doc/Documentation/SubmittingPatches).
* If your PR consists of multiple commits which are successive improvements /
fixes to your first commit, consider squashing them into a single commit
(`git rebase -i`) such that your PR is a single commit on top of the current
HEAD. This make reviewing the code so much easier, and our history more
readable.
# Formatting
This documentation is written using standard [markdown syntax](https://help.github.com/articles/markdown-basics/). Please submit your changes using the same syntax.

21
LICENSE
View File

@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2017 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
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,18 +0,0 @@
prefix=/usr/local
# files that need mode 755
EXEC_FILES=git-quick-stats
all:
@echo "usage: make install"
@echo " make uninstall"
install:
install -m 0755 $(EXEC_FILES) $(prefix)/bin
git config --global alias.quick-stats '! $(prefix)/bin/$(EXEC_FILES)'
uninstall:
test -d $(prefix)/bin && \
cd $(prefix)/bin && \
rm -f $(EXEC_FILES) && \
git config --global --unset alias.quick-stats

269
README.md
View File

@@ -1,99 +1,247 @@
## GIT quick statistics
# GIT quick statistics [![Backers on Open Collective](https://opencollective.com/git-quick-stats/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/git-quick-stats/sponsors/badge.svg)](#sponsors) [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Simple%20and%20efficient%20way%20to%20access%20various%20statistics%20in%20git%20repository&url=https://github.com/arzzen/git-quick-stat&via=arzzen&hashtags=git,stats,tool,statistics,developers) [![Travis](https://api.travis-ci.org/arzzen/git-quick-stats.svg?branch=master)](https://travis-ci.org/arzzen/git-quick-stats) [![Homebrew package](https://repology.org/badge/version-for-repo/homebrew/git-quick-stats.svg)](http://braumeister.org/formula/git-quick-stats) [![Linuxbrew package](https://repology.org/badge/version-for-repo/linuxbrew/git-quick-stats.svg)](https://repology.org/metapackage/git-quick-stats/packages)
> `git quick-stats` is a simple and efficient way to access various statistics in git repository.
> `git-quick-stats` is a simple and efficient way to access various statistics in a git repository.
>
> Any git repository may contain tons of information about commits, contributors, and files. Extracting this information is not always trivial, mostly because there are a gadzillion options to a gadzillion git commands I dont think there is a single person alive who knows them all. Probably not even [Linus Torvalds](https://github.com/torvalds) himself :).
## Example
![mainMenuScreenshot](https://user-images.githubusercontent.com/8818630/58364013-61e53800-7e7b-11e9-87f9-790d6744fbd5.png)
Suggested code reviewers (based on git history):
![screenshot from 2017-02-04 22-00-30](https://cloud.githubusercontent.com/assets/6382002/22621490/62257c30-eb25-11e6-8608-9cfe17509464.png)
## Table of Contents
Asciinema preview:
[![asciicast](https://asciinema.org/a/6fsugv3m2vygykk49bk7l49ut.png)](https://asciinema.org/a/6fsugv3m2vygykk49bk7l49ut)
[**Screenshots**](#screenshots)
[**Usage**](#usage)
Want to contribute? Great! First, [read this page][].
* [**Interactive**](#interactive)
* [**Non-interactive**](#non-interactive)
* [**Command-line arguments**](#command-line-arguments)
* [**Git log since and until**](#git-log-since-and-until)
* [**Git log limit**](#git-log-limit)
* [**Git pathspec**](#git-pathspec)
* [**Color themes**](#color-themes)
[**Installation**](#installation)
* [**UNIX and Linux**](#unix-and-linux)
* [**macOS**](#macos-homebrew)
* [**Windows**](#windows)
* [**Docker**](#docker)
[**System requirements**](#system-requirements)
* [**Dependencies**](#dependencies)
[**FAQ**](#faq)
[**Contribution**](#contribution)
* [**Code reviews**](#code-reviews)
* [**Some tips for good pull requests**](#some-tips-for-good-pull-requests)
* [**Formatting**](#formatting)
[**Tests**](#tests)
[**Licensing**](#licensing)
[**Contributors**](#contributors)
* [**Backers**](#backers)
* [**Sponsors**](#sponsors)
## Screenshots
![commitsByWeekdayScreenshot](https://user-images.githubusercontent.com/8818630/58364011-61e53800-7e7b-11e9-9417-16cbb241ac2e.png)
![commitsByHourScreenshot](https://user-images.githubusercontent.com/8818630/58364010-61e53800-7e7b-11e9-8711-a40b50aebf52.png)
## Usage
### Interactive
git-quick-stats has a built-in interactive menu that can be executed as such:
```bash
git quick-stats
# or
git-quick-stats
```
Or you can use (non-interactive) direct execution:
Or
`git quick-stats <optional-command-to-execute-directly>`
```bash
git quick-stats
```
> Possible arguments:
> suggestReviewers, detailedGitStats, commitsByHour, commitsByWeekday, commitsByMonth, commitsPerDay, commitsPerAuthor, myDailyStats, contributors,
branchTree, branchesByDate, changelogs
### Non-interactive
For those who prefer to utilize command-line options, `git-quick-stats` also has a non-interactive mode supporting both short and long options:
#### Git log --since and --until arguments
```bash
git-quick-stats <optional-command-to-execute-directly>
```
You can set variable `_GIT_SINCE`, `_GIT_UNTIL` and limit the git log
Or
eg:
```bash
git quick-stats <optional-command-to-execute-directly>
```
`export _GIT_SINCE="2017-20-01"`
### Command-line arguments
`export _GIT_UNTIL="2017-22-01"`
Possible arguments in short and long form:
then run `git quick-stats` (affect all stats, except "My daily status" and "Git changelogs" )
```bash
-r, --suggest-reviewers
show the best people to contact to review code
-T, --detailed-git-stats
give a detailed list of git stats
-R, --git-stats-by-branch
see detailed list of git stats by branch
-d, --commits-per-day
displays a list of commits per day
-m, --commits-by-month
displays a list of commits per month
-w, --commits-by-weekday
displays a list of commits per weekday
-o, --commits-by-hour
displays a list of commits per hour
-A, --commits-by-author-by-hour
displays a list of commits per hour by author
-a, --commits-per-author
displays a list of commits per author
-S, --my-daily-stats
see your current daily stats
-C, --contributors
see a list of everyone who contributed to the repo
-b, --branch-tree
show an ASCII graph of the git repo branch history
-D, --branches-by-date
show branches by date
-c, --changelogs
see changelogs
-L, --changelogs-by-author
see changelogs by author
-j, --json-output
save git log as a JSON formatted file to a specified area
-h, -?, --help
display this help text in the terminal
```
### Git log since and until
#### Git log limit
You can set the variables `_GIT_SINCE` and/or `_GIT_UNTIL` before running `git-quick-stats` to limit the git log. These work similar to git's built-in `--since` and `--until` log options.
You can set variable `_GIT_LIMIT` for limited output (it will affect: "Git changelogs" and "Branch tree view" )
```bash
export _GIT_SINCE="2017-01-20"
export _GIT_UNTIL="2017-01-22"
```
eg:
Once set, run `git quick-stats` as normal. Note that this affects all stats that parse the git log history until unset.
`export _GIT_LIMIT=20`
### Git log limit
You can set variable `_GIT_LIMIT` for limited output. It will affect the "changelogs" and "branch tree" options.
```bash
export _GIT_LIMIT=20
```
### Git pathspec
You can exclude a directory from the stats by using [pathspec](https://git-scm.com/docs/gitglossary#gitglossary-aiddefpathspecapathspec)
```bash
export _GIT_PATHSPEC=':!directory'
```
You can also exclude files from the stats. Note that it works with any alphanumeric, glob, or regex that git respects.
```bash
export _GIT_PATHSPEC=':!package-lock.json'
```
### Color themes
You can change to the legacy color scheme by toggling the variable `_MENU_THEME` between `default` and `legacy`
```bash
export _MENU_THEME=legacy
```
![legacyThemeScreenshot](https://user-images.githubusercontent.com/8818630/58364012-61e53800-7e7b-11e9-910a-aaff836260eb.png)
## Installation
#### Unix like OS
### UNIX and Linux
```
```bash
git clone https://github.com/arzzen/git-quick-stats.git && cd git-quick-stats
sudo make install
```
For uninstalling, open up the cloned directory and run
```
```bash
sudo make uninstall
```
#### OS X (homebrew)
For update/reinstall
`brew install git-quick-stats`
```bash
sudo make reinstall
```
#### Windows (cygwin)
### macOS (homebrew)
* [installer](https://gist.github.com/arzzen/35e09866dfdadf2108b2420045739245)
```bash
brew install git-quick-stats
```
Or you can follow the UNIX and Linux instructions if you wish.
### Windows
If you are installing with Cygwin, use these scripts:
* [installer](https://gist.github.com/arzzen/35e09866dfdadf2108b2420045739245)
* [uninstaller](https://gist.github.com/arzzen/21c660014d0663b6c5710014714779d6)
If you are wishing to use this with WSL, follow the UNIX and Linux instructions.
### Docker
You can use the Docker image provided:
* Build: `docker build -t arzzen/git-quick-stats .`
* Run interactive menu: `docker run --rm -it -v $(pwd):/git arzzen/git-quick-stats`
* Docker pull command: `docker pull arzzen/git-quick-stats` [docker repository](https://hub.docker.com/r/arzzen/git-quick-stats)
## System requirements
* Unix like OS with a proper shell
* Tools we use: git ; awk ; sed ; tr ; echo ; grep ; cut ; sort ; head ; uniq ; column.
* An OS with a Bash shell
* Tools we use: awk ; basename ; cat ; column ; echo ; git ; grep ; head ; seq ; sort ; tput ; tr ; uniq ; wc
## Contribution
### Dependencies
* [`bsdmainutils`](https://packages.debian.org/sid/bsdmainutils) `apt install bsdmainutils`
## FAQ
*Q:* I get some errors after run git-quick-stats in cygwin like `/usr/local/bin/git-quick-stats: line 2: $'\r': command not found`
*A:* You can run the dos2unix app in cygwin as follows: `/bin/dos2unix.exe /usr/local/bin/git-quick-stats`. This will convert the script from the CR-LF convention that Microsoft uses to the LF convention that UNIX, OS X, and Linux use. You should then should be able to run it as normal.
## Contribution
Want to contribute? Great! First, read this page.
#### Code reviews
All submissions, including submissions by project members, require review.
We use Github pull requests for this purpose.
### Code reviews
#### Some tips for good pull requests:
* Use our code
All submissions, including submissions by project members, require review.</br>
We use GitHub pull requests for this purpose.
### Some tips for good pull requests
* Use our code </br>
When in doubt, try to stay true to the existing code of the project.
* Write a descriptive commit message. What problem are you solving and what
are the consequences? Where and what did you test? Some good tips:
@@ -105,13 +253,48 @@ We use Github pull requests for this purpose.
HEAD. This make reviewing the code so much easier, and our history more
readable.
#### Formatting
### Formatting
This documentation is written using standard [markdown syntax](https://help.github.com/articles/markdown-basics/). Please submit your changes using the same syntax.
## Tests
[![codecov](https://codecov.io/gh/arzzen/git-quick-stats/branch/master/graph/badge.svg)](https://codecov.io/gh/arzzen/git-quick-stats)
```bash
make test
```
## Licensing
MIT see [LICENSE][] for the full license text.
[read this page]: http://github.com/arzzen/git-quick-stats/blob/master/CONTRIBUTING.md
[read this page]: http://github.com/arzzen/git-quick-stats/blob/master/docs/CONTRIBUTING.md
[landing page]: http://arzzen.github.io/git-quick-stats
[LICENSE]: https://github.com/arzzen/git-quick-stats/blob/master/LICENSE.txt
[LICENSE]: https://github.com/arzzen/git-quick-stats/blob/master/LICENSE
## Contributors
This project exists thanks to all the people who contribute.
<a href="https://github.com/arzzen/git-quick-stats/graphs/contributors"><img src="https://opencollective.com/git-quick-stats/contributors.svg?width=890&button=false" /></a>
### Backers
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/git-quick-stats#backer)]
<a href="https://opencollective.com/git-quick-stats#backers" target="_blank"><img src="https://opencollective.com/git-quick-stats/backers.svg?width=890"></a>
### Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/git-quick-stats#sponsor)]
<a href="https://opencollective.com/git-quick-stats/sponsor/0/website" target="_blank"><img src="https://opencollective.com/git-quick-stats/sponsor/0/avatar.svg?v=1"></a>
<a href="https://opencollective.com/git-quick-stats/sponsor/1/website" target="_blank"><img src="https://opencollective.com/git-quick-stats/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/git-quick-stats/sponsor/2/website" target="_blank"><img src="https://opencollective.com/git-quick-stats/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/git-quick-stats/sponsor/3/website" target="_blank"><img src="https://opencollective.com/git-quick-stats/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/git-quick-stats/sponsor/4/website" target="_blank"><img src="https://opencollective.com/git-quick-stats/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/git-quick-stats/sponsor/5/website" target="_blank"><img src="https://opencollective.com/git-quick-stats/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/git-quick-stats/sponsor/6/website" target="_blank"><img src="https://opencollective.com/git-quick-stats/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/git-quick-stats/sponsor/7/website" target="_blank"><img src="https://opencollective.com/git-quick-stats/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/git-quick-stats/sponsor/8/website" target="_blank"><img src="https://opencollective.com/git-quick-stats/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/git-quick-stats/sponsor/9/website" target="_blank"><img src="https://opencollective.com/git-quick-stats/sponsor/9/avatar.svg"></a>

BIN
assets/GitHub-Mark.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

552
assets/base.css Normal file
View File

@@ -0,0 +1,552 @@
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined for any HTML5 element in IE 8/9.
* Correct `block` display not defined for `details` or `summary` in IE 10/11
* and Firefox.
* Correct `block` display not defined for `main` in IE 11.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
/**
* 1. Correct `inline-block` display not defined in IE 8/9.
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
*/
audio,
canvas,
progress,
video {
display: inline-block; /* 1 */
vertical-align: baseline; /* 2 */
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9/10.
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* Text-level semantics
========================================================================== */
/**
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9/10.
*/
img {
border: 0;
}
/**
* Correct overflow not hidden in IE 9/10/11.
*/
svg:not(:root) {
overflow: hidden;
}
/* Grouping content
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari.
*/
figure {
margin: 1em 40px;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
/**
* Contain overflow in all browsers.
*/
pre {
overflow: auto;
}
/**
* Address odd `em`-unit font size rendering in all browsers.
*/
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
/* Forms
========================================================================== */
/**
* Known limitation: by default, Chrome and Safari on OS X allow very limited
* styling of `select`, unless a `border` property is set.
*/
/**
* 1. Correct color not being inherited.
* Known issue: affects color of disabled elements.
* 2. Correct font properties not being inherited.
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
*/
button,
input,
optgroup,
select,
textarea {
color: inherit; /* 1 */
font: inherit; /* 2 */
margin: 0; /* 3 */
}
/**
* Address `overflow` set to `hidden` in IE 8/9/10/11.
*/
button {
overflow: visible;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
* Correct `select` style inheritance in Firefox.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
input {
line-height: normal;
}
/**
* It's recommended that you don't attempt to style these elements.
* Firefox's implementation doesn't respect box-sizing, padding, or width.
*
* 1. Address box sizing set to `content-box` in IE 8/9/10.
* 2. Remove excess padding in IE 8/9/10.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
* `font-size` values of the `input`, it causes the cursor style of the
* decrement button to change from `default` to `text`.
*/
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; /* 2 */
box-sizing: content-box;
}
/**
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
* Safari (but not Chrome) clips the cancel button when the search input has
* padding (and `textfield` appearance).
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct `color` not being inherited in IE 8/9/10/11.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
/**
* Remove default vertical scrollbar in IE 8/9/10/11.
*/
textarea {
overflow: auto;
}
/**
* Don't inherit the `font-weight` (applied by a rule above).
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
*/
optgroup {
font-weight: bold;
}
/* Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}
.container {
position: relative;
width: 100%;
max-width: 960px;
margin: 0 auto;
padding: 0 20px;
box-sizing: border-box; }
.column,
.columns {
width: 100%;
float: left;
box-sizing: border-box; }
@media (max-width: 1000px) {
.container {
margin: 30px;
width: 90%;
padding: 0;
}
.row .column, .row .columns {
float: none;
width: 100% !important;
margin: 0 0 30px 0;
}
}
/* For devices larger than 400px */
@media (min-width: 400px) {
.container {
width: 85%;
padding: 0; }
}
/* For devices larger than 550px */
@media (min-width: 550px) {
.container {
width: 80%; }
.column,
.columns {
margin-left: 4%; }
.column:first-child,
.columns:first-child {
margin-left: 0; }
.one.column,
.one.columns { width: 4.66666666667%; }
.two.columns { width: 13.3333333333%; }
.three.columns { width: 22%; }
.four.columns { width: 30.6666666667%; }
.five.columns { width: 39.3333333333%; }
.six.columns { width: 48%; }
.seven.columns { width: 56.6666666667%; }
.eight.columns { width: 65.3333333333%; }
.nine.columns { width: 74.0%; }
.ten.columns { width: 82.6666666667%; }
.eleven.columns { width: 91.3333333333%; }
.twelve.columns { width: 100%; margin-left: 0; }
.one-third.column { width: 30.6666666667%; }
.two-thirds.column { width: 65.3333333333%; }
.one-half.column { width: 48%; }
/* Offsets */
.offset-by-one.column,
.offset-by-one.columns { margin-left: 8.66666666667%; }
.offset-by-two.column,
.offset-by-two.columns { margin-left: 17.3333333333%; }
.offset-by-three.column,
.offset-by-three.columns { margin-left: 26%; }
.offset-by-four.column,
.offset-by-four.columns { margin-left: 34.6666666667%; }
.offset-by-five.column,
.offset-by-five.columns { margin-left: 43.3333333333%; }
.offset-by-six.column,
.offset-by-six.columns { margin-left: 52%; }
.offset-by-seven.column,
.offset-by-seven.columns { margin-left: 60.6666666667%; }
.offset-by-eight.column,
.offset-by-eight.columns { margin-left: 69.3333333333%; }
.offset-by-nine.column,
.offset-by-nine.columns { margin-left: 78.0%; }
.offset-by-ten.column,
.offset-by-ten.columns { margin-left: 86.6666666667%; }
.offset-by-eleven.column,
.offset-by-eleven.columns { margin-left: 95.3333333333%; }
.offset-by-one-third.column,
.offset-by-one-third.columns { margin-left: 34.6666666667%; }
.offset-by-two-thirds.column,
.offset-by-two-thirds.columns { margin-left: 69.3333333333%; }
.offset-by-one-half.column,
.offset-by-one-half.columns { margin-left: 52%; }
}
.container:after,
.row:after,
.u-cf {
content: "";
display: table;
clear: both; }
@font-face {
font-family: 'Inter';
font-display: auto;
font-style: normal;
font-weight: 400;
src: url("https://rsms.me/inter/font-files/Inter-Regular.woff2") format("woff2"),
url("https://rsms.me/inter/font-files/Inter-Regular.woff") format("woff");
}
@font-face {
font-family: 'Inter';
font-display: auto;
font-style: normal;
font-weight: 500;
src: url("https://rsms.me/inter/font-files/Inter-Medium.woff2") format("woff2"),
url("https://rsms.me/inter/font-files/Inter-Medium.woff") format("woff");
}

1
assets/icon-color.svg Normal file
View File

@@ -0,0 +1 @@
<svg data-v-29081953="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 300"><!----><defs data-v-29081953=""><!----></defs><rect data-v-29081953="" fill="#FFF7EC" x="0" y="0" width="300px" height="300px" class="logo-background-square"></rect><!----><defs data-v-29081953=""><linearGradient data-v-29081953="" gradientTransform="rotate(25)" id="b4bd9a4d-3879-4954-8296-66d4749af5c2" x1="0%" y1="0%" x2="100%" y2="0%"><stop data-v-29081953="" offset="0%" stop-color="#FF4B03" stop-opacity="1"></stop><stop data-v-29081953="" offset="100%" stop-color="#FCFF65" stop-opacity="1"></stop></linearGradient></defs><g data-v-29081953="" id="47723a31-5e2c-4996-a5a1-600c4efe3066" fill="url(#b4bd9a4d-3879-4954-8296-66d4749af5c2)" stroke="none" transform="matrix(2.749999761581421,0,0,2.749999761581421,12.500002622604121,12.500015735624721)"><path d="M83.338 49.999c-2.464 0-4.591 1.351-5.745 3.333H50v6.67h27.593c1.154 1.982 3.281 3.33 5.745 3.33a6.667 6.667 0 0 0 0-13.333zM83.338 23.332c-2.464 0-4.591 1.351-5.745 3.334H50v6.665h27.593c1.154 1.986 3.281 3.334 5.745 3.334A6.664 6.664 0 0 0 90 30a6.668 6.668 0 0 0-6.662-6.668zM23.333 53.332h19.999v6.67H23.333zM23.333 66.666h19.999v6.668H23.333zM23.333 40h19.999v6.668H23.333zM23.333 26.666h19.999v6.665H23.333zM63.336 63.332c-2.464 0-4.588 1.354-5.745 3.334H50v6.668h7.591c1.157 1.986 3.281 3.334 5.745 3.334A6.666 6.666 0 0 0 70.002 70a6.67 6.67 0 0 0-6.666-6.668zM70.004 36.665c-2.464 0-4.591 1.351-5.745 3.334H50v6.668h14.259c1.154 1.983 3.281 3.331 5.745 3.331a6.662 6.662 0 0 0 6.663-6.665 6.669 6.669 0 0 0-6.663-6.668z"></path><path d="M56.668 19.998A6.666 6.666 0 0 0 50 13.332H16.665A6.666 6.666 0 0 0 10 19.998V80a6.665 6.665 0 0 0 6.665 6.668H50A6.666 6.666 0 0 0 56.668 80H16.665V19.998h40.003z"></path></g><!----></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

1
assets/icon.svg Normal file
View File

@@ -0,0 +1 @@
<svg data-v-d3f97b9e="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 65.45217292517833 60"><!----><!----><!----><!----><g data-v-d3f97b9e="" id="8575c8ef-d4bf-4990-a029-ca75ee806ebf" transform="matrix(0.8181520700454712,0,0,0.8181520700454712,-8.18152141571045,-10.90760326385498)" stroke="none" fill="black"><path d="M83.338 49.999c-2.464 0-4.591 1.351-5.745 3.333H50v6.67h27.593c1.154 1.982 3.281 3.33 5.745 3.33a6.667 6.667 0 0 0 0-13.333zM83.338 23.332c-2.464 0-4.591 1.351-5.745 3.334H50v6.665h27.593c1.154 1.986 3.281 3.334 5.745 3.334A6.664 6.664 0 0 0 90 30a6.668 6.668 0 0 0-6.662-6.668zM23.333 53.332h19.999v6.67H23.333zM23.333 66.666h19.999v6.668H23.333zM23.333 40h19.999v6.668H23.333zM23.333 26.666h19.999v6.665H23.333zM63.336 63.332c-2.464 0-4.588 1.354-5.745 3.334H50v6.668h7.591c1.157 1.986 3.281 3.334 5.745 3.334A6.666 6.666 0 0 0 70.002 70a6.67 6.67 0 0 0-6.666-6.668zM70.004 36.665c-2.464 0-4.591 1.351-5.745 3.334H50v6.668h14.259c1.154 1.983 3.281 3.331 5.745 3.331a6.662 6.662 0 0 0 6.663-6.665 6.669 6.669 0 0 0-6.663-6.668z"></path><path d="M56.668 19.998A6.666 6.666 0 0 0 50 13.332H16.665A6.666 6.666 0 0 0 10 19.998V80a6.665 6.665 0 0 0 6.665 6.668H50A6.666 6.666 0 0 0 56.668 80H16.665V19.998h40.003z"></path></g><!----></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

1
assets/logo-color.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.2 KiB

1
assets/logo.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.9 KiB

139
assets/style.css Normal file
View File

@@ -0,0 +1,139 @@
body {
font-family: "Inter", sans-serif;
font-size: 16px;
font-weight: 400;
line-height: 28px;
}
.container {
max-width: 1200px;
}
.header {
margin: 60px 0 90px 0;
text-align: left;
}
nav {
text-align: right;
}
nav a {
margin: 0 0 0 30px;
}
nav .github img {
max-width: 32px;
height: auto;
vertical-align: middle;
display: inline-block;
}
.features .columns {
margin-bottom: 30px;
}
.download a {
margin: 0 0 0 15px;
}
.footer {
padding-top: 30px;
margin: 30px 0;
border-top: 1px solid #ddd;
color: #777;
}
.button {
background: #7f2aff;
display: inline-block;
text-align: center;
font-weight: 500;
font-size: 1.3em;
color: #fff;
border-radius: 100px;
padding: 15px 30px;
min-width: 200px;
}
.button:hover {
background: #000;
color: #fff;
}
.notice {
background: #fafafa;
border-left: 4px solid #ddd;
color: #666;
padding: 5px 15px;
}
h1,
h2,
h3,
h4,
h5 {
font-weight: 400;
/*color: #7f2aff;*/
margin: 15px 0 15px 0;
}
h1 {
font-weight: 500;
font-size: 2.5em;
line-height: 1.5em;
}
h2 {
font-size: 2em;
line-height: 1.4em;
}
h3 {
font-size: 1.6em;
line-height: 1.6em;
color: #888;
}
section {
margin-bottom: 100px;
}
code {
color: #c63370;
}
a {
color: #c68933;
font-weight: bold;
text-decoration: none;
}
a:hover {
color: inherit;
}
img {
max-width: 100%;
}
.center {
text-align: center;
}
.logo {
padding-top: 3px;
}
@media screen and (max-width: 490px) {
.header {
margin: 0;
}
nav {
text-align: left;
}
nav a {
margin: 0 10px 0 0;
}
.container {
width: auto;
padding: 0;
margin: 30px;
}
}
.btn {
background-color: #0069d9;
color: white;
padding: 5px;
border-radius: 5px;
padding-left: 10px;
padding-right: 10px;
}

View File

@@ -1,399 +0,0 @@
#!/usr/bin/env bash
set -o nounset
set -o errexit
_since=${_GIT_SINCE:-}
if [ ! -z ${_since} ]
then _since="--since=$_since"
fi
_until=${_GIT_UNTIL:-}
if [ ! -z ${_until} ]
then _until="--until=$_until"
fi
_pathspec=${_GIT_PATHSPEC:-}
if [ ! -z "${_pathspec}" ]
then _pathspec="-- . $_pathspec"
fi
_limit=${_GIT_LIMIT:-}
if [ ! -z ${_limit} ]
then _limit=$_limit
else
_limit=10
fi
show_menu() {
NORMAL=`echo "\033[m"`
MENU=`echo "\033[36m"`
NUMBER=`echo "\033[33m"`
FGRED=`echo "\033[41m"`
RED_TEXT=`echo "\033[31m"`
ENTER_LINE=`echo "\033[33m"`
echo -e ""
echo -e "${RED_TEXT} Generate: ${NORMAL}"
echo -e "${MENU} ${NUMBER} 1)${MENU} Contribution stats (by author) ${NORMAL}"
echo -e "${MENU} ${NUMBER} 2)${MENU} Git changelogs (last $_limit)${NORMAL}"
echo -e "${MENU} ${NUMBER} 3)${MENU} My daily status ${NORMAL}"
echo -e "${RED_TEXT} List: ${NORMAL}"
echo -e "${MENU} ${NUMBER} 4)${MENU} Branch tree view (last $_limit)${NORMAL}"
echo -e "${MENU} ${NUMBER} 5)${MENU} All branches (sorted by most recent commit) ${NORMAL}"
echo -e "${MENU} ${NUMBER} 6)${MENU} All contributors (sorted by name) ${NORMAL}"
echo -e "${MENU} ${NUMBER} 7)${MENU} Git commits per author ${NORMAL}"
echo -e "${MENU} ${NUMBER} 8)${MENU} Git commits per date ${NORMAL}"
echo -e "${MENU} ${NUMBER} 9)${MENU} Git commits per month ${NORMAL}"
echo -e "${MENU} ${NUMBER} 10)${MENU} Git commits per weekday ${NORMAL}"
echo -e "${MENU} ${NUMBER} 11)${MENU} Git commits per hour ${NORMAL}"
echo -e "${RED_TEXT} Suggest: ${NORMAL}"
echo -e "${MENU} ${NUMBER} 12)${MENU} Code reviewers (based on git history) ${NORMAL}"
echo -e ""
echo -e "${ENTER_LINE}Please enter a menu option or ${RED_TEXT}press enter to exit. ${NORMAL}"
read opt
}
function option_picked() {
COLOR='\033[01;31m'
RESET='\033[00;00m'
MESSAGE=${@:-"${RESET}Error: No message passed"}
echo -e "${COLOR}${MESSAGE}${RESET}"
echo ""
}
function detailedGitStats() {
option_picked "Contribution stats (by author):"
git log --no-merges --numstat --pretty="format:commit %H%nAuthor: %an <%ae>%nDate: %ad%n%n%w(0,4,4)%B%n" $_since $_until $_pathspec | LC_ALL=C awk '
function printStats(author) {
printf "\t%s:\n", author
if( more["total"] > 0 ) {
printf "\t insertions: %d (%.0f%%)\n", more[author], (more[author] / more["total"] * 100)
}
if( less["total"] > 0 ) {
printf "\t deletions: %d (%.0f%%)\n", less[author], (less[author] / less["total"] * 100)
}
if( file["total"] > 0 ) {
printf "\t files: %d (%.0f%%)\n", file[author], (file[author] / file["total"] * 100)
}
if(commits["total"] > 0) {
printf "\t commits: %d (%.0f%%)\n", commits[author], (commits[author] / commits["total"] * 100)
}
if ( first[author] != "" ) {
printf "\t lines changed: %s\n", more[author] + less[author]
printf "\t first commit: %s\n", first[author]
printf "\t last commit: %s\n", last[author]
}
printf "\n"
}
/^Author:/ {
author = $2 " " $3
commits[author] += 1
commits["total"] += 1
}
/^Date:/ {
$1="";
first[author] = substr($0, 2)
if(last[author] == "" ) { last[author] = first[author] }
}
/^[0-9]/ {
more[author] += $1
less[author] += $2
file[author] += 1
more["total"] += $1
less["total"] += $2
file["total"] += 1
}
END {
for (author in commits) {
if (author != "total") {
printStats(author)
}
}
printStats("total")
}'
}
function suggestReviewers() {
option_picked "Suggested code reviewers (based on git history):"
git log --no-merges $_since $_until --pretty=%an $_pathspec $* | head -n 100 | sort | uniq -c | sort -nr | LC_ALL=C awk '
{ args[NR] = $0; }
END {
for (i = 1; i <= NR; ++i) {
printf "%s\n", args[i]
}
}' | column -t -s,
}
function commitsByMonth() {
option_picked "Git commits by month:"
echo -e "\tmonth\tsum"
for i in Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
do
echo -en "\t$i\t"
echo $(git shortlog -n --no-merges --format='%ad %s' $_since $_until | grep " $i " | wc -l)
done | awk '{
count[$1] = $2
total += $2
}
END{
for (month in count) {
s="|";
percent = ((count[month] / total) * 100) / 1.25;
for (i = 1; i <= percent; ++i) {
s=s"█"
}
printf( "\t%s\t%-0s\t%s\n", month, count[month], s );
}
}' | LC_TIME="en_EN.UTF-8" sort -M
}
function commitsByWeekday() {
option_picked "Git commits by weekday:"
echo -e "\tday\tsum"
for i in Mon Tue Wed Thu Fri Sat Sun
do
echo -en "\t$i\t"
echo $(git shortlog -n --no-merges --format='%ad %s' $_since $_until | grep "$i " | wc -l)
done | awk '{
}
NR == FNR {
count[$1] = $2;
total += $2;
next
}
END{
for (day in count) {
s="|";
percent = ((count[day] / total) * 100) / 1.25;
for (i = 1; i <= percent; ++i) {
s=s"█"
}
printf( "\t%s\t%-0s\t%s\n", day, count[day], s );
}
}' | sort -k 2 -n -r
}
function commitsByHour() {
option_picked "Git commits by hour:"
echo -e "\thour\tsum"
for i in `seq -w 0 23`
do
echo -ne "\t$i\t"
echo $(git shortlog -n --no-merges --format='%ad %s' $_since $_until | grep " $i:" | wc -l)
done | awk '{
count[$1] = $2
total += $2
}
END{
for (hour in count) {
s="|";
percent = ((count[hour] / total) * 100) / 1.25;
for (i = 1; i <= percent; ++i) {
s=s"█"
}
printf( "\t%s\t%-0s\t%s\n", hour, count[hour], s );
}
}' | sort
}
function commitsPerDay() {
option_picked "Git commits per date:";
git log --no-merges $_since $_until --date=short --format='%ad' $_pathspec | sort | uniq -c
}
function commitsPerAuthor() {
option_picked "Git commits per author:"
git shortlog $_since $_until --no-merges -n -s | sort -nr | LC_ALL=C awk '
{ args[NR] = $0; sum += $0 }
END {
for (i = 1; i <= NR; ++i) {
printf "%s,%2.1f%%\n", args[i], 100 * args[i] / sum
}
}' | column -t -s,
}
function myDailyStats() {
option_picked "My daily status:"
git diff --shortstat '@{0 day ago}' | sort -nr | tr ',' '\n' | LC_ALL=C awk '
{ args[NR] = $0; }
END {
for (i = 1; i <= NR; ++i) {
printf "\t%s\n", args[i]
}
}'
echo -e "\t" $(git log --author="$(git config user.name)" --no-merges --since=$(date "+%Y-%m-%dT00:00:00") --until=$(date "+%Y-%m-%dT23:59:59") --reverse | grep commit | wc -l) "commits"
}
function contributors() {
option_picked "All contributors (sorted by name):"
git log --no-merges $_since $_until --format='%aN' $_pathspec | sort -u | cat -n
}
function branchTree() {
option_picked "Branching tree view:"
git log --graph --abbrev-commit $_since $_until --decorate --format=format:'--+ Commit: %h %n | Date: %aD (%ar) %n'' | Message: %s %d %n'' + Author: %an %n' --all $_exclude | head -n $((_limit*5))
}
function branchesByDate() {
option_picked "All branches (sorted by most recent commit):"
git for-each-ref --sort=committerdate refs/heads/ --format='[%(authordate:relative)] %(authorname) %(refname:short)' | cat -n
}
function changelogs() {
option_picked "Git changelogs:"
NEXT=$(date +%F)
git log --no-merges --format="%cd" --date=short $_since $_until $_pathspec | sort -u -r | head -n $_limit | while read DATE ; do
echo
echo "[$DATE]"
GIT_PAGER=cat git log --no-merges --format=" * %s" --since=$DATE --until=$NEXT
NEXT=$DATE
done
}
# Check if we are currently in a git repo.
git rev-parse --is-inside-work-tree > /dev/null
if [ $# -eq 1 ]
then
case $1 in
"suggestReviewers")
suggestReviewers
;;
"detailedGitStats")
detailedGitStats
;;
"branchTree")
branchTree
;;
"commitsPerDay")
commitsPerDay
;;
"commitsPerAuthor")
commitsPerAuthor
;;
"myDailyStats")
myDailyStats
;;
"contributors")
contributors
;;
"branchesByDate")
branchesByDate
;;
"changelogs")
changelogs
;;
"commitsByWeekday")
commitsByWeekday
;;
"commitsByHour")
commitsByHour
;;
"commitsByMonth")
commitsByMonth
;;
*)
echo "Invalid argument. Possible arguments: suggestReviewers, detailedGitStats, commitsPerDay, commitsByMonth, commitsByWeekday, commitsByHour, commitsPerAuthor, myDailyStats, contributors, branchTree, branchesByDate, changelogs"
;;
esac
exit 0;
fi
if [ $# -gt 1 ]
then
echo "Usage: git quick-stats <optional-command-to-execute-directly>";
exit 1;
fi
clear
show_menu
while [ opt != '' ]
do
if [[ $opt = "" ]]; then
exit;
else
clear
case $opt in
1)
detailedGitStats
show_menu
;;
2)
changelogs
show_menu
;;
3)
myDailyStats
show_menu
;;
4)
branchTree
show_menu
;;
5)
branchesByDate
show_menu
;;
6)
contributors
show_menu
;;
7)
commitsPerAuthor
show_menu
;;
8)
commitsPerDay
show_menu
;;
9)
commitsByMonth
show_menu
;;
10)
commitsByWeekday
show_menu
;;
11)
commitsByHour
show_menu
;;
12)
suggestReviewers
show_menu
;;
q)
exit
;;
\n)
exit
;;
*)
clear
option_picked "Pick an option from the menu"
show_menu
;;
esac
fi
done

366
index.html Normal file
View File

@@ -0,0 +1,366 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<title>Git quick statistics is a simple and efficient way to access various statistics in git repository.</title>
<meta name="description"
content="▁▅▆▃▅ Any git repository may contain tons of information about commits, contributors, and files. Extracting this information is not always trivial, mostly because there are a gadzillion options to a gadzillion git commands I dont think there is a single person alive who knows them all. Probably not even Linus Torvalds himself :).">
<meta name="keywords" content="git, repository, github, statistics, linux, docker, windows">
<link href="assets/base.css" rel="stylesheet" type="text/css">
<link href="assets/style.css" rel="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
<link rel="shortcut icon" href="assets/icon.svg" type="image/x-icon">
<script defer data-domain="git-quick-stats.sh" src="https://beacon.static-data.com/js/script.js"></script>
</head>
<body>
<div id="wrap" class="container">
<header class="header">
<div class="row">
<div class="logo six columns">
<a href="https://git-quick-stats.sh/"><img width="40%" src="assets/logo.svg"
alt="git-quick-stats logo"></a>
</div>
<nav class="six columns">
<a href="#getting-started" class="github">Getting started</a>
<a href="#docs" class="github">Docs</a>
<a href="#support" class="github">Donate 🙌</a>
<a href="https://github.com/arzzen/git-quick-stats" class="github">GitHub
<img alt="github" src="assets/GitHub-Mark.png"></a>
</nav>
</div>
</header>
<section class="splash center">
<h1>
<span><u>Simple way</u> to access various <br>statistics in <u>git</u> repository. </span>
</h1>
<br>
<div class="center">
<p class="download">
<strong>Installation</strong>
<a href="https://github.com/arzzen/git-quick-stats#windows">Windows</a>
<a href="https://github.com/arzzen/git-quick-stats#unix-and-linux">Linux</a>
<a href="https://github.com/arzzen/git-quick-stats#macos-homebrew">macOS</a>
<a href="https://github.com/arzzen/git-quick-stats#docker">Docker</a>
</p>
<p>
<em>or you can install directly:</em>
<br>
<code>
bash <(curl -s https://git-quick-stats.sh/install)
</code>
</p>
</div>
<div class="center">
<img src="https://user-images.githubusercontent.com/8818630/154823670-f42a111b-45f4-47fc-aea7-80059827c8e6.png"
alt="git quick stats">
</div>
</section>
<section class="features">
<h2 class="center">
<span>Features</span>
</h2>
<div class="row">
<div class="four columns">
<h3>Multiplatform</h3>
Works on Windows, Linux and macOS (or you can use the Docker image).
</div>
<div class="four columns">
<h3>Contribution stats</h3>
List of everyone who contributed to the repository.
</div>
<div class="four columns">
<h3>Code reviewers</h3>
Find the best people to contact to review code.
</div>
</div>
<div class="row">
<div class="four columns">
<h3>Git changelogs</h3>
Easy to fetch git changelogs.
</div>
<div class="four columns">
<h3>Dependency</h3>
You can run on every OS with a Bash shell.
</div>
<div class="four columns">
<h3>Open source</h3>
Git-quick-stats is free, open source software licensed under MIT.
</div>
</div>
</section>
<section>
<h2 class="center">
<span>More screenshots</span>
</h2>
<div class="row">
<div class="">
<img src="https://user-images.githubusercontent.com/8818630/154823677-e34ca867-ae61-4755-bf89-c877f809c591.png"
alt="git commits by weekday">
</div>
<div class="">
<img src="https://user-images.githubusercontent.com/8818630/154823679-bdadc26c-c644-4a01-b625-85e330f85d41.png"
alt="git commits by hour">
</div>
</div>
</section>
<section>
<h2 class="center" id="getting-started">Getting started</h2>
<ul>
<li>
<strong>Installation</strong>
<ul>
<li>
<a href="https://github.com/arzzen/git-quick-stats#windows">Windows</a>
</li>
<li>
<a href="https://github.com/arzzen/git-quick-stats#unix-and-linux">Linux</a>
</li>
<li>
<a href="https://github.com/arzzen/git-quick-stats#macos-homebrew">macOS</a>
</li>
<li>
<a href="https://github.com/arzzen/git-quick-stats#docker">Docker</a>
</li>
</ul>
<br>
</li>
<li><strong>Interactive usage</strong>
<ul>
<li>
git-quick-stats has a built-in interactive menu that can be executed as such:
<br>
<code>git-quick-stats</code>
<br>
Or
<br>
<code>git quick-stats</code>
</li>
</ul>
</li><br>
<li><strong>Non-interactive usage</strong>
<ul>
<li>
For those who prefer to utilize command-line options, git-quick-stats also has a
non-interactive mode supporting both short and long options:
<br>
<code>git-quick-stats [optional-command-to-execute-directly]</code>
<br>
Or
<br>
<code>git quick-stats [optional-command-to-execute-directly]</code>
</li>
<li>
Command-line arguments:
<br>
<code>-r, --suggest-reviewers</code>
show the best people to contact to review code<br>
<code>-T, --detailed-git-stats</code>
- give a detailed list of git stats<br>
<code>-R, --git-stats-by-branch</code>
see detailed list of git stats by branch<br>
<code>-d, --commits-per-day</code>
displays a list of commits per day<br>
<code>-m, --commits-by-month</code>
displays a list of commits per month<br>
<code>-w, --commits-by-weekday</code>
displays a list of commits per weekday<br>
<code>-o, --commits-by-hour</code>
displays a list of commits per hour<br>
<code>-A, --commits-by-author-by-hour</code>
displays a list of commits per hour by author<br>
<code>-a, --commits-per-author</code>
displays a list of commits per author<br>
<code>-S, --my-daily-stats</code>
see your current daily stats<br>
<code>-C, --contributors</code>
see a list of everyone who contributed to the repo<br>
<code>-b, --branch-tree</code>
show an ASCII graph of the git repo branch history<br>
<code>-D, --branches-by-date</code>
show branches by date<br>
<code>-c, --changelogs</code>
see changelogs<br>
<code>-L, --changelogs-by-author</code>
see changelogs by author<br>
<code>-j, --json-output</code>
save git log as a JSON formatted file to a specified area<br>
<code>-h, -?, --help</code>
display this help text in the terminal<br>
</li>
</ul>
</li>
</ul>
</section>
<section>
<h2 class="center" id="docs">
<span>Documentation</span>
</h2>
<div>
<ul>
<li><strong>Git log since and until</strong>
<p>
You can set the variables _GIT_SINCE and/or _GIT_UNTIL before running git-quick-stats to
limit the git log. <br>
These work similar to git's built-in --since and --until log options.
</p>
<code>
export _GIT_SINCE="2017-01-20"<br>
export _GIT_UNTIL="2017-01-22"
</code>
<p>
Once set, run git quick-stats as normal. Note that this affects all stats that parse the git
log history until unset.
</p>
</li>
<li><strong>Git log limit</strong>
<p>
You can set variable _GIT_LIMIT for limited output. It will affect the "changelogs" and
"branch tree" options.
</p>
<p>
<code>
export _GIT_LIMIT=20
</code>
</p>
</li>
<li><strong>Git pathspec</strong>
<p>
You can exclude a directory from the stats by using pathspec
</p>
<code>
export _GIT_PATHSPEC=':!directory'
</code>
<p>
You can also exclude files from the stats. Note that it works with any alphanumeric, glob,
or regex that git respects.
</p>
<p>
<code>
export _GIT_PATHSPEC=':!package-lock.json'
</code>
</p>
</li>
<li>
<strong>Git merge view strategy</strong>
<p>
You can set the variable _GIT_MERGE_VIEW to enable merge commits to be part of the stats by
setting _GIT_MERGE_VIEW to enable. You can also choose to only show merge commits by setting
_GIT_MERGE_VIEW to exclusive. Default is to not show merge commits. These work similar to
git's built-in --merges and --no-merges log options.
</p>
<p>
<code>
export _GIT_MERGE_VIEW="enable"<br>
export _GIT_MERGE_VIEW="exclusive"
</code>
</p>
</li>
<li><strong>Color themes</strong>
<p>
You can change to the legacy color scheme by toggling the variable _MENU_THEME between
default and legacy
</p>
<p>
<code>
export _MENU_THEME=legacy
</code>
</p>
</li>
</ul>
</div>
</section>
<section>
<h2 class="center" id="support">
<span>Want to show your support?<br>
Donate via Bitcoin or buy me coffee</span>
</h2>
<div>
<div class="center">
If you or your company use this project or like what We're doing, <br>
please consider backing us so We can continue maintaining and evolving this project and new ones.
<br><br>
</div>
<div>
<h3><strong>Why donate?</strong></h3>
<p>Many people love this service and have asked to donate. If you want to
kick in to help me
cover those costs, that would be awesome!</p>
<br>
</div>
</div>
<div>
<div>
<h3><strong>Choose what you'd like to donate from the items below then click the button:</strong>
</h3>
<div class="col-lg-6 blog-details-content">
<h3 class="mt-3 mb-1">If you'd prefer Crypto</h3>
<div class="text">
<br>
<a href="https://nowpayments.io/donation?api_key=SMHBNKR-MYRMBFK-PHXAAHK-3GP6TZA" target="_blank"><img src="https://nowpayments.io/images/embeds/donation-button-black.svg" alt="Crypto donation button by NOWPayments"></a>
</div>
</div>
<br>
<div class="col-lg-8">
<div class="mt-50">
<h3 class="mt-3 mb-1">2€ — A large cappuccino 😍 at my local</h3>
<p class="text">
I'm in this for the long run. Things just work better with
coffee! I like to grab a cappuccino from my local before
beginning the things that take mental energy.
</p><a href="https://ko-fi.com/lukasmestan" target="_blank" class="mt-1"><img
src="https://www.ko-fi.com/img/githubbutton_sm.svg"></a>
</div>
</div>
<br>
<div class="col-lg-8">
<h3 class="mt-5 mb-1">Bill for .sh domain ⚡️</h3>
<p class="text">
The price for the .sh domain is close to € 60 per year, so
support me with a monthly donation and help me continue my
activities.
</p><a href="https://opencollective.com/git-quick-stats/contribute/sponsor-8066/checkout"
target="_blank" class="btn btn-primary btn-sm mt-1"><span class="pl-2">Donate 10€ /
month</span></a>
</div>
<br>
<div class="col-lg-8">
<h3 class="mt-5 mb-1">Github sponsor</h3>
<p class="text">
The easiest way to support us financially is by buying or
subscribing to one of our tiers. <br>If you'd like to make a
donation to keep us going, support us via Github Sponsors.
<br><iframe src="https://github.com/sponsors/arzzen/button" title="Sponsor arzzen"
style="border: 0px none;" width="116" height="35"></iframe></p>
</div>
</div>
<div>
<h1 style="text-align: center;">Thank you for your support! 🙌</h1>
</div>
</div>
</section>
<footer class="footer">
© 2017-2021. All rights reserved
</footer>
</div>
</body>
</html>

80
install Executable file
View File

@@ -0,0 +1,80 @@
#!/usr/bin/env bash
set -e +o pipefail
url="https://git-quick-stats.sh"
exit_with=0
b="\033[0;36m"
g="\033[0;32m"
r="\033[0;31m"
e="\033[0;90m"
x="\033[0m"
say() {
echo -e "$1"
}
show_title() {
say "
GIT-QUICK-STATS
Simple way to access various statistics in git repository.
Documentation at ${g}https://git-quick-stats.sh/#docs${x}
"
}
show_help() {
say "
Interactive usage
git-quick-stats has a built-in interactive menu that can be executed as such:
${b}git-quick-stats${x}
Or
${b}git quick-stats${x}
Non-interactive usage
For those who prefer to utilize command-line options,
git-quick-stats also has a non-interactive mode supporting both short and long options:
${b}git-quick-stats [optional-command-to-execute-directly]${x}
Or
${b}git quick-stats [optional-command-to-execute-directly]${x}
Command-line arguments:
-r, --suggest-reviewers show the best people to contact to review code
-T, --detailed-git-stats - give a detailed list of git stats
-R, --git-stats-by-branch see detailed list of git stats by branch
-d, --commits-per-day displays a list of commits per day
-m, --commits-by-month displays a list of commits per month
-w, --commits-by-weekday displays a list of commits per weekday
-o, --commits-by-hour displays a list of commits per hour
-A, --commits-by-author-by-hour displays a list of commits per hour by author
-a, --commits-per-author displays a list of commits per author
-S, --my-daily-stats see your current daily stats
-C, --contributors see a list of everyone who contributed to the repo
-b, --branch-tree show an ASCII graph of the git repo branch history
-D, --branches-by-date show branches by date
-c, --changelogs see changelogs
-L, --changelogs-by-author see changelogs by author
-j, --json-output save git log as a JSON formatted file to a specified area
-h, -?, --help display this help text in the terminal
"
}
show_title
say "Installing..."
git clone -q https://github.com/arzzen/git-quick-stats.git && cd git-quick-stats
sudo make install
say ""
exit ${exit_with};