Project

General

Profile

1
include ../lib/common.Makefile
2

    
3

    
4
##### Vars/functions
5

    
6
# Make
7
SHELL := /bin/bash
8

    
9
# OS
10
os := $(shell uname)
11
isMac := $(filter Darwin,$(os))
12

    
13
# System
14
dateFmt := %Y-%m-%d-%H-%M-%S
15
mtime = $(shell $(if $(isMac),stat -f %Sm -t "$(dateFmt)" $(1),date\
16
--reference=$(1) +"$(dateFmt)"))
17

    
18
# Terminal
19
esc := '['
20
reset := $(esc)'0m'
21
emph := $(esc)'7m '
22
endEmph := ' '$(reset)
23

    
24
# User interaction
25

    
26
confirm = $(if $(shell read -p $(emph)"$(1)"$(endEmph)$$'$(if\
27
$(2),\n$(2))\nContinue? (y/n) ' REPLY; test "$$REPLY" = y && echo t),,\
28
$(error Aborting))
29

    
30
# Paths
31
bin := ../bin
32

    
33
# DB
34
psqlVerbose := $(bin)/psql_script_vegbien --echo-all
35
pg_dump := $(bin)/pg_dump_vegbien
36
backup := "time" env data=1 $(pg_dump)
37
restore := "time" $(bin)/postgres_vegbien pg_restore --exit-on-error
38
restoreBien := $(restore) --dbname=vegbien
39
# pg_restore doesn't support PGDATABASE env var
40
rmSchema = 'DROP SCHEMA IF EXISTS "$(1)" CASCADE;'
41

    
42
##### Backups
43

    
44
# Must come before %.sql with no prerequisites to be matched first
45
%.sql: %
46
	$(restore) $< >$@
47

    
48
backup* = $(backup) $* >$@
49

    
50
# Note: This can't be used for the current (unrotated) public schema because
51
# pg_dump doesn't back up the CREATE SCHEMA statement for it, assuming falsely
52
# that public already exists because it's in template1.
53
%.backup:
54
	$(backup*)
55

    
56
# When testing, turn off %.sql so make won't skip `%.sql: %` in favor of it
57
ifeq ($(filter %.backup/test,$(MAKECMDGOALS)),)
58
%.sql:
59
	env plain=1 $(backup*)
60
endif
61

    
62
%.backup/restore: %.backup _always
63
	$(restoreBien) $<
64

    
65
%.sql/restore: %.sql _always
66
	$(bin)/psql_script_vegbien <$<
67
# pg_restore only supports "non-plain-text formats"
68
# (http://www.postgresql.org/docs/9.1/static/app-pgrestore.html)
69

    
70
%.backup/test: %.backup.sql _always
71
	rm $<
72

    
73
%.backup/rotate: %.backup _always
74
	mv $< $*.$(call mtime,$<).backup
75

    
76
#### Archived imports
77

    
78
confirmRm = $(call confirm,WARNING: This will delete the archived import $(1)!)
79

    
80
%.backup/remove: %.backup _always
81
	@$(call confirmRm,$*)
82
	echo $(call rmSchema,$*)|$(bin)/psql_script_vegbien
83

    
84
%.backup/rm_indexes: %.backup _always
85
	$(pg_dump) $*|$(bin)/mk_rm_indexes|$(psqlVerbose)
86

    
87
#### Full DB
88

    
89
vegbien.backup/all: _always vegbien.backup/test vegbien.backup/rotate ;
90

    
91
vegbien.backup:
92
	$(backup) all >$@
93

    
94
##### Synchronization
95

    
96
rsyncBackups := $(rsync) --include="/*.backup" --include="/*.sql" --exclude="**"
97

    
98
upload: _always
99
	$(rsyncBackups) $(local) $(remote)
100
download: _always
101
	$(rsyncBackups) $(remote) $(local)
    (1-1/1)