]> gitweb.fluxo.info Git - utils-git.git/commitdiff
Feat: improves mrlog master
authorSilvio Rhatto <rhatto@riseup.net>
Tue, 9 Dec 2025 11:40:40 +0000 (08:40 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Tue, 9 Dec 2025 11:40:40 +0000 (08:40 -0300)
mrlog

diff --git a/mrlog b/mrlog
index a957bb5764ceac9ef3dc153793983f59cce1990a..e279939de0ce4c41457a196b7437267031f84420 100755 (executable)
--- 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
 #
 #
 # 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