Project

General

Profile

1 6666 aaronmk
##### Configuration
2
3
src_server ?= jupiter
4
5
6 6522 aaronmk
selfDir_NzrNZp := $(dir $(lastword $(MAKEFILE_LIST)))
7
root := $(selfDir_NzrNZp)..
8
include $(root)/lib/common.Makefile
9 3699 aaronmk
10
11 3393 aaronmk
##### Vars/functions
12
13 3403 aaronmk
# Make
14
SHELL := /bin/bash
15
16 3438 aaronmk
# Paths
17 6522 aaronmk
bin := $(root)/bin
18 3438 aaronmk
19 3393 aaronmk
# DB
20 7024 aaronmk
psqlNoSearchPath := env no_search_path=1 $(bin)/psql_script_vegbien
21 3393 aaronmk
pg_dump := $(bin)/pg_dump_vegbien
22 3404 aaronmk
backup := "time" env data=1 $(pg_dump)
23
restore := "time" $(bin)/postgres_vegbien pg_restore --exit-on-error
24
restoreBien := $(restore) --dbname=vegbien
25
# pg_restore doesn't support PGDATABASE env var
26 3393 aaronmk
27 3437 aaronmk
##### Backups
28 3393 aaronmk
29 6526 aaronmk
backups := $(wildcard *.backup)
30
31 6571 aaronmk
#### Checksums
32
33 6526 aaronmk
md5s: _always $(backups:%=%.md5) ;
34
35 6520 aaronmk
%.md5: %
36 6536 aaronmk
	nice -n +5 md5sum $<|cut -d ' ' -f 1 >$@
37 6520 aaronmk
38 7326 aaronmk
# Run with `make -s` to avoid echoing make commands
39 6573 aaronmk
%.md5/test: %.md5 % _always
40 6655 aaronmk
	echo '$(shell cat $<)  $*'|nice -n +5 md5sum -$(if $(isMac),v)c /dev/stdin
41 6572 aaronmk
42 6571 aaronmk
#### SQL
43
44 6520 aaronmk
# Must come before %.sql with no prerequisites to be matched first
45 3395 aaronmk
%.sql: %
46 3399 aaronmk
	$(restore) $< >$@
47 3395 aaronmk
48 4751 aaronmk
# Full DB
49
# Must come before %.backup to be matched first
50
vegbien.%.backup:
51
	$(backup) all >$@
52 6648 aaronmk
	$(MAKE) $@.md5
53 4751 aaronmk
54 3544 aaronmk
backup* = $(backup) $* >$@
55
56 3393 aaronmk
# Note: This can't be used for the current (unrotated) public schema because
57
# pg_dump doesn't back up the CREATE SCHEMA statement for it, assuming falsely
58
# that public already exists because it's in template1.
59 3543 aaronmk
%.backup:
60
	$(backup*)
61 6521 aaronmk
	$(MAKE) $@.md5
62 3544 aaronmk
63
# When testing, turn off %.sql so make won't skip `%.sql: %` in favor of it
64
ifeq ($(filter %.backup/test,$(MAKECMDGOALS)),)
65 3543 aaronmk
%.sql:
66
	env plain=1 $(backup*)
67 3544 aaronmk
endif
68 3393 aaronmk
69 3402 aaronmk
%.backup/restore: %.backup _always
70 3399 aaronmk
	$(restoreBien) $<
71 3393 aaronmk
72 3402 aaronmk
%.sql/restore: %.sql _always
73
	$(bin)/psql_script_vegbien <$<
74
# pg_restore only supports "non-plain-text formats"
75
# (http://www.postgresql.org/docs/9.1/static/app-pgrestore.html)
76
77 3409 aaronmk
%.backup/test: %.backup.sql _always
78
	rm $<
79
80 3437 aaronmk
#### Archived imports
81 3393 aaronmk
82
confirmRm = $(call confirm,WARNING: This will delete the archived import $(1)!)
83
84 6940 aaronmk
public* = $(*:vegbien.%=%)
85 6645 aaronmk
86 3393 aaronmk
%.backup/remove: %.backup _always
87 6645 aaronmk
	@$(call confirmRm,$(public*))
88 7024 aaronmk
	echo $(call rmSchemaCmd,$(public*))|$(psqlNoSearchPath)
89 3393 aaronmk
90 3701 aaronmk
##### Synchronization
91
92 6890 aaronmk
remote := $(src_user)@$(src_server):/data/dev/aaronmk/bien/backups/
93 6666 aaronmk
94 6469 aaronmk
rsyncBackups := $(rsync) --include="/*.backup" --include="/*.sql"\
95 6595 aaronmk
--include="/*.csv" --include="/*.md5" --exclude="**"
96 3701 aaronmk
97
upload: _always
98
	$(rsyncBackups) $(local) $(remote)
99 6667 aaronmk
100
%/download: _always
101 7037 aaronmk
	-$(if $(filter %.md5,$*),,$(MAKE) $*.md5/download)
102 6667 aaronmk
	$(rsync) $(remote)$* $(local)$*
103 6724 aaronmk
# ignore errors if $*.md5 does not exist