85 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ pkgs, lib, ... }:
 | 
						|
''
 | 
						|
  # rsync -rlptzv --progress --delete --exclude=.git --exclude=.vscode --exclude=result --exclude=channels/ /Users/os/src/fc.qemu os@hydra01:
 | 
						|
  # rsync -rlptzv --progress --rsh="ssh -J fcio-whq-jump" --delete --exclude=.git --exclude=.vscode --exclude=result --exclude=channels/ /Users/os/src/fc-nixos/ os@patty:fc-nixos/
 | 
						|
 | 
						|
 | 
						|
  DEFAULT_JUMPHOST="fcio-whq-jump"
 | 
						|
 | 
						|
  _parse_rsync_args() {
 | 
						|
  	# reset pre-defined variables that are read and manipulated throughout this function
 | 
						|
  	unset JUMPHOST
 | 
						|
  	# arrays are bash or zsh specific
 | 
						|
  	RSYNC_OPTS=("-rlptzv" "--progress" "--delete" "--exclude=.git" "--exclude=.vscode" "--exclude=result" "--exclude=channels/" "--exclude=.mypy_cache")
 | 
						|
 | 
						|
  	while getopts ':Jj:' OPT; do
 | 
						|
  		case $OPT in 
 | 
						|
  			j)
 | 
						|
  				if [ -n "$JUMPHOST" ]; then
 | 
						|
  					echo "-j and -J are conflicting arguments" >&2
 | 
						|
  					return 1
 | 
						|
  				fi
 | 
						|
  				JUMPHOST="$OPTARG"
 | 
						|
  				;;
 | 
						|
  			J)
 | 
						|
  				if [ -n "$JUMPHOST" ]; then
 | 
						|
  					echo "-j and -J are conflicting arguments" >&2
 | 
						|
  					return 1
 | 
						|
  				fi
 | 
						|
  				JUMPHOST="$DEFAULT_JUMPHOST"
 | 
						|
  				;;
 | 
						|
  			?)
 | 
						|
  				echo "rsyncrepo [-J] [-j <jumphost>] <directory> <hostname> [target dir name]"
 | 
						|
  				return 1
 | 
						|
  				;;
 | 
						|
  		esac
 | 
						|
  	done
 | 
						|
 | 
						|
  	# trim CLI parameters
 | 
						|
  	shift "$(($OPTIND -1))"
 | 
						|
 | 
						|
  	RR_FROM="$1"
 | 
						|
  	RR_TO="$2"
 | 
						|
    RR_TARGET="$3"
 | 
						|
  }
 | 
						|
 | 
						|
  _do_rsync() {
 | 
						|
  	# parameter check
 | 
						|
  	if [ -z "$1" ] || [ -z "$2" ]; then
 | 
						|
  		echo "Missing arguments, required: <directory> <hostname>" >&2
 | 
						|
  		return 1
 | 
						|
  	fi
 | 
						|
 | 
						|
  	if [ -n "$JUMPHOST" ]; then
 | 
						|
  		RSYNC_OPTS+=("--rsh=${lib.getExe pkgs.openssh} -J ''${JUMPHOST}")
 | 
						|
  	fi
 | 
						|
 | 
						|
  	for OPTI in "''${RSYNC_OPTS[@]}"; do
 | 
						|
  		echo "$OPTI"
 | 
						|
  	done
 | 
						|
 | 
						|
  	# If no $3 is specified, we sync /path/to/dir/ to hostname:dir
 | 
						|
    if [ -z "$3" ]; then
 | 
						|
      RR_DEST="''${2}:$(basename $(realpath "''${1}"))"
 | 
						|
    else
 | 
						|
      RR_DEST="''${2}:''${3}"
 | 
						|
    fi
 | 
						|
 | 
						|
  	echo "Syncing ''${1} to ''${RR_DEST}…"
 | 
						|
 | 
						|
  	# ensure trailing slash for src to avoid recreating directory
 | 
						|
  	${lib.getExe pkgs.rsync} "''${RSYNC_OPTS[@]}"  "''${1}/" "''${RR_DEST}"
 | 
						|
  }
 | 
						|
 | 
						|
  rsyncrepo() {
 | 
						|
  	_parse_rsync_args "$@"
 | 
						|
  	# inherits parsed arguments through variables
 | 
						|
  	_do_rsync "$RR_FROM" "$RR_TO" "$RR_TARGET"
 | 
						|
  }
 | 
						|
 | 
						|
  rsynchydra() {
 | 
						|
  	_parse_rsync_args "$@"
 | 
						|
    # the name of RR_TO is a bit misleading, it just describes the 2nd positional arg here
 | 
						|
  	_do_rsync "$RR_FROM" "hydra01" "$RR_TO"
 | 
						|
  }
 | 
						|
''
 |