#!/bin/bash . libremessages # "Primitive" git functions ########################################## # Usage: in_git # Returns 0 if somewhere in a git repository, nonzero if not. in_git() { gitroot &>/dev/null } # Usage: gitroot # Prints the root directory of the git checkout gitroot() { git rev-parse --show-toplevel } # Usage: gitbranch # Prints the current git branch gitbranch() { git rev-parse --abbrev-ref HEAD } # Usage: have_file $file # Returns 0 if `$(gitroot)/$file` exists. have_file() { local file=$1 if in_git && [[ -f "$(gitroot)/$file" ]]; then return 0; fi return 1 } # Deal with being in a PBS package repository ######################## in_pbs-package() { have_file .pbs-package } ensure_in_pbs-package() { if ! in_pbs-package; then error "Not in a PBS package directory" exit 1 fi } pbs-package-root() { ensure_in_pbs-package gitroot } cdto_pbs-package-root() { ensure_in_pbs-package cd "$(gitroot)" } # Deal with being in a PBS repository ################################ in_pbs() ( if in_pbs-package; then cd "$(pbs-package-root)/.." fi have_file .pbs-root ) ensure_in_pbs() { if ! in_pbs; then error "Not in a PBS directory" exit 1 fi } pbs-root() { ensure_in_pbs ( if in_pbs-package; then cd "$(pbs-package-root)/.." fi gitroot ) } cdto_pbs-root() { ensure_in_pbs if in_pbs-package; then cd "$(pbs-package-root)/.." fi cd "$(gitroot)" }