mirror of
https://github.com/Fakerr/git-recall.git
synced 2026-09-16 02:16:18 -04:00
Compare commits
40 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a6de1b235c | ||
|
|
ae3ed35a06 | ||
|
|
436a31cea1 | ||
|
|
7a41403687 | ||
|
|
c00f10a39e | ||
|
|
d18d910300 | ||
|
|
cf6849dfc6 | ||
|
|
2a5db45188 | ||
|
|
b8b00c832a | ||
|
|
f56c9309c6 | ||
|
|
740173deeb | ||
|
|
fa1f9036ba | ||
|
|
83496bf8c5 | ||
|
|
47e6d4eb15 | ||
|
|
47bbdaddbb | ||
|
|
acc413e8a1 | ||
|
|
91776f73ca | ||
|
|
39fccbbc6e | ||
|
|
72822bb787 | ||
|
|
db51c14ad9 | ||
|
|
e2fb61c533 | ||
|
|
35ac6970af | ||
|
|
a6fce2c863 | ||
|
|
be62cc387d | ||
|
|
11a51477c3 | ||
|
|
a177fb00f0 | ||
|
|
594f2bdca8 | ||
|
|
42faeda992 | ||
|
|
515dd02680 | ||
|
|
8db954a2d6 | ||
|
|
d7aa17d02c | ||
|
|
8638fe7960 | ||
|
|
135cb9a195 | ||
|
|
9c5302802b | ||
|
|
bf75cc2972 | ||
|
|
16623b8537 | ||
|
|
103fb21cfa | ||
|
|
17342d8c35 | ||
|
|
408c8b66f6 | ||
|
|
5950fd8ba7 |
4
Makefile
4
Makefile
|
|
@ -1,5 +1,5 @@
|
||||||
PREFIX = /usr/local
|
PREFIX ?= /usr/local
|
||||||
BINPREFIX = "$(PREFIX)/bin"
|
BINPREFIX ?= "$(PREFIX)/bin"
|
||||||
|
|
||||||
LIB=git-recall
|
LIB=git-recall
|
||||||
|
|
||||||
|
|
|
||||||
15
README.md
15
README.md
|
|
@ -15,17 +15,23 @@ check what you or other contributors in your team did. It doesn't aim to be a re
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ git recall [-a <author name>]
|
$ git recall [-a <author name>]
|
||||||
[-d <days-ago>]
|
[-d <days-ago>]
|
||||||
|
[-b <branch name>]
|
||||||
|
[-p <paths>]
|
||||||
[-f]
|
[-f]
|
||||||
[-h]
|
[-h]
|
||||||
|
[-v]
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Options description:
|
##### Options description:
|
||||||
|
|
||||||
- `-a` - Restrict search for a specific user (use -a "all" for all users)
|
- `-a` - Restrict search for a specific user (use -a "all" for all users)
|
||||||
- `-d` - Display commits for the last n days
|
- `-d` - Display commits for the last n days
|
||||||
|
- `-b` - Specify branch to display commits from
|
||||||
|
- `-p` - Specify path/s or file/s to display commits from
|
||||||
- `-f` - Fetch the latest changes
|
- `-f` - Fetch the latest changes
|
||||||
- `-h` - Show help screen
|
- `-h` - Show help screen
|
||||||
|
- `-v` - Show version
|
||||||
|
|
||||||
##### How to use:
|
##### How to use:
|
||||||
|
|
||||||
|
|
@ -65,10 +71,10 @@ $ git recall -f
|
||||||
|
|
||||||
##### Without using tools
|
##### Without using tools
|
||||||
|
|
||||||
```
|
|
||||||
You can install it by simply copying the `git-recall` script into any existing path
|
You can install it by simply copying the `git-recall` script into any existing path
|
||||||
(e.g. /usr/local/bin) or create your own directory and add it to the 'PATH' variable.
|
(e.g. `/usr/local/bin`) or create your own directory and add it to the `PATH` variable.
|
||||||
```
|
|
||||||
|
Make sure to run `chmod +x /usr/local/bin/git-recall` or the directory in which you copied it to.
|
||||||
|
|
||||||
##### Using NPM
|
##### Using NPM
|
||||||
Use `npm` to install the project.
|
Use `npm` to install the project.
|
||||||
|
|
@ -86,6 +92,7 @@ $ sudo make install
|
||||||
```
|
```
|
||||||
## Requirements
|
## Requirements
|
||||||
- OS: Linux or OSX
|
- OS: Linux or OSX
|
||||||
|
- Bash 4.3 or more
|
||||||
- Tools: git, less, sed
|
- Tools: git, less, sed
|
||||||
|
|
||||||
##### Optional Requirements
|
##### Optional Requirements
|
||||||
|
|
|
||||||
96
git-recall
96
git-recall
|
|
@ -7,7 +7,9 @@ usage() {
|
||||||
Usage: git recall [options]
|
Usage: git recall [options]
|
||||||
Options:
|
Options:
|
||||||
-d, --date Show logs for last n days.
|
-d, --date Show logs for last n days.
|
||||||
-a, --author Author name.
|
-a, --author Author name (use -a "all" for all users).
|
||||||
|
-b, --branch Specify branch to display commits from.
|
||||||
|
-p --path Specify path or filename to display commits from.
|
||||||
-f, --fetch fetch commits.
|
-f, --fetch fetch commits.
|
||||||
-h, --help This message.
|
-h, --help This message.
|
||||||
-v, --version Show version.
|
-v, --version Show version.
|
||||||
|
|
@ -16,6 +18,7 @@ EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
# Global variables
|
# Global variables
|
||||||
|
orig_stty=$(stty -g) # Store original terminal settings
|
||||||
AUTHOR=""
|
AUTHOR=""
|
||||||
FETCH=false
|
FETCH=false
|
||||||
GIT_FORMAT=""
|
GIT_FORMAT=""
|
||||||
|
|
@ -23,9 +26,11 @@ GIT_LOG=""
|
||||||
COMMITS=""
|
COMMITS=""
|
||||||
SINCE="1 days ago" # show logs for last day by default
|
SINCE="1 days ago" # show logs for last day by default
|
||||||
COMMITS_UNCOL=() # commits without colors
|
COMMITS_UNCOL=() # commits without colors
|
||||||
SED_BIN="" # Sed option to use according OS.
|
SED_CMD="" # Sed command to use according OS.
|
||||||
LESSKEY=false
|
LESSKEY=false
|
||||||
VERSION="1.1.12"
|
VERSION="1.2.4"
|
||||||
|
BRANCH=""
|
||||||
|
SEARCH_PATH=""
|
||||||
|
|
||||||
# Set key bindings.
|
# Set key bindings.
|
||||||
au="`echo -e '\e[A'`" # arrow up
|
au="`echo -e '\e[A'`" # arrow up
|
||||||
|
|
@ -37,7 +42,7 @@ ad_1="j" # arrow down
|
||||||
nl_1="e" # expand
|
nl_1="e" # expand
|
||||||
|
|
||||||
# Colored output.
|
# Colored output.
|
||||||
colored() {
|
function colored() {
|
||||||
GREEN=$(tput setaf 4)
|
GREEN=$(tput setaf 4)
|
||||||
YELLOW=$(tput setaf 3)
|
YELLOW=$(tput setaf 3)
|
||||||
NORMAL=$(tput sgr0)
|
NORMAL=$(tput sgr0)
|
||||||
|
|
@ -45,13 +50,19 @@ colored() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Uncolored output.
|
# Uncolored output.
|
||||||
uncolored() {
|
function uncolored() {
|
||||||
GREEN=""
|
GREEN=""
|
||||||
YELLOW=""
|
YELLOW=""
|
||||||
NORMAL=""
|
NORMAL=""
|
||||||
REVERSE=""
|
REVERSE=""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Clear screen from cursor to end of screen
|
||||||
|
function clear_screen() {
|
||||||
|
echo -e "\E[J"
|
||||||
|
tput cuu1
|
||||||
|
}
|
||||||
|
|
||||||
# Are we in a git repo?
|
# Are we in a git repo?
|
||||||
if [[ ! -d ".git" ]] && ! git rev-parse --git-dir &>/dev/null; then
|
if [[ ! -d ".git" ]] && ! git rev-parse --git-dir &>/dev/null; then
|
||||||
echo "abort: not a git repository." 1>&2
|
echo "abort: not a git repository." 1>&2
|
||||||
|
|
@ -80,6 +91,14 @@ while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do
|
||||||
usage
|
usage
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
|
-b | --branch )
|
||||||
|
BRANCH="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-p | --path )
|
||||||
|
SEARCH_PATH="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
* )
|
* )
|
||||||
echo "abort: unknown argument" 1>&2
|
echo "abort: unknown argument" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -100,11 +119,6 @@ else
|
||||||
uncolored
|
uncolored
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check if lesskey is installed.
|
|
||||||
if command -v lesskey &> /dev/null; then
|
|
||||||
LESSKEY=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set AUTHOR to current user if no param passed or display for all users if param equal to "all".
|
# Set AUTHOR to current user if no param passed or display for all users if param equal to "all".
|
||||||
if [[ ! -n $AUTHOR ]]; then
|
if [[ ! -n $AUTHOR ]]; then
|
||||||
AUTHOR=$(git config user.name 2>/dev/null)
|
AUTHOR=$(git config user.name 2>/dev/null)
|
||||||
|
|
@ -117,7 +131,7 @@ if [[ $FETCH == true ]]; then
|
||||||
echo "${GREEN}Fetching changes...${NORMAL}"
|
echo "${GREEN}Fetching changes...${NORMAL}"
|
||||||
git fetch --all &> /dev/null
|
git fetch --all &> /dev/null
|
||||||
tput cuu1
|
tput cuu1
|
||||||
tput ed # clear screen
|
clear_screen
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Log template.
|
# Log template.
|
||||||
|
|
@ -126,7 +140,7 @@ GIT_FORMAT="%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%a
|
||||||
# Log command.
|
# Log command.
|
||||||
GIT_LOG="git log --pretty=format:'${GIT_FORMAT}'
|
GIT_LOG="git log --pretty=format:'${GIT_FORMAT}'
|
||||||
--author \"$AUTHOR\"
|
--author \"$AUTHOR\"
|
||||||
--since \"$SINCE\" --abbrev-commit"
|
--since \"$SINCE\" --abbrev-commit --no-merges $BRANCH $SEARCH_PATH"
|
||||||
|
|
||||||
# Change temporary the IFS to store GIT_LOG's output into an array.
|
# Change temporary the IFS to store GIT_LOG's output into an array.
|
||||||
IFS=$'\n'
|
IFS=$'\n'
|
||||||
|
|
@ -148,16 +162,21 @@ if [[ $NI = 0 ]]; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set correct sed option according OS's type
|
# Check if lesskey is installed.
|
||||||
|
if command -v lesskey &> /dev/null; then
|
||||||
|
LESSKEY=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set correct sed command according OS's type
|
||||||
case "$OSTYPE" in
|
case "$OSTYPE" in
|
||||||
darwin*) SED_BIN="sed -E" ;;
|
darwin*) SED_CMD="sed -E s/"$'\E'"\[([0-9]{1,2}(;[0-9]{1,2})*)?m//g" ;;
|
||||||
*) SED_BIN="sed -r" ;;
|
*) SED_CMD="sed -r s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Create array with uncolred commits (removing escape sequences using sed)
|
# Create array with uncolred commits (removing escape sequences using sed)
|
||||||
for elt in "${COMMITS[@]}"
|
for elt in "${COMMITS[@]}"
|
||||||
do
|
do
|
||||||
ELT="$(echo "$elt" | $SED_BIN "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g")" # remove colors escape codes
|
ELT="$(echo "$elt" | $SED_CMD)" # remove colors escape codes
|
||||||
COMMITS_UNCOL+=("$ELT")
|
COMMITS_UNCOL+=("$ELT")
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
@ -171,16 +190,16 @@ done
|
||||||
|
|
||||||
# Create a temporary lesskey file to change the keybindings so the user can use the TAB key to quit less. (more convenient)
|
# Create a temporary lesskey file to change the keybindings so the user can use the TAB key to quit less. (more convenient)
|
||||||
if [[ $LESSKEY = true ]]; then
|
if [[ $LESSKEY = true ]]; then
|
||||||
echo "\t quit" | lesskey -o $HOME/.lsh_less_keys_tmp -- - &> /dev/null
|
echo "\t quit" | lesskey -o /tmp/lsh_less_keys_tmp -- - &> /dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get commit's diff.
|
# Get commit's diff.
|
||||||
function get_diff() {
|
function get_diff() {
|
||||||
ELT="$(echo "${COMMITS_UNCOL[$CP-1]}")"
|
ELT="$(echo "${COMMITS_UNCOL[$CP-1]}")"
|
||||||
DIFF_TIP=${ELT:0:7}
|
DIFF_TIP=${ELT:0:7}
|
||||||
DIFF_CMD="git show $DIFF_TIP --color=always"
|
DIFF_CMD="git show $DIFF_TIP --color=always $SEARCH_PATH"
|
||||||
DIFF=$(eval ${DIFF_CMD} 2>/dev/null)
|
DIFF=$(eval ${DIFF_CMD} 2>/dev/null)
|
||||||
tmp_diff="$(echo "$DIFF" | $SED_BIN "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g")"
|
tmp_diff="$(echo "$DIFF" | $SED_CMD)"
|
||||||
off=$(echo "$tmp_diff" | grep -c ".\{$CN\}") # Number of lines in the diff that are longer than terminal width.
|
off=$(echo "$tmp_diff" | grep -c ".\{$CN\}") # Number of lines in the diff that are longer than terminal width.
|
||||||
DIFF_LINES_NUMBER="$(echo "$DIFF" | wc -l)"
|
DIFF_LINES_NUMBER="$(echo "$DIFF" | wc -l)"
|
||||||
DIFF_LINES_NUMBER=$(( DIFF_LINES_NUMBER + off ))
|
DIFF_LINES_NUMBER=$(( DIFF_LINES_NUMBER + off ))
|
||||||
|
|
@ -190,15 +209,17 @@ function get_diff() {
|
||||||
function print_diff() {
|
function print_diff() {
|
||||||
get_diff
|
get_diff
|
||||||
if [[ $(( TN + DIFF_LINES_NUMBER + OFFSET )) -ge $(( `tput lines` - 1 )) ]]; then
|
if [[ $(( TN + DIFF_LINES_NUMBER + OFFSET )) -ge $(( `tput lines` - 1 )) ]]; then
|
||||||
|
trap - INT
|
||||||
if [[ $LESSKEY = true ]]; then
|
if [[ $LESSKEY = true ]]; then
|
||||||
echo "$DIFF" | less -r -k $HOME/.lsh_less_keys_tmp
|
echo "$DIFF" | less -r -k /tmp/lsh_less_keys_tmp
|
||||||
else
|
else
|
||||||
echo "$DIFF" | less -r
|
echo "$DIFF" | less -r
|
||||||
fi
|
fi
|
||||||
tput ed # Clear screen
|
trap cleanup_and_exit INT
|
||||||
|
clear_screen
|
||||||
else
|
else
|
||||||
stop=false
|
stop=false
|
||||||
tput ed
|
clear_screen
|
||||||
for i in `seq 1 $TN`
|
for i in `seq 1 $TN`
|
||||||
do
|
do
|
||||||
echo -n "$NORMAL"
|
echo -n "$NORMAL"
|
||||||
|
|
@ -220,8 +241,7 @@ function print_diff() {
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
[[ $END = false ]] && tput cuu $(( TN + DIFF_LINES_NUMBER + OFFSET )) && tput ed
|
[[ $END = false ]] && tput cuu $(( TN + DIFF_LINES_NUMBER + OFFSET )) && clear_screen
|
||||||
[[ $END = true ]] && tput cuu 1
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -241,6 +261,21 @@ function calculate_offset {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Reset changes made by this script before exiting
|
||||||
|
function cleanup_and_exit() {
|
||||||
|
# remove temporary less keybindings
|
||||||
|
[[ $LESSKEY = true ]] && rm /tmp/lsh_less_keys_tmp
|
||||||
|
|
||||||
|
tput cuu 1 # move cursor up one line. (remove extra line)
|
||||||
|
tput cnorm # unhide cursor
|
||||||
|
echo "$NORMAL" # normal colors
|
||||||
|
stty "$orig_stty" > /dev/null 2>&1
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
# Catch a control-C interrupt and perform cleanup operations before exiting
|
||||||
|
trap cleanup_and_exit INT
|
||||||
|
|
||||||
{ # capture stdout to stderr
|
{ # capture stdout to stderr
|
||||||
|
|
||||||
tput civis # hide cursor.
|
tput civis # hide cursor.
|
||||||
|
|
@ -291,7 +326,7 @@ do
|
||||||
|
|
||||||
[[ $TN != $(( SN - 1 )) ]] && tput cuu $(( TN + OFFSET_2 ))
|
[[ $TN != $(( SN - 1 )) ]] && tput cuu $(( TN + OFFSET_2 ))
|
||||||
[[ $TN == $(( SN - 1 )) ]] && tput cuu $(( TN + EXT ))
|
[[ $TN == $(( SN - 1 )) ]] && tput cuu $(( TN + EXT ))
|
||||||
[[ $SI != 1 ]] && tput ed # clear screen
|
[[ $SI != 1 ]] && clear_screen
|
||||||
;;
|
;;
|
||||||
"$ad" | "$ad_1")
|
"$ad" | "$ad_1")
|
||||||
CP=$(( CP + 1 ))
|
CP=$(( CP + 1 ))
|
||||||
|
|
@ -300,8 +335,8 @@ do
|
||||||
|
|
||||||
[[ $TN != $(( SN - 1 )) ]] && tput cuu $(( TN + OFFSET_2 ))
|
[[ $TN != $(( SN - 1 )) ]] && tput cuu $(( TN + OFFSET_2 ))
|
||||||
[[ $TN == $(( SN - 1 )) ]] && tput cuu $(( TN + EXT ))
|
[[ $TN == $(( SN - 1 )) ]] && tput cuu $(( TN + EXT ))
|
||||||
[[ $SI != 1 ]] && tput ed # clear screen
|
[[ $SI != 1 ]] && clear_screen
|
||||||
[[ $SI = 1 ]] && [[ $CP = 1 ]] && tput ed # clear screen
|
[[ $SI = 1 ]] && [[ $CP = 1 ]] && clear_screen
|
||||||
;;
|
;;
|
||||||
"$nl" | "$nl_1")
|
"$nl" | "$nl_1")
|
||||||
[[ $TN == $NI ]] && tput cuu $(( TN + OFFSET_2 ))
|
[[ $TN == $NI ]] && tput cuu $(( TN + OFFSET_2 ))
|
||||||
|
|
@ -311,18 +346,13 @@ do
|
||||||
"q")
|
"q")
|
||||||
si=false
|
si=false
|
||||||
END=true
|
END=true
|
||||||
tput cuu 1 #move cursor up one line. (remove extra line)
|
|
||||||
;;
|
;;
|
||||||
* )
|
* )
|
||||||
tput cuu $(( TN + OFFSET_2 ))
|
tput cuu $(( TN + OFFSET_2 ))
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
# remove temporary less keybindings
|
cleanup_and_exit
|
||||||
[[ $LESSKEY = true ]] && rm $HOME/.lsh_less_keys_tmp
|
|
||||||
|
|
||||||
tput cnorm # unhide cursor
|
|
||||||
echo "$NORMAL" # normal colors
|
|
||||||
|
|
||||||
} >&2 # END capture
|
} >&2 # END capture
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "git-recall",
|
"name": "git-recall",
|
||||||
"version": "1.1.12",
|
"version": "1.2.4",
|
||||||
"description": "Simple and convenient Git tool to easily recall what you've done",
|
"description": "Simple and convenient Git tool to easily recall what you've done",
|
||||||
"main": "",
|
"main": "",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue