From f4d184604425ca2036e8a939b80ac6088894d7ae Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Tue, 9 Dec 2025 08:40:40 -0300 Subject: Feat: improves mrlog --- mrlog | 47 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/mrlog b/mrlog index a957bb5..e279939 100755 --- a/mrlog +++ b/mrlog @@ -1,6 +1,7 @@ #!/usr/bin/env bash # -# Builds a timeline from one of more repositories, using mr(1). +# Builds a unified list of commit logs from one or more Git repositories, using +# mr(1). # # Accepts git-log(1) parameters, like # @@ -9,33 +10,61 @@ # # Examples: # -# mrtimeline --since='1 day ago' --date=relative -# watch -n 120 "mrtimeline --since='1 week ago' --date=relative" +# 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" -function run_mrlog { +# 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 /" - git log "$*" --format=format:"%aI|||REPO|||%h|||%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 } -function run_mrtimeline { - #mr run $DIRNAME/mrlog $* | grep -v "^mr run:" | sort -r | less - mr run $DIRNAME/mrlog "$*" | grep -v "^mr run:" | sort -r | column -s '|||' -t -o ' ' | less +# 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 -run_${BASENAME} "$*" +if [ "$1" != "--single-and-raw" ]; then + _logger "$*" +else + shift + _git_log_wrapper "$*" +fi -- cgit v1.2.3