You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
projectr/bin/project_origin

112 lines
3.8 KiB
Bash

#!/usr/bin/env bash
########################################################################
# Copyright 2014 Lukas Bestle <project-projectr@lukasbestle.com>
# License MIT
########################################################################
# Prepares a project for deployment and sets the origin repository and
# branch the project is connected to.
#
# Usage: project_origin <project> [<origin>]
#
# <project> Path to the project
# <origin> Repository URL and branch name (<url>[#<branch>])
# If omitted, the origin gets deleted.
# If the string does not contain a "#", the branch is
# set to "master" ($CONFIG_DEFAULT_BRANCH).
########################################################################
project="$1"
origin="$2"
# Load configuration
CONFIG_DEFAULT_BRANCH="master"
configPath=${XDG_CONFIG_HOME:-$HOME/.config}
if [[ -f "$configPath/projectr/config.sh" ]]; then
source "$configPath/projectr/config.sh"
elif [[ -f "$HOME/.project.cnf" ]]; then
source "$HOME/.project.cnf"
fi
if [[ -z "$project" ]]; then
# Print help
echo -e "\033[1mUsage:\033[0m \033[34mproject_origin\033[0m <project> [<origin>]"
exit 1
fi
# Check if the project exists
if [[ ! -f "$project/.project" ]]; then
echo -e "\033[31mThe project \033[34m$project\033[31m does not exist or is invalid.\033[0m" >&2
exit 1
fi
if [[ -n "$origin" ]]; then
# Origin was defined, initialize
# Check if there are project files already
files=$(shopt -s nullglob; shopt -s dotglob; echo "$project/current"/*)
if [[ ${#files} -gt 0 ]]; then
echo -e "\033[31mThe project \033[34m$project\033[31m already has a non-empty \033[34mcurrent\033[31m directory. Please backup and delete it first.\033[0m" >&2
exit 1
fi
# Delete the symlink or directory "current"
if ! rm -Rf "$project/current"; then
echo -e "\033[31mCould not delete old \033[34mcurrent\033[31m link/directory.\033[0m" >&2
exit 1
fi
# Split origin URL and branch by "#" character
if [[ "$origin" == *#* ]]; then
url="$(echo "$origin" | cut -f1 -d#)"
branch="$(echo "$origin" | cut -f2 -d#)"
else
# No branch given, set to master
url="$origin"
branch="$CONFIG_DEFAULT_BRANCH"
fi
# Check if the required directory structure already exists
if [[ ! -d "$project/versions" || ! -d "$project/logs" ]]; then
# Create structure for deployable projects
echo -e "\033[1mInitializing deployment directory structure for project \033[34m$project\033[0;1m...\033[0m"
if ! (mkdir -p "$project/versions" && mkdir -p "$project/logs"); then
echo -e " => \033[31mSomething went wrong.\033[0m" >&2
exit 1
fi
echo -e " => \033[32mSuccess.\033[0m"
fi
# Set origin and branch files
echo -e "\033[1mSetting URL to \033[34m$url\033[0;1m and branch to \033[34m$branch\033[0;1m...\033[0m"
if ! (echo -n "$url" > "$project/.origin" && echo -n "$branch" > "$project/.branch"); then
echo -e " => \033[31mSomething went wrong.\033[0m" >&2
exit 1
fi
echo -e " => \033[32mSuccess.\033[0m"
else
# Origin was not defined, unset
# Check if the project has an origin
if [[ ! -f "$project/.origin" ]]; then
echo -e "\033[31mThe project \033[34m$project\033[31m does not currently have an origin.\033[0m" >&2
exit 1
fi
echo -e "\033[1mDeleting origin configuration files for project \033[34m$project\033[0;1m...\033[0m"
if ! rm -f "$project/.origin" "$project/.branch"; then
echo -e " => \033[31mSomething went wrong.\033[0m" >&2
exit 1
fi
echo -e " => \033[32mSuccess.\033[0m"
fi
# Remove repo to make sure the new origin is used in the future
if [[ -d "$project/repo" ]]; then
echo -e "\033[1mDeleting the old repository for project \033[34m$project\033[0;1m...\033[0m"
if ! rm -Rf "$project/repo"; then
echo -e " => \033[31mSomething went wrong.\033[0m" >&2
exit 1
fi
echo -e " => \033[32mSuccess.\033[0m"
fi