mirror of
				https://github.com/ItsDrike/dotfiles.git
				synced 2025-11-04 01:16:35 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/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
 | 
						|
 |