nix

configuration files that power my machines
Log | Files | Refs | README | LICENSE

git-diff-upstream (1217B)


      1 #!/bin/bash
      2 set -euo pipefail
      3 
      4 usage() {
      5 	echo "Usage: $0 --repo <url> --branch <branch> --prefix <path>"
      6 	exit 1
      7 }
      8 
      9 cleanup() {
     10 	[ -n "${upstream_dir:-}" ] && rm -rf "$upstream_dir"
     11 	[ -n "${upstream_dir:-}" ] && git remote remove "$remote_name"
     12 }
     13 trap cleanup EXIT
     14 
     15 repo_url=""
     16 branch=""
     17 prefix=""
     18 
     19 while [[ "$#" -gt 0 ]]; do
     20 	case $1 in
     21 	--repo)
     22 		repo_url="$2"
     23 		shift
     24 		;;
     25 	--branch)
     26 		branch="$2"
     27 		shift
     28 		;;
     29 	--prefix)
     30 		prefix="$2"
     31 		shift
     32 		;;
     33 	*)
     34 		echo "Unknown parameter: $1"
     35 		usage
     36 		;;
     37 	esac
     38 	shift
     39 done
     40 
     41 [ -z "$repo_url" ] || [ -z "$branch" ] || [ -z "$prefix" ] && usage
     42 
     43 # Normalize prefix and vars
     44 clean_prefix=${prefix%/}
     45 remote_name="${clean_prefix}.upstream"
     46 upstream_dir="${clean_prefix}.upstream"
     47 
     48 cd "$(git rev-parse --show-toplevel)"
     49 
     50 if ! git remote | grep -q "^${remote_name}$"; then
     51 	git remote add -f "$remote_name" "$repo_url"
     52 else
     53 	git fetch "$remote_name"
     54 fi
     55 
     56 [ -d "$upstream_dir" ] && rm -rf "$upstream_dir"
     57 mkdir -p "$upstream_dir"
     58 
     59 git archive --format=tar "${remote_name}/${branch}" | tar -xf - -C "$upstream_dir"
     60 
     61 if ! command -v difft &>/dev/null; then
     62 	echo "Error: difft (difftastic) not found." >&2
     63 	exit 1
     64 fi
     65 
     66 difft --color=always "$clean_prefix" "$upstream_dir" | less -R