diff options
| -rwxr-xr-x | mrlog | 70 | ||||
| -rwxr-xr-x | rcommit | 4 |
2 files changed, 72 insertions, 2 deletions
@@ -0,0 +1,70 @@ +#!/usr/bin/env bash +# +# Builds a unified list of commit logs from one or more Git repositories, using +# mr(1). +# +# Accepts git-log(1) parameters, like +# +# --since=<date> +# --after=<date> +# +# Examples: +# +# mrlog --since='1 day ago' --date=relative +# watch -n 120 "mrlog --since='1 week ago' --date=relative" +# + +# Parameters +DIRNAME="`dirname $0`" +BASENAME="`basename $0`" +MODE="$1" + +# Wrapper around git-log(1) to run in a single repository +function _git_log_wrapper { + # Repository check + if [ ! -e ".git" ]; then + echo "$BASENAME: not in a Git repository" + exit 1 + fi + + # Get the repository name + local repo="`git rev-parse --show-toplevel`" + local name="`basename $repo`" + + # Old command alternatives + #git log $* --format=format:"%aI REPO %h %s" | sed "s/ REPO / $name /" + #git log $* --format=format:"%aI REPO %h %s" | sed "s/ REPO / $name\t\t /" + #git log $* --format=format:"%aI REPO %<(8) %h %s" | sed "s/ REPO / $name /" + #git log $* --format=format:"%aI REPO %>(20) %h %s" | sed "s/ REPO / $name /" + #git log $* --format=format:"%aI|||REPO|||%h|||%>(100,trunc)%s" | sed "s/REPO/ $name /" + + # Command template + cmd='git log --format=format:%aI|||REPO|||%h|||%s' + + # Run depending on arguments + if [ ! -z "$1" ]; then + $cmd "$*" | sed "s/REPO/ $name /" + else + $cmd | sed "s/REPO/ $name /" + fi +} + +# Build the list of commits from a single or multiple repositories +function _logger { + # Check for config + if [ ! -e ".git" ] && [ ! -e ".mrconfig" ]; then + echo "$BASENAME: not in a Git repository or no .mrconfig available" + exit 1 + fi + + # Build the unified log + mr run $DIRNAME/mrlog --single-and-raw "$*" | grep -v "^mr run:" | sort -r | column -s '|||' -t -o ' ' | less +} + +# Dispatch +if [ "$1" != "--single-and-raw" ]; then + _logger "$*" +else + shift + _git_log_wrapper "$*" +fi @@ -6,7 +6,7 @@ # # From a submodule folder: # -# sup <message> +# rcommit <message> # # This go upwards and commit, until there's no parent repository. @@ -18,7 +18,7 @@ GIT="hit" # Commit upwards function upward_commit { - local level="" + local level="../" local up="../" local found="0" local base |
