From 1690d1ef938c78b4e03c99c96181307a8ba269bb Mon Sep 17 00:00:00 2001
From: = <=>
Date: Fri, 17 Jul 2020 18:28:24 -0400
Subject: [PATCH] Create utility functions for managing backups

---
 .gitignore |  1 +
 util       | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 73 insertions(+)
 create mode 100644 .gitignore
 create mode 100755 util

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1377554
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*.swp
diff --git a/util b/util
new file mode 100755
index 0000000..9aedff3
--- /dev/null
+++ b/util
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+pull_backup() {
+	check_args $# 2
+	if [ ! -d "$BACKUPS_PATH/$2" ]; then
+		invalid_path_msg "$1:$2"
+		return 1;
+	fi
+
+	git -C $BACKUPS_PATH/$2 pull $1
+}
+
+push_backup() {
+	check_args $# 2
+	if [ ! -d "$BACKUPS_PATH/$2" ]; then
+		invalid_path_msg "$1:$2"
+		return 1;
+	fi
+
+	git -C $BACKUPS_PATH/$2 push $1
+}
+
+overwrite_local() {
+	if [ ! -e "$BACKUPS_PATH/$1/$2" ]; then
+		printf "The backup path does not exist\n"
+		return 1;
+	fi
+	case "$1" in
+		configs) cp -r "$BACKUPS_PATH/$1/$2" "$XDG_CONFIG_HOME/$2";;
+		macros) cp -r "$BACKUPS_PATH/$1/$2" "$HOME/Macros/$2";;
+		*) invalid_path_msg "$1"; return 1;;
+	esac
+}
+
+overwrite_backup() {
+	if [ git diff --stat $BACKUPS_PATH/$1 ]; then
+		printf "There are uncommited changes in $1\n"
+		return 1
+	fi
+	case "$1" in
+		configs) cp -r "$XDG_CONFIG_HOME/$2" "$BACKUPS_PATH/$1/$2";;
+		macros) cp -r "$HOME/Macros/$2" "$BACKUPS_PATH/$1/$2";;
+		*) invalid_path_msg "$1"; return 1;;
+	esac
+}
+
+invalid_path_msg() {
+	printf "That path is invalid. $@\n"
+}
+
+check_args() {
+	if [ $1 -ne $2 ]; then
+		printf "Invalid number of arguments. Expected $2\n"
+		exit;
+	fi
+	return 0;
+}
+
+case "$1" in
+	pull-backup)
+		case "$2" in 
+			configs) pull_backup configs;;
+			macros) pull_backup macros;;
+		esac
+		;;
+	overwrite-local) overwrite_local $2 $3;;
+	overwrite-backup) overwrite_backup $2 $3;;
+	pull-backup) pull_backup $2 $3;;
+	push-backup) push_backup $2 $3;;
+	push-backup) overwrite_backup $2 $3;;
+	*) printf "No such option\n";;
+esac