Project

General

Profile

1 6522 aaronmk
selfDir_NzrNZp := $(dir $(lastword $(MAKEFILE_LIST)))
2
root := $(selfDir_NzrNZp)..
3
include $(root)/lib/common.Makefile
4 3699 aaronmk
5
6 3393 aaronmk
##### Vars/functions
7
8 3403 aaronmk
# Make
9
SHELL := /bin/bash
10
11 3438 aaronmk
# OS
12
os := $(shell uname)
13
isMac := $(filter Darwin,$(os))
14 3393 aaronmk
15 3438 aaronmk
# System
16
dateFmt := %Y-%m-%d-%H-%M-%S
17
mtime = $(shell $(if $(isMac),stat -f %Sm -t "$(dateFmt)" $(1),date\
18
--reference=$(1) +"$(dateFmt)"))
19
20 3393 aaronmk
# Terminal
21
esc := '['
22
reset := $(esc)'0m'
23
emph := $(esc)'7m '
24
endEmph := ' '$(reset)
25
26
# User interaction
27
28
confirm = $(if $(shell read -p $(emph)"$(1)"$(endEmph)$$'$(if\
29
$(2),\n$(2))\nContinue? (y/n) ' REPLY; test "$$REPLY" = y && echo t),,\
30
$(error Aborting))
31
32 3438 aaronmk
# Paths
33 6522 aaronmk
bin := $(root)/bin
34 3438 aaronmk
35 3393 aaronmk
# DB
36
psqlVerbose := $(bin)/psql_script_vegbien --echo-all
37
pg_dump := $(bin)/pg_dump_vegbien
38 3404 aaronmk
backup := "time" env data=1 $(pg_dump)
39
restore := "time" $(bin)/postgres_vegbien pg_restore --exit-on-error
40
restoreBien := $(restore) --dbname=vegbien
41
# pg_restore doesn't support PGDATABASE env var
42 3393 aaronmk
rmSchema = 'DROP SCHEMA IF EXISTS "$(1)" CASCADE;'
43
44 3437 aaronmk
##### Backups
45 3393 aaronmk
46 3395 aaronmk
# Must come before %.sql with no prerequisites to be matched first
47 6520 aaronmk
%.md5: %
48
	md5 -q $< >$@
49
50
# Must come before %.sql with no prerequisites to be matched first
51 3395 aaronmk
%.sql: %
52 3399 aaronmk
	$(restore) $< >$@
53 3395 aaronmk
54 4751 aaronmk
# Full DB
55
# Must come before %.backup to be matched first
56
vegbien.%.backup:
57
	$(backup) all >$@
58
59 3544 aaronmk
backup* = $(backup) $* >$@
60
61 3393 aaronmk
# Note: This can't be used for the current (unrotated) public schema because
62
# pg_dump doesn't back up the CREATE SCHEMA statement for it, assuming falsely
63
# that public already exists because it's in template1.
64 3543 aaronmk
%.backup:
65
	$(backup*)
66 6521 aaronmk
	$(MAKE) $@.md5
67 3544 aaronmk
68
# When testing, turn off %.sql so make won't skip `%.sql: %` in favor of it
69
ifeq ($(filter %.backup/test,$(MAKECMDGOALS)),)
70 3543 aaronmk
%.sql:
71
	env plain=1 $(backup*)
72 3544 aaronmk
endif
73 3393 aaronmk
74 3402 aaronmk
%.backup/restore: %.backup _always
75 3399 aaronmk
	$(restoreBien) $<
76 3393 aaronmk
77 3402 aaronmk
%.sql/restore: %.sql _always
78
	$(bin)/psql_script_vegbien <$<
79
# pg_restore only supports "non-plain-text formats"
80
# (http://www.postgresql.org/docs/9.1/static/app-pgrestore.html)
81
82 3409 aaronmk
%.backup/test: %.backup.sql _always
83
	rm $<
84
85 3438 aaronmk
%.backup/rotate: %.backup _always
86
	mv $< $*.$(call mtime,$<).backup
87
88 3437 aaronmk
#### Archived imports
89 3393 aaronmk
90
confirmRm = $(call confirm,WARNING: This will delete the archived import $(1)!)
91
92
%.backup/remove: %.backup _always
93
	@$(call confirmRm,$*)
94
	echo $(call rmSchema,$*)|$(bin)/psql_script_vegbien
95
96
%.backup/rm_indexes: %.backup _always
97
	$(pg_dump) $*|$(bin)/mk_rm_indexes|$(psqlVerbose)
98 3407 aaronmk
99 3701 aaronmk
##### Synchronization
100
101 6469 aaronmk
rsyncBackups := $(rsync) --include="/*.backup" --include="/*.sql"\
102
--include="/*.csv" --exclude="**"
103 3701 aaronmk
104
upload: _always
105
	$(rsyncBackups) $(local) $(remote)
106
download: _always
107
	$(rsyncBackups) $(remote) $(local)