41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Log output:
 | |
| #
 | |
| # * 51c333e    (12 days)    <Gary Bernhardt>   add vim-eunuch
 | |
| #
 | |
| # The time massaging regexes start with ^[^<]* because that ensures that they
 | |
| # only operate before the first "<". That "<" will be the beginning of the
 | |
| # author name, ensuring that we don't destroy anything in the commit message
 | |
| # that looks like time.
 | |
| #
 | |
| # The log format uses } characters between each field, and `column` is later
 | |
| # used to split on them. A } in the commit subject or any other field will
 | |
| # break this.
 | |
| 
 | |
| HASH="%C(yellow)%h%Creset"
 | |
| RELATIVE_TIME="%Cgreen(%ar)%Creset"
 | |
| AUTHOR="%C(bold blue)<%an>%Creset"
 | |
| REFS="%C(red)%d%Creset"
 | |
| SUBJECT="%s"
 | |
| 
 | |
| FORMAT="$HASH}$RELATIVE_TIME}$AUTHOR}$REFS $SUBJECT"
 | |
| 
 | |
| show_git_head() {
 | |
|     pretty_git_log -1
 | |
|     git show -p --pretty="tformat:"
 | |
| }
 | |
| 
 | |
| pretty_git_log() {
 | |
|     git log --graph --abbrev-commit --date=relative --pretty="tformat:${FORMAT}" $* |
 | |
|         # Repalce (2 years ago) with (2 years)
 | |
|         sed -Ee 's/(^[^<]*) ago)/\1)/' |
 | |
|         # Replace (2 years, 5 months) with (2 years)
 | |
|         sed -Ee 's/(^[^<]*), [[:digit:]]+ .*months?)/\1)/' |
 | |
|         # Line columns up based on } delimiter
 | |
|         column -s '}' -t |
 | |
|         # Page only if we need to
 | |
|         less -FXRS
 | |
| }
 | |
| 
 |