# DevStack Makefile of Sanity

# Interesting targets:
# ds-remote - Create a Git remote for use by ds-push and ds-pull targets
#             DS_REMOTE_URL must be set on the command line
#
# ds-push - Merge a list of branches taken from .ds-test and push them
#           to the ds-remote repo in ds-test branch
#
# ds-pull - Pull the remote ds-test branch into a fresh local branch
#
# refresh - Performs a sequence of unstack, refresh and stack

# Duplicated from stackrc for now
DEST=/opt/stack
WHEELHOUSE=$(DEST)/.wheelhouse

all:
	echo "This just saved you from a terrible mistake!"

# Do Some Work
stack:
	./stack.sh

unstack:
	./unstack.sh

wheels:
	WHEELHOUSE=$(WHEELHOUSE) tools/build-wheels.sh

docs:
	tox -edocs

# Just run the shocco source formatting build
docs-build:
	INSTALL_SHOCCO=True tools/build_docs.sh

# Just run the Sphinx docs build
docs-rst:
	python setup.py build_sphinx

# Run the bashate test
bashate:
	tox -ebashate

# Run the function tests
test:
	tests/test_ini_config.sh
	tests/test_meta_config.sh
	tests/test_ip.sh
	tests/test_refs.sh

# Spiff up the place a bit
clean:
	./clean.sh
	rm -rf accrc doc/build test*-e *.egg-info

# Clean out the cache too
realclean: clean
	rm -rf files/cirros*.tar.gz files/Fedora*.qcow2 $(WHEELHOUSE)

# Repo stuffs

pull:
	git pull


# These repo targets are used to maintain a branch in a remote repo that
# consists of one or more local branches merged and pushed to the remote.
# This is most useful for iterative testing on multiple or remote servers
# while keeping the working repo local.
#
# It requires:
# * a remote pointing to a remote repo, often GitHub is used for this
# * a branch name to be used on the remote
# * a local file containing the list of local branches to be merged into
#   the remote branch

GIT_REMOTE_NAME=ds-test
GIT_REMOTE_BRANCH=ds-test

# Push the current branch to a remote named ds-test
ds-push:
	git checkout master
	git branch -D $(GIT_REMOTE_BRANCH) || true
	git checkout -b $(GIT_REMOTE_BRANCH)
	for i in $(shell cat .$(GIT_REMOTE_BRANCH) | grep -v "^#" | grep "[^ ]"); do \
	  git merge --no-edit $$i; \
	done
	git push -f $(GIT_REMOTE_NAME) HEAD:$(GIT_REMOTE_BRANCH)

# Pull the ds-test branch
ds-pull:
	git checkout master
	git branch -D $(GIT_REMOTE_BRANCH) || true
	git pull $(GIT_REMOTE_NAME) $(GIT_REMOTE_BRANCH)
	git checkout $(GIT_REMOTE_BRANCH)

# Add the remote - set DS_REMOTE_URL=htps://example.com/ on the command line
ds-remote:
	git remote add $(GIT_REMOTE_NAME) $(DS_REMOTE_URL)

# Refresh the current DevStack checkout nd re-initialize
refresh: unstack ds-pull stack
