aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2025-12-09 08:40:40 -0300
committerSilvio Rhatto <rhatto@riseup.net>2025-12-09 08:40:40 -0300
commitf4d184604425ca2036e8a939b80ac6088894d7ae (patch)
tree747cd82fe7df11b7e7d94455e0b642f85afda996
parentfe412e645729f49c115e02b743070b07ae2e78a8 (diff)
downloadutils-git-f4d184604425ca2036e8a939b80ac6088894d7ae.tar.gz
utils-git-f4d184604425ca2036e8a939b80ac6088894d7ae.tar.bz2
Feat: improves mrlogHEADmaster
-rwxr-xr-xmrlog47
1 files 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