Add better-git-branch script

This commit is contained in:
ItsDrike 2024-06-21 14:47:48 +02:00
parent 36db61f255
commit 41cd22ea33
Signed by: ItsDrike
GPG key ID: FA2745890B7048C0
4 changed files with 76 additions and 1 deletions

View file

@ -1,4 +1,10 @@
{
pkgs,
...
}: let
scriptPkgs = (import ./bin {inherit pkgs;});
in {
programs.git = {
aliases = {
quickclone = "clone --single-branch --depth=1";
@ -48,7 +54,7 @@
bD = "branch --delete --force";
bm = "branch --move";
bM = "branch --move --force";
bb = "!~/.local/bin/scripts/cli/better-git-branch";
bb = "!${scriptPkgs.better-git-branch}/bin/better-git-branch";
r = "rebase";
ri = "rebase -i";

View file

@ -0,0 +1,56 @@
#!/usr/bin/env bash
# Source: https://gist.github.com/schacon/e9e743dee2e92db9a464619b99e94eff
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
NO_COLOR='\033[0m'
BLUE='\033[0;34m'
YELLOW='\033[0;33m'
NO_COLOR='\033[0m'
width1=5
width2=6
width3=30
width4=20
width5=20
# Function to count commits
count_commits() {
local branch="$1"
local base_branch="$2"
local ahead_behind
ahead_behind=$(git rev-list --left-right --count "$base_branch"..."$branch")
echo "$ahead_behind"
}
# Main script
main_branch=$(git rev-parse HEAD)
printf "${GREEN}%-${width1}s ${RED}%-${width2}s ${BLUE}%-${width3}s ${YELLOW}%-${width4}s ${NO_COLOR}%-${width5}s\n" "Ahead" "Behind" "Branch" "Last Commit" " "
# Separator line for clarity
printf "${GREEN}%-${width1}s ${RED}%-${width2}s ${BLUE}%-${width3}s ${YELLOW}%-${width4}s ${NO_COLOR}%-${width5}s\n" "-----" "------" "------------------------------" "-------------------" " "
format_string="%(objectname:short)@%(refname:short)@%(committerdate:relative)"
IFS=$'\n'
for branchdata in $(git for-each-ref --sort=-authordate --format="$format_string" refs/heads/ --no-merged); do
sha=$(echo "$branchdata" | cut -d '@' -f1)
branch=$(echo "$branchdata" | cut -d '@' -f2)
time=$(echo "$branchdata" | cut -d '@' -f3)
if [ "$branch" != "$main_branch" ]; then
# Get branch description
description=$(git config branch."$branch".description)
# Count commits ahead and behind
ahead_behind=$(count_commits "$sha" "$main_branch")
ahead=$(echo "$ahead_behind" | cut -f2)
behind=$(echo "$ahead_behind" | cut -f1)
# Display branch info
# shellcheck disable=SC2086
printf "${GREEN}%-${width1}s ${RED}%-${width2}s ${BLUE}%-${width3}s ${YELLOW}%-${width4}s ${NO_COLOR}%-${width5}s\n" $ahead $behind $branch "$time" "$description"
fi
done

View file

@ -0,0 +1,4 @@
{pkgs, ...}:
pkgs.writeShellScriptBin "better-git-branch" ''
${builtins.readFile ./better-git-branch.sh}
''

View file

@ -0,0 +1,9 @@
{
pkgs,
...
}: let
packages = {
better-git-branch = pkgs.callPackage ./better-git-branch {};
};
in
packages