mirror of
https://github.com/ItsDrike/nixdots
synced 2024-12-25 17:54:35 +00:00
Add better-git-branch script
This commit is contained in:
parent
36db61f255
commit
41cd22ea33
|
@ -1,4 +1,10 @@
|
||||||
{
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
|
||||||
|
scriptPkgs = (import ./bin {inherit pkgs;});
|
||||||
|
in {
|
||||||
programs.git = {
|
programs.git = {
|
||||||
aliases = {
|
aliases = {
|
||||||
quickclone = "clone --single-branch --depth=1";
|
quickclone = "clone --single-branch --depth=1";
|
||||||
|
@ -48,7 +54,7 @@
|
||||||
bD = "branch --delete --force";
|
bD = "branch --delete --force";
|
||||||
bm = "branch --move";
|
bm = "branch --move";
|
||||||
bM = "branch --move --force";
|
bM = "branch --move --force";
|
||||||
bb = "!~/.local/bin/scripts/cli/better-git-branch";
|
bb = "!${scriptPkgs.better-git-branch}/bin/better-git-branch";
|
||||||
|
|
||||||
r = "rebase";
|
r = "rebase";
|
||||||
ri = "rebase -i";
|
ri = "rebase -i";
|
||||||
|
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
||||||
|
{pkgs, ...}:
|
||||||
|
pkgs.writeShellScriptBin "better-git-branch" ''
|
||||||
|
${builtins.readFile ./better-git-branch.sh}
|
||||||
|
''
|
9
home/programs/terminal/tools/git/bin/default.nix
Normal file
9
home/programs/terminal/tools/git/bin/default.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
packages = {
|
||||||
|
better-git-branch = pkgs.callPackage ./better-git-branch {};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
packages
|
Loading…
Reference in a new issue