lib/streams.py: added file_get_contents()
lib/tnrs.py: configure the server separately from the base URL
lib/: svn:ignore tnrs.url so the TNRS dev server URL does not become public
lib/tnrs.py: retrieval_request_template: taxonomic_constraint, source_sorting: documented their meaning and why they need to be on/off
lib/runscripts/import.run: added install() target
lib/runscripts/in_datasrc_dir.run: use new local.run
added lib/runscripts/local.run
fix: lib/util.py: dict_subset(): raise an error if collections.OrderedDict isn't available, because some callers may depend on this. note that using dict instead of OrderedDict may be the cause of the joining on the wrong columns bug (issue #902).
bugfix: lib/runscripts/validations.pg.sql.run: updated to reflect that validations.sql is now located inside a subdir, not the datasrc dir
fix: lib/runscripts/file.pg.sql.run: removed include of in_datasrc_dir.run, because this location does not apply to all .sql export scripts
lib/runscripts/validations.pg.sql.run: export_(): make the export idempotent for easier re-runnability
bugfix: lib/sh/db.sh: pg_dump(): need use_pg to import $pg_database before checking for existence of $database
lib/sh/util.sh: import_vars: documented that it's idempotent
bugfix: lib/util.py: use OrderedDict from collections rather than ordereddict to work with Mac OS X 10.8 Mountain Lion (http://vegpath.org/links/#OrderedDict)
bugfix: benign_does_not_exist_error(): removed ignore_e=3, because this exit status is also used for other errors
fix: lib/sh/db.sh: benign_does_not_exist_error(): use benign_error=1, which is now supported properly by stderr_matches()
bugfix: lib/sh/util.sh: stderr_matches(): support $benign_error properly, by handling exit status logging in this func instead
bugfix: lib/sh/db.sh: pg_schema_exists(): also need to benignify "does not exist" error if returns false
bugfix: lib/sh/util.sh: stderr_matches(): need to separately display errors that were incorrectly suppressed due to $benign_error
bugfix: lib/sh/util.sh: is_err(): rethrow must be inverted (rethrow->false if error)
lib/sh/util.sh: added is_err()
lib/sh/local.sh: public_schema_exists(): moved to lib/sh/db.sh since this no longer depends on BIEN-specific configurations
bugfix: lib/sh/db.sh: public_schema_exists(): don't hide the function call tree so it's clear which function is running the psql commands
fix: *{.sh,run}: stderr_matches() callers: added benign_error=1 where needed
fix: *{.sh,run}: stderr_matches() callers: usage: documented that they may require benign_error=1
fix: lib/sh/util.sh: stderr_matches(): usage: documented that this may require benign_error=1
bugfix: lib/sh/db.sh: pg_cmd(): updated for new echo_vars log_level
fix: lib/sh/db.sh: pg_schema_exists(): display the function name so it's clear which function is running the psql commands
fix: lib/sh/db.sh: pg_schema_exists(): don't use log++ because it hides the command that produces the benign error
fix: lib/sh/db.sh: psql(): removed debugging changes
bugfix: lib/sh/util.sh: highlight_log_msg(): when not can_highlight_log_msg, need to remove any surrounding formatting
fix: lib/sh/util.sh: die_error_hidden(): always log local vars at same log_level as echo_func
fix: *{.sh,run}: always log kw_params at same log_level as echo_func
lib/sh/util.sh: split_lines(): usage: matched up and synced different syntaxes
bugfix: lib/sh/util.sh: log_msg!(): split_lines does not support being invoked by wrapper; need to use `declare lines; wrapper "split_lines" str` instead
fix: lib/sh/util.sh: split_lines(): usage: documented different syntax for when using wrapper
bugfix: lib/sh/util.sh: die_error_hidden(): echo_func to assist debugging
bugfix: lib/sh/util.sh: split(): need to limit the effects of IFS to just the splitting, so it doesn't cause strange errors in other functions
bugfix: stderr2stdout(): fd 2 must be redirected back to fd 2, not log-filtered, in case there are other errors in addition to the benign error. this fixes a bug in pg_schema_exists(), where errors about the DB being down were not displayed because they were log-filtered out.
lib/sh/make.sh: set_make_vars: don't display make vars at verbosity 2 to avoid clutter
bugfix: lib/sh/make.sh: begin_target: don't echo_func twice
bugfix: lib/runscripts/util.run: a non-runscript should have all args passed to main(). this fixes a bug in backups/*_snapshot where "main" would need to be prepended to any args for the script to run correctly.
bugfix: lib/runscripts/util.run: $wrap_fn: invoked script must always run as runscript so that wrapped command is run
lib/runscripts/util.run: added $is_runscript, for use by $wrap_fn
bugfix: lib/runscripts/util.run: $wrap_fn: $top_script doesn't need to be world-executable for most uses of sudo (only if sudoing to non-root)
lib/sh/db.sh: pg_snapshot(): perform online backup if possible, to avoid needing to restart the server
lib/sh/db.sh: added pg_start_backup(), pg_stop_backup()
lib/sh/db.sh: psql(): only set redirs if can redirect
bugfix: psql(): when as_root is on, need to avoid redirections as these are not passed through by sudo
bugfix: lib/sh/db.sh: psql(): don't use `--file /dev/fd/40` when can't redirect
fix: lib/sh/db.sh: psql(): when using sudo with custom $stdin, raise error that this is not supported
lib/sh/db.sh: psql(): $data_bypasses_filter: renamed to $data2stdout for clarity
lib/sh/db.sh: psql(): $bypass_ok: renamed to $can_redir for clarity
lib/sh/db.sh: psql(): usage: $stdin: documented that can also use process substitution for this
bugfix: lib/sh/util.sh: `type` calls: need -- before cmd in case it starts with -
lib/sh/util.sh: cmd2rel_path: use is_extern()
lib/sh/sync.sh: db_snapshot(): use `end_try` as specified in `try` usage
lib/sh/util.sh: try: usage: added location of finally block
lib/sh/sync.sh: upload(): always print the function and kw_params
bugfix: lib/sh/util.sh: type(): need to handle options before command name
lib/sh/util.sh: added 1st_non_opt()
lib/sh/util.sh: unalias(): use self_builtin, which is now defined before it
lib/runscripts/util.run: sudo(): avoid slow $wrap_fn when using `command` (ie. always executable)
bugfix: lib/sh/util.sh: commands: `type` calls: need to account for the fact that any alias is already expanded
lib/sh/util.sh: functions: moved before commands since commands are more complex
lib/sh/sync.sh: db_copy() and callers: pass args as rsync options
fix: lib/sh/sync.sh: db_copy(): need to exclude files which prevent tape backup
lib/sh/db.sh: added pg_ctl(), pg_snapshot()
lib/sh/sync.sh: db_snapshot(): copy changes before stopping DB to minimize the time that it's shut down
lib/sh/sync.sh: db_snapshot(): factored copy operation out into separate db_copy() function
lib/sh/db.sh: mysql_snapshot(): use new db_snapshot()
lib/sh/sync.sh: added db_snapshot()
lib/Firefox_bookmarks.reformat.csv: changed "page's own description" to "page's self-description" for clarity
lib/sh/db.sh: mysql_snapshot(): for large files, don't re-copy entire file
lib/sh/db.sh: mysql_snapshot(): use live mode as the default
fix: lib/sh/db.sh: mysql_snapshot(): need to create dest dir if doesn't exist
bugfix: lib/sh/db.sh: mysql_snapshot(): try: need to use split syntax with prep_try instead, to work with prefix vars
fix: lib/sh/util.sh: try usage: documented that the split syntax with prep_try is meant to be used with vars before the cmd
fix: lib/sh/util.sh: echo_vars(): also need to print unset vars (including unset kw_params)
lib/sh/util.sh: echo_vars(): put loop var on same line as `for`
bugfix: lib/sh/util.sh: sudo(): need to preserve PATH separately because -E does not preserve this
lib/sh/util.sh: echo_redirs_cmd(): inline the function alias since it's only used in one place
bugfix: lib/sh/util.sh: redir(): need to load new aliases before it
lib/sh/util.sh: echo_redirs_cmd(): log $PATH to facilitate troubleshooting
lib/sh/util.sh: echo_redirs_cmd(): documented what the $(...) section does
lib/sh/util.sh: echo_redirs_cmd(): moved comment about <>file redirs to line that it applies to
lib/sh/util.sh: moved echo_redirs_cmd() to right before redir() which uses it
lib/sh/util.sh: catch(): log at higher log_level, since this is internal code
fix: lib/sh/util.sh: die_e(): treat SIGPIPE as benign error
lib/sh/util.sh: removed no longer used ignore_sig(). use ignore() instead, which now supports SIG*.
lib/sh/util.sh: piped_cmd(): use ignore, which now supports SIG*
lib/sh/util.sh: signals: catch(): added echo_func
lib/sh/util.sh: set_global_fds(): debug to global stderr in case stderr filtered
lib/sh/util.sh: debugging: use configurable debug_fd (set to $err_fd)
lib/sh/util.sh: signals: override catch() to support SIG* as exception type
lib/sh/util.sh: moved primitives sections before more complex sections that depend on them
lib/sh/util.sh: 2nd functions section: moved to 1st functions section