Revision 9074
Added by Aaron Marcuse-Kubitza over 11 years ago
inputs/GBIF/table.run | ||
---|---|---|
4 | 4 |
|
5 | 5 |
if self_not_included; then |
6 | 6 |
|
7 |
table.tsv/make ()
|
|
7 |
table.tsv/make() |
|
8 | 8 |
{ |
9 | 9 |
echo_func; set_make_vars; check_target_exists |
10 | 10 |
to_target echo_run "$(dirname "${BASH_SOURCE[0]}")"/MySQL_export |
11 | 11 |
} |
12 | 12 |
|
13 |
export_mysql ()
|
|
13 |
export_mysql() |
|
14 | 14 |
{ |
15 | 15 |
echo_func |
16 | 16 |
table.tsv/make |
17 | 17 |
} |
18 | 18 |
|
19 | 19 |
func_override import__table_run |
20 |
import ()
|
|
20 |
import() |
|
21 | 21 |
{ |
22 | 22 |
echo_func |
23 | 23 |
export_mysql |
inputs/GBIF/raw_occurrence_record/run | ||
---|---|---|
4 | 4 |
if self_not_included; then |
5 | 5 |
|
6 | 6 |
func_override export_mysql__table_run |
7 |
export_mysql ()
|
|
7 |
export_mysql() |
|
8 | 8 |
{ |
9 | 9 |
echo_func |
10 | 10 |
export_mysql__table_run "$@" |
inputs/GBIF/_MySQL/run | ||
---|---|---|
3 | 3 |
|
4 | 4 |
if self_not_included; then |
5 | 5 |
|
6 |
import ()
|
|
6 |
import() |
|
7 | 7 |
{ |
8 | 8 |
echo_func |
9 | 9 |
make --directory="$top_dir" |
inputs/GBIF/run | ||
---|---|---|
5 | 5 |
|
6 | 6 |
subdirs=(_MySQL raw_occurrence_record) |
7 | 7 |
|
8 |
import ()
|
|
8 |
import() |
|
9 | 9 |
{ |
10 | 10 |
echo_func |
11 | 11 |
fwd "$FUNCNAME" "$@" |
schemas/VegCore/VegCore.pg.sql.run | ||
---|---|---|
5 | 5 |
|
6 | 6 |
if self_not_included; then |
7 | 7 |
|
8 |
install ()
|
|
8 |
install() |
|
9 | 9 |
{ |
10 | 10 |
echo_func |
11 | 11 |
root_make schemas/temp/reinstall |
12 | 12 |
psql_script_vegbien <"$top_file" |
13 | 13 |
} |
14 | 14 |
|
15 |
all ()
|
|
15 |
all() |
|
16 | 16 |
{ |
17 | 17 |
echo_func |
18 | 18 |
install |
schemas/VegCore/VegCore.ERD.mwb.run | ||
---|---|---|
7 | 7 |
|
8 | 8 |
if self_not_included; then |
9 | 9 |
|
10 |
VegCore.my.sql/make ()
|
|
10 |
VegCore.my.sql/make() |
|
11 | 11 |
{ |
12 | 12 |
echo_func; set_make_vars |
13 | 13 |
database=VegCore mysqldump_local --skip-add-drop-table >"$target" |
14 | 14 |
} |
15 | 15 |
|
16 |
export_mysql ()
|
|
16 |
export_mysql() |
|
17 | 17 |
{ |
18 | 18 |
echo_func |
19 | 19 |
VegCore.my.sql/make |
20 | 20 |
} |
21 | 21 |
|
22 |
VegCore.pg.sql/make ()
|
|
22 |
VegCore.pg.sql/make() |
|
23 | 23 |
{ |
24 | 24 |
echo_func; set_make_vars |
25 | 25 |
sql_ascii=1 my2pg <"${target%.pg.sql}.my.sql" >"$target" |
26 | 26 |
} |
27 | 27 |
|
28 |
export_postgres ()
|
|
28 |
export_postgres() |
|
29 | 29 |
{ |
30 | 30 |
echo_func |
31 | 31 |
VegCore.pg.sql/make |
32 | 32 |
} |
33 | 33 |
|
34 |
export_ ()
|
|
34 |
export_() |
|
35 | 35 |
{ |
36 | 36 |
echo_func |
37 | 37 |
(cd "$top_dir"; unzip_newer "$top_filename" document.mwb.xml) |
... | ... | |
39 | 39 |
export_postgres |
40 | 40 |
} |
41 | 41 |
|
42 |
import ()
|
|
42 |
import() |
|
43 | 43 |
{ |
44 | 44 |
echo_func |
45 | 45 |
(cd "$top_dir"; zip_newer "$top_filename" document.mwb.xml) |
46 | 46 |
} |
47 | 47 |
|
48 |
sync ()
|
|
48 |
sync() |
|
49 | 49 |
{ |
50 | 50 |
echo_func |
51 | 51 |
export_ |
52 | 52 |
import |
53 | 53 |
} |
54 | 54 |
|
55 |
all ()
|
|
55 |
all() |
|
56 | 56 |
{ |
57 | 57 |
echo_func |
58 | 58 |
sync |
run | ||
---|---|---|
8 | 8 |
: "${schema:=public}" |
9 | 9 |
: "${exports_dir:="$top_dir"/exports}" |
10 | 10 |
|
11 |
geoscrub_input/make ()
|
|
11 |
geoscrub_input/make() |
|
12 | 12 |
{ |
13 | 13 |
echo_func; set_make_vars; check_fake_target_exists |
14 | 14 |
pg_export_table_to_dir_no_header "$target_filename" |
15 | 15 |
} |
16 | 16 |
|
17 |
export_ ()
|
|
17 |
export_() |
|
18 | 18 |
{ |
19 | 19 |
echo_func |
20 | 20 |
geoscrub_input/make |
lib/import.sh | ||
---|---|---|
22 | 22 |
: "${table="$(basename "$PWD")"}" |
23 | 23 |
export schema table |
24 | 24 |
|
25 |
psql ()
|
|
25 |
psql() |
|
26 | 26 |
{ |
27 | 27 |
(cat <<EOF |
28 | 28 |
\set schema "$schema" |
... | ... | |
34 | 34 |
env no_search_path=1 "$bin_dir"/psql_verbose_vegbien |
35 | 35 |
} |
36 | 36 |
|
37 |
make ()
|
|
37 |
make() |
|
38 | 38 |
{ |
39 | 39 |
(set -x; env make --directory=.. --makefile=../input.Makefile \ |
40 | 40 |
"${@/#/$table/}") |
41 | 41 |
} |
42 | 42 |
|
43 |
map_table ()
|
|
43 |
map_table() |
|
44 | 44 |
{ |
45 | 45 |
make map.csv |
46 | 46 |
psql <<EOF |
... | ... | |
50 | 50 |
EOF |
51 | 51 |
} |
52 | 52 |
|
53 |
mk_derived () { "$root_dir"/schemas/VegCore/mk_derived; }
|
|
53 |
mk_derived() { "$root_dir"/schemas/VegCore/mk_derived; } |
|
54 | 54 |
|
55 |
public_schema_exists ()
|
|
55 |
public_schema_exists() |
|
56 | 56 |
{ "$bin_dir"/psql_script_vegbien </dev/null 2>/dev/null; } |
57 | 57 |
|
58 |
remake_VegBIEN_mappings ()
|
|
58 |
remake_VegBIEN_mappings() |
|
59 | 59 |
{ |
60 | 60 |
public_schema_exists || return 0 |
61 | 61 |
rm header.csv map.csv # remake them |
lib/runscripts/util.run | ||
---|---|---|
8 | 8 |
. "$(dirname "${BASH_SOURCE[0]}")"/path/to/util.run or file_including_util.run |
9 | 9 |
. "$(dirname "${BASH_SOURCE[0]}")"/other_includes |
10 | 10 |
|
11 |
cmd ()
|
|
11 |
cmd() |
|
12 | 12 |
{ |
13 | 13 |
echo_func |
14 | 14 |
"$(dirname "${BASH_SOURCE[0]}")"/path_relative_to_self |
... | ... | |
23 | 23 |
|
24 | 24 |
# users can override run_args_cmd to perform other commands (or no commands) |
25 | 25 |
# after the script is read |
26 |
on_exit () { run_args_cmd; }
|
|
26 |
on_exit() { run_args_cmd; } |
|
27 | 27 |
trap on_exit EXIT |
28 | 28 |
|
29 | 29 |
top_file="${top_script%.run}" |
lib/runscripts/table.run | ||
---|---|---|
5 | 5 |
. "$(dirname "${BASH_SOURCE[0]}")"/path/to/table.run |
6 | 6 |
|
7 | 7 |
func_override import__table_run |
8 |
import ()
|
|
8 |
import() |
|
9 | 9 |
{ |
10 | 10 |
echo_func |
11 | 11 |
before_import_cmds |
... | ... | |
25 | 25 |
mk_esc_name table |
26 | 26 |
export schema table |
27 | 27 |
|
28 |
input_make ()
|
|
28 |
input_make() |
|
29 | 29 |
{ |
30 | 30 |
echo_func |
31 | 31 |
extern make --directory="$top_dir"/.. "${@/#/$table/}" |
32 | 32 |
} |
33 | 33 |
|
34 |
map_table ()
|
|
34 |
map_table() |
|
35 | 35 |
{ |
36 | 36 |
echo_func |
37 | 37 |
input_make map.csv |
... | ... | |
42 | 42 |
EOF |
43 | 43 |
} |
44 | 44 |
|
45 |
mk_derived ()
|
|
45 |
mk_derived() |
|
46 | 46 |
{ |
47 | 47 |
echo_func |
48 | 48 |
"$root_dir"/schemas/VegCore/mk_derived |
49 | 49 |
} |
50 | 50 |
|
51 |
remake_VegBIEN_mappings ()
|
|
51 |
remake_VegBIEN_mappings() |
|
52 | 52 |
{ |
53 | 53 |
echo_func |
54 | 54 |
public_schema_exists || return 0 |
... | ... | |
56 | 56 |
yes|input_make test |
57 | 57 |
} |
58 | 58 |
|
59 |
postprocess () # overridable
|
|
59 |
postprocess() # overridable |
|
60 | 60 |
{ |
61 | 61 |
echo_func |
62 | 62 |
local file="$top_dir"/postprocess.sql |
63 | 63 |
if test -e "$file"; then psql "$@"; fi |
64 | 64 |
} |
65 | 65 |
|
66 |
import ()
|
|
66 |
import() |
|
67 | 67 |
{ |
68 | 68 |
echo_func |
69 | 69 |
map_table |
lib/runscripts/import.run | ||
---|---|---|
4 | 4 |
#!/bin/bash -e |
5 | 5 |
. "$(dirname "${BASH_SOURCE[0]}")"/path/to/import.run |
6 | 6 |
|
7 |
import ()
|
|
7 |
import() |
|
8 | 8 |
{ |
9 | 9 |
echo_func |
10 | 10 |
import_cmds |
... | ... | |
15 | 15 |
|
16 | 16 |
if self_not_included; then |
17 | 17 |
|
18 |
import ()
|
|
18 |
import() |
|
19 | 19 |
{ |
20 | 20 |
echo_func |
21 | 21 |
} |
22 | 22 |
|
23 |
export_ ()
|
|
23 |
export_() |
|
24 | 24 |
{ |
25 | 25 |
echo_func |
26 | 26 |
} |
27 | 27 |
|
28 |
all ()
|
|
28 |
all() |
|
29 | 29 |
{ |
30 | 30 |
echo_func |
31 | 31 |
import |
lib/sh/local.sh | ||
---|---|---|
13 | 13 |
|
14 | 14 |
#### make |
15 | 15 |
|
16 |
root_make () { echo_func; make --directory="$root_dir" "$@"; }
|
|
16 |
root_make() { echo_func; make --directory="$root_dir" "$@"; } |
|
17 | 17 |
|
18 | 18 |
#### connection vars |
19 | 19 |
|
... | ... | |
28 | 28 |
|
29 | 29 |
: "${postgres_compat=1}" |
30 | 30 |
|
31 |
mysqldump_local () { echo_func; use_local_remote; mysqldump_diffable "$@"; }
|
|
31 |
mysqldump_local() { echo_func; use_local_remote; mysqldump_diffable "$@"; } |
|
32 | 32 |
|
33 | 33 |
### PostgreSQL |
34 | 34 |
|
35 |
psql () # usage: [file=...] [dir=...] self
|
|
35 |
psql() # usage: [file=...] [dir=...] self |
|
36 | 36 |
{ |
37 | 37 |
echo_func |
38 | 38 |
if test "$file"; then |
... | ... | |
53 | 53 |
env no_search_path=1 "$psql_cmd" --output /dev/fd/4 "$@" 4>&1 >&2 |
54 | 54 |
} |
55 | 55 |
|
56 |
public_schema_exists () { psql_script_vegbien </dev/null 2>/dev/null; }
|
|
56 |
public_schema_exists() { psql_script_vegbien </dev/null 2>/dev/null; } |
|
57 | 57 |
|
58 | 58 |
fi |
lib/sh/make.sh | ||
---|---|---|
3 | 3 |
|
4 | 4 |
if self_not_included; then |
5 | 5 |
|
6 |
# usage: target_filename/command () { echo_func; set_make_vars; ...; }
|
|
6 |
# usage: target_filename/command() { echo_func; set_make_vars; ...; } |
|
7 | 7 |
alias set_make_vars="$(cat <<'EOF' |
8 | 8 |
local command="${FUNCNAME##*/}"; echo_vars command |
9 | 9 |
local target_filename="${FUNCNAME%/*}"; echo_vars target_filename |
... | ... | |
21 | 21 |
# usage: set_make_vars; to_target cmd... |
22 | 22 |
alias to_target='stdout="$target" to_file ' # last space alias-expands next word |
23 | 23 |
|
24 |
make () { echo_func; stdout2stderr=1 limit_stderr_cmd self "$@"; }
|
|
24 |
make() { echo_func; stdout2stderr=1 limit_stderr_cmd self "$@"; } |
|
25 | 25 |
|
26 | 26 |
if false; then ## usage: |
27 | 27 |
inline_make 3<<'EOF' |
... | ... | |
30 | 30 |
EOF |
31 | 31 |
# target will be run automatically because it's first in the makefile |
32 | 32 |
fi ## |
33 |
inline_make ()
|
|
33 |
inline_make() |
|
34 | 34 |
{ |
35 | 35 |
echo_func |
36 | 36 |
local self="$(readlink -f "${BASH_SOURCE[1]}")" |
lib/sh/util.sh | ||
---|---|---|
4 | 4 |
if test ! "$_util_sh_include_guard_utils"; then |
5 | 5 |
_util_sh_include_guard_utils=1 |
6 | 6 |
|
7 |
function extern () { (exec "$@") || return; }
|
|
7 |
function extern() { (exec "$@") || return; } |
|
8 | 8 |
|
9 |
isset () { test "${!1+isset}"; }
|
|
9 |
isset() { test "${!1+isset}"; } |
|
10 | 10 |
|
11 |
realpath () { readlink -f -- "$1"; }
|
|
11 |
realpath() { readlink -f -- "$1"; } |
|
12 | 12 |
|
13 |
include_guard_var () { realpath "$1"|"extern" sed 's/[^a-zA-Z0-9_]/_/g'; }
|
|
13 |
include_guard_var() { realpath "$1"|"extern" sed 's/[^a-zA-Z0-9_]/_/g'; } |
|
14 | 14 |
|
15 |
self_not_included () # usage: if self_not_included; then ... fi
|
|
15 |
self_not_included() # usage: if self_not_included; then ... fi |
|
16 | 16 |
{ |
17 | 17 |
test $# -ge 1 || set -- "${BASH_SOURCE[1]}" |
18 | 18 |
local include_guard="$(include_guard_var "$1")" |
... | ... | |
40 | 40 |
|
41 | 41 |
#### aliases |
42 | 42 |
|
43 |
unalias () { builtin unalias "$@" 2>&- || true; } # no error if undefined
|
|
43 |
unalias() { builtin unalias "$@" 2>&- || true; } # no error if undefined |
|
44 | 44 |
|
45 | 45 |
|
46 | 46 |
#### exceptions |
... | ... | |
56 | 56 |
|
57 | 57 |
# usage: try cmd...; ignore status; if catch status; then ...; fi; end_try |
58 | 58 |
|
59 |
function try () { e=0; "$@" || { export_e; true; }; }
|
|
59 |
function try() { e=0; "$@" || { export_e; true; }; } |
|
60 | 60 |
alias try='declare e; try ' # last space alias-expands next word |
61 | 61 |
|
62 |
catch () { test "$e" -eq "$1"; e=0; }
|
|
62 |
catch() { test "$e" -eq "$1"; e=0; } |
|
63 | 63 |
|
64 |
ignore () { catch "$@" || true; }
|
|
64 |
ignore() { catch "$@" || true; } |
|
65 | 65 |
|
66 | 66 |
alias end_try='rethrow' |
67 | 67 |
alias end_try_subshell='rethrow_subshell' |
... | ... | |
72 | 72 |
|
73 | 73 |
#### integers |
74 | 74 |
|
75 |
let! () { let "$@" || true; } # always returns true; safe to use for setting
|
|
75 |
let!() { let "$@" || true; } # always returns true; safe to use for setting |
|
76 | 76 |
# "If the last ARG evaluates to 0, let returns 1" (`help let`) |
77 | 77 |
|
78 |
bool2int () { try test ! "$1"; echo "$e"; } # empty->0; non-empty->1
|
|
78 |
bool2int() { try test ! "$1"; echo "$e"; } # empty->0; non-empty->1 |
|
79 | 79 |
|
80 | 80 |
|
81 | 81 |
#### arrays |
82 | 82 |
|
83 |
join () { local IFS="$delim"; echo "$*"; } # usage: delim=... join elems...
|
|
83 |
join() { local IFS="$delim"; echo "$*"; } # usage: delim=... join elems... |
|
84 | 84 |
|
85 |
reverse () # usage: array=($(reverse args...))
|
|
85 |
reverse() # usage: array=($(reverse args...)) |
|
86 | 86 |
{ |
87 | 87 |
local i |
88 | 88 |
for (( i=$#; i >= 1; i-- )); do printf '%q ' "${!i}"; done |
... | ... | |
91 | 91 |
|
92 | 92 |
#### paths |
93 | 93 |
|
94 |
canon_rel_path ()
|
|
94 |
canon_rel_path() |
|
95 | 95 |
{ |
96 | 96 |
local path="$1" |
97 | 97 |
path="$(realpath "$path")" # canonicalize |
... | ... | |
112 | 112 |
#### verbose output |
113 | 113 |
|
114 | 114 |
# usage: (stdout2stderr; cmd...) || return |
115 |
# `|| return` needed on Mac because of bug where -e doesn't apply to ()
|
|
116 |
stdout2stderr () { exec >&2; }
|
|
115 |
# `|| return` needed on Mac because of bug where -e doesn't apply to() |
|
116 |
stdout2stderr() { exec >&2; } |
|
117 | 117 |
|
118 | 118 |
# set verbosity |
119 | 119 |
if isset verbose; then : "${verbosity:=$(bool2int "$verbose")}"; fi |
... | ... | |
122 | 122 |
declare -i verbosity # ensure integer |
123 | 123 |
export verbosity # propagate the verbosity to invoked commands |
124 | 124 |
|
125 |
can_log () { test "$verbosity" -gt 0; } # verbosity=0 turns off all logging
|
|
125 |
can_log() { test "$verbosity" -gt 0; } # verbosity=0 turns off all logging |
|
126 | 126 |
|
127 |
log () { if can_log; then echo "$PS4$1" >&2; fi; }
|
|
127 |
log() { if can_log; then echo "$PS4$1" >&2; fi; } |
|
128 | 128 |
|
129 | 129 |
# usage: symbol=... log_custom msg |
130 |
log_custom () { local PS4="${PS4%[^ ] }$symbol "; log "$@"; }
|
|
130 |
log_custom() { local PS4="${PS4%[^ ] }$symbol "; log "$@"; } |
|
131 | 131 |
|
132 |
log_err () { symbol=! log_custom "$@"; }
|
|
132 |
log_err() { symbol=! log_custom "$@"; } |
|
133 | 133 |
|
134 |
log_info () { symbol=? log_custom "$@"; }
|
|
134 |
log_info() { symbol=? log_custom "$@"; } |
|
135 | 135 |
|
136 | 136 |
# usage: cmd || { save_e; log_e; ...; rethrow; } |
137 |
log_e () { log_err "command exited with error $e"; }
|
|
137 |
log_e() { log_err "command exited with error $e"; } |
|
138 | 138 |
|
139 | 139 |
# usage: cmd || [type=...] die msg |
140 |
die () { save_e; "log_${type:-err}" "$1"; rethrow; }
|
|
140 |
die() { save_e; "log_${type:-err}" "$1"; rethrow; } |
|
141 | 141 |
|
142 | 142 |
: "${log_indent= }" |
143 | 143 |
|
... | ... | |
151 | 151 |
fi # load new aliases |
152 | 152 |
if self_being_included; then |
153 | 153 |
|
154 |
echo_cmd ()
|
|
154 |
echo_cmd() |
|
155 | 155 |
{ |
156 | 156 |
case "$1" in extern) shift;; esac # extern implied by the log_level |
157 | 157 |
log "$*" |
158 | 158 |
} |
159 | 159 |
|
160 |
echo_run () { cmd2rel_path; echo_cmd "$@"; "$@"; }
|
|
160 |
echo_run() { cmd2rel_path; echo_cmd "$@"; "$@"; } |
|
161 | 161 |
|
162 | 162 |
# usage: (limit_stderr; cmd...) || return |
163 |
# `|| return` needed on Mac because of bug where -e doesn't apply to ()
|
|
164 |
limit_stderr () { inc_log_level; if ! can_log; then exec 2>/dev/null; fi; }
|
|
163 |
# `|| return` needed on Mac because of bug where -e doesn't apply to() |
|
164 |
limit_stderr() { inc_log_level; if ! can_log; then exec 2>/dev/null; fi; } |
|
165 | 165 |
|
166 |
limit_stderr_cmd () # usage: [stdout2stderr=1] limit_stderr_cmd cmd...
|
|
166 |
limit_stderr_cmd() # usage: [stdout2stderr=1] limit_stderr_cmd cmd... |
|
167 | 167 |
{ |
168 | 168 |
case "$1" in echo_run) shift; cmd2rel_path; echo_cmd "$@";; esac |
169 | 169 |
(limit_stderr |
... | ... | |
179 | 179 |
# echo all external commands |
180 | 180 |
alias extern="echo_run extern " # last space alias-expands next word |
181 | 181 |
|
182 |
alias self='extern "$FUNCNAME"' # usage: wrapper () { self ...; }
|
|
182 |
alias self='extern "$FUNCNAME"' # usage: wrapper() { self ...; } |
|
183 | 183 |
|
184 | 184 |
# commands that are always external |
185 | 185 |
for cmd in env; do alias "$cmd=extern $cmd"; done; unset cmd |
186 | 186 |
|
187 |
function echo_func ()
|
|
187 |
function echo_func() |
|
188 | 188 |
{ |
189 | 189 |
inc_log_level |
190 | 190 |
local script="$(canon_rel_path "${BASH_SOURCE[1]}")" |
... | ... | |
197 | 197 |
fi # load new aliases |
198 | 198 |
if self_being_included; then |
199 | 199 |
|
200 |
echo_stdin () # usage: input|echo_stdin|cmd
|
|
200 |
echo_stdin() # usage: input|echo_stdin|cmd |
|
201 | 201 |
{ |
202 | 202 |
inc_log_level |
203 | 203 |
if can_log; then |
... | ... | |
211 | 211 |
|
212 | 212 |
alias echo_stdout='echo_stdin' # usage: cmd|echo_stdout |
213 | 213 |
|
214 |
echo_vars () # usage: echo_vars var...
|
|
214 |
echo_vars() # usage: echo_vars var... |
|
215 | 215 |
{ |
216 | 216 |
inc_log_level; inc_log_level |
217 | 217 |
if can_log; then |
... | ... | |
220 | 220 |
fi |
221 | 221 |
} |
222 | 222 |
|
223 |
echo_export () { builtin export "$@"; echo_vars "$@"; }
|
|
223 |
echo_export() { builtin export "$@"; echo_vars "$@"; } |
|
224 | 224 |
|
225 | 225 |
if test "$verbosity" -ge 2; then |
226 | 226 |
alias export="echo_export" # automatically echo env vars when they are set |
227 | 227 |
fi |
228 | 228 |
|
229 |
usage () { echo "Usage: $1" >&2; (exit 2); }
|
|
229 |
usage() { echo "Usage: $1" >&2; (exit 2); } |
|
230 | 230 |
|
231 | 231 |
fi # load new aliases |
232 | 232 |
if self_being_included; then |
... | ... | |
236 | 236 |
|
237 | 237 |
sed_ere_flag="$(test "$(uname)" = Darwin && echo E || echo r)" |
238 | 238 |
|
239 |
sed () { self -"$sed_ere_flag" "$@";}
|
|
239 |
sed() { self -"$sed_ere_flag" "$@";} |
|
240 | 240 |
|
241 | 241 |
|
242 | 242 |
#### vars |
243 | 243 |
|
244 |
set_var () { eval "$1"'="$2"'; }
|
|
244 |
set_var() { eval "$1"'="$2"'; } |
|
245 | 245 |
|
246 |
set_inv () { set_var no_"$1" "$(test "${!1}" || echo 1)"; }
|
|
246 |
set_inv() { set_var no_"$1" "$(test "${!1}" || echo 1)"; } |
|
247 | 247 |
|
248 | 248 |
# usage: local var=...; local_inv |
249 | 249 |
alias local_inv='declare "no_$var=$(test "${!var}" || echo 1)"' |
... | ... | |
262 | 262 |
|
263 | 263 |
#### functions |
264 | 264 |
|
265 |
func_exists () { declare -f "$1" >/dev/null; }
|
|
265 |
func_exists() { declare -f "$1" >/dev/null; } |
|
266 | 266 |
|
267 |
copy_func () # usage: from=... to=... copy_func
|
|
267 |
copy_func() # usage: from=... to=... copy_func |
|
268 | 268 |
# $to must not exist. to get around the no-clobber restriction, use `unset -f`. |
269 | 269 |
{ |
270 | 270 |
: "${from:?}" "${to:?}" |
... | ... | |
274 | 274 |
eval "$to${from_def#$from}" |
275 | 275 |
} |
276 | 276 |
|
277 |
func_override () # usage: func_override old_name__suffix
|
|
277 |
func_override() # usage: func_override old_name__suffix |
|
278 | 278 |
{ from="${1%%__*}" to="$1" copy_func; } |
279 | 279 |
|
280 | 280 |
|
... | ... | |
283 | 283 |
top_script="$0" # outermost script |
284 | 284 |
top_dir="$(dirname "$top_script")" |
285 | 285 |
|
286 |
require_exists () # usage: require_exists file || return 0
|
|
286 |
require_exists() # usage: require_exists file || return 0 |
|
287 | 287 |
{ test ! -e "$1" || type=info die "file "$1" already exists, skipping"; } |
288 | 288 |
|
289 | 289 |
# auto-removes a command's output file on error (like make's .DELETE_ON_ERROR) |
290 |
function to_file () # usage: stdout=... [if_not_exists=1] to_file cmd...
|
|
290 |
function to_file() # usage: stdout=... [if_not_exists=1] to_file cmd... |
|
291 | 291 |
{ |
292 | 292 |
echo_func |
293 | 293 |
: "${stdout?}"; echo_vars stdout |
... | ... | |
296 | 296 |
} |
297 | 297 |
alias to_file='to_file ' # last space alias-expands next word |
298 | 298 |
|
299 |
run_args_cmd () # runs the command line args command
|
|
299 |
run_args_cmd() # runs the command line args command |
|
300 | 300 |
{ |
301 | 301 |
test $? -eq 0 || return |
302 | 302 |
eval set -- "$(reverse "${BASH_ARGV[@]}")" |
... | ... | |
304 | 304 |
echo_cmd "$(canon_rel_path "$0")" "$@"; "$@" |
305 | 305 |
} |
306 | 306 |
|
307 |
fwd () # usage: subdirs=(...); fwd "$FUNCNAME" "$@"
|
|
307 |
fwd() # usage: subdirs=(...); fwd "$FUNCNAME" "$@" |
|
308 | 308 |
{ |
309 | 309 |
echo_func |
310 | 310 |
: "${subdirs?}" |
... | ... | |
317 | 317 |
|
318 | 318 |
#### URLs |
319 | 319 |
|
320 |
localize_url () { test _"$1" = _"$(hostname -f)" || echo "$1"; }
|
|
320 |
localize_url() { test _"$1" = _"$(hostname -f)" || echo "$1"; } |
|
321 | 321 |
|
322 | 322 |
fi |
lib/sh/archives.sh | ||
---|---|---|
5 | 5 |
|
6 | 6 |
### zip |
7 | 7 |
|
8 |
zip ()
|
|
8 |
zip() |
|
9 | 9 |
{ |
10 | 10 |
stdout2stderr=1 try limit_stderr_cmd self "$@" |
11 | 11 |
ignore 12 # "zip has nothing to do" (`man zip`) |
12 | 12 |
end_try |
13 | 13 |
} |
14 | 14 |
|
15 |
unzip () { stdout2stderr=1 limit_stderr_cmd self "$@"; }
|
|
15 |
unzip() { stdout2stderr=1 limit_stderr_cmd self "$@"; } |
|
16 | 16 |
|
17 | 17 |
set_inv force |
18 | 18 |
alias zip_newer='zip ${no_force:+-u }' |
lib/sh/db.sh | ||
---|---|---|
10 | 10 |
|
11 | 11 |
quote='"' |
12 | 12 |
|
13 |
esc_name () { echo "$quote${1//$quote/$quote$quote}$quote"; }
|
|
13 |
esc_name() { echo "$quote${1//$quote/$quote$quote}$quote"; } |
|
14 | 14 |
|
15 |
mk_esc_name () { set_var "$1"_esc "$(esc_name "${!1}")"; }
|
|
15 |
mk_esc_name() { set_var "$1"_esc "$(esc_name "${!1}")"; } |
|
16 | 16 |
|
17 | 17 |
alias mk_schema_esc='declare schema_esc; mk_esc_name schema' |
18 | 18 |
alias mk_table_esc='declare table_esc; mk_esc_name table' |
... | ... | |
20 | 20 |
fi # load new aliases |
21 | 21 |
if self_being_included; then |
22 | 22 |
|
23 |
log_sql () { test "$verbosity" -ge 2; }
|
|
23 |
log_sql() { test "$verbosity" -ge 2; } |
|
24 | 24 |
|
25 | 25 |
|
26 | 26 |
### MySQL |
27 | 27 |
|
28 | 28 |
# auto-adds connection/login opts when specified |
29 |
mysql_cmd () # usage: mysql* () { ...; mysql_cmd "$@"; }
|
|
29 |
mysql_cmd() # usage: mysql*() { ...; mysql_cmd "$@"; }
|
|
30 | 30 |
{ |
31 | 31 |
echo_func |
32 | 32 |
local ssh_server="$(localize_url "$ssh_server")" |
... | ... | |
42 | 42 |
${password+="$password"} ${database:+--databases "$database" --tables } "$@" |
43 | 43 |
} |
44 | 44 |
|
45 |
mysql () { echo_func; mysql_cmd --verbose "$@"; }
|
|
45 |
mysql() { echo_func; mysql_cmd --verbose "$@"; } |
|
46 | 46 |
|
47 |
mysql_ANSI ()
|
|
47 |
mysql_ANSI() |
|
48 | 48 |
{ |
49 | 49 |
echo_func |
50 | 50 |
(echo "SET sql_mode = 'ANSI';"; cat)|mysql "$@" |
51 | 51 |
} |
52 | 52 |
|
53 |
mysqldump () # usage: [schema=1 | data=1] mysqldump db [table...]
|
|
53 |
mysqldump() # usage: [schema=1 | data=1] mysqldump db [table...] |
|
54 | 54 |
{ |
55 | 55 |
echo_func |
56 | 56 |
mysql_cmd --quick --lock-tables=false --set-charset \ |
... | ... | |
58 | 58 |
${schema:+--no-data }${data:+--no-create-info }"$@" |
59 | 59 |
} |
60 | 60 |
|
61 |
mysqldump_diffable ()
|
|
61 |
mysqldump_diffable() |
|
62 | 62 |
{ |
63 | 63 |
echo_func |
64 | 64 |
mysqldump "$@"|{ pipe_delay; sed 's/^(-- Dump completed).*$/\1/'; } |
... | ... | |
67 | 67 |
|
68 | 68 |
### PostgreSQL |
69 | 69 |
|
70 |
pg_copy_to ()
|
|
70 |
pg_copy_to() |
|
71 | 71 |
{ |
72 | 72 |
echo_func |
73 | 73 |
if test ! "$source"; then |
... | ... | |
81 | 81 |
psql "$@" <<<"COPY $source TO STDOUT $pg_copy_format;" |
82 | 82 |
} |
83 | 83 |
|
84 |
pg_header ()
|
|
84 |
pg_header() |
|
85 | 85 |
{ |
86 | 86 |
echo_func |
87 | 87 |
local pg_copy_format="CSV HEADER" limit=0 |
88 | 88 |
pg_copy_to "$@"|echo_stdout |
89 | 89 |
} |
90 | 90 |
|
91 |
pg_export_table_no_header ()
|
|
91 |
pg_export_table_no_header() |
|
92 | 92 |
{ |
93 | 93 |
echo_func |
94 | 94 |
local pg_copy_format="CSV" |
95 | 95 |
pg_copy_to "$@" |
96 | 96 |
} |
97 | 97 |
|
98 |
pg_export_table_to_dir_no_header ()
|
|
98 |
pg_export_table_to_dir_no_header() |
|
99 | 99 |
{ |
100 | 100 |
echo_func |
101 | 101 |
local table="$1"; shift; mk_table_esc |
web/links/index.htm.run | ||
---|---|---|
7 | 7 |
|
8 | 8 |
export linked_file="${BASH_SOURCE[0]%.run}" |
9 | 9 |
|
10 |
clean_up ()
|
|
10 |
clean_up() |
|
11 | 11 |
{ |
12 | 12 |
echo_func |
13 | 13 |
echo_run in_place "$linked_file" repl \ |
14 | 14 |
"$root_dir"/lib/Firefox_bookmarks.reformat.csv |
15 | 15 |
} |
16 | 16 |
|
17 |
all ()
|
|
17 |
all() |
|
18 | 18 |
{ |
19 | 19 |
echo_func |
20 | 20 |
clean_up |
Also available in: Unified diff
*{.sh,run}: removed extra space between function name and (), which is apparently not needed even though `help function` includes it. this greatly improves readability, including when function names are pasted into commit messages!