Bug Fixes
- Fixed a test failure with the MySQL max limit value, mostly exhibited
on BSD platforms. - Removed fallback in the PostgreSQL engine on the
$PGUSER
and$PGPASSWORD
environnement variables, as well as the system username, since libpq does
all that automatically, and collects data from other sources that we did not
(e.g., the password and connection service files). Thanks to Tom Bloor for
the report (issue #410). - Changed dependency validation to prevent an error when a change required
from a different project has been reworked. Previously, when requiring a
change such asfoo:greeble
, Sqitch would raise an error iffoo:greeble
was reworked, suggesting that the dependency be tag-qualified to eliminate
ambiguity. Now reworked dependencies may be required without
tag-qualification, though tag-qualification should still be specified if
functionality as of a particular tag is required. - Added a workaround for the shell quoting issue on Windows. Applies to
IPC::System::Simple 1.29 and lower. See
pjf/ipc-system-simple#29
for details (#413). - Fixed an issue with the MariaDB client where a deploy, revert, or verify
failure was not properly propagated to Sqitch. Sqitch now passes
--abort-source-on-error
to the Mariamysql
client to ensure that SQL
errors cause the client to abort with an error so that Sqitch can properly
handle it. Thanks to @mvgrimes for the original report and, years later, the
fix (#209). - Fixed an issue with command argument parsing so that it truly never returns
a target without an engine specified, as documented. - Removed documentation for methods that don't exist.
- Fixed test failures due to a change in Encode v2.99 that's stricter about
undef
arguments that should be defined.
Improvements
- The Snowflake engine now consults the
connections.warehousename
,
connections.dbname
, andconnections.rolename
variables in the SnowSQL
configuration file (~/.snowsql/config
) before falling back on the
hard-coded warehouse name "sqitch" and using the system username as the
database name and no default for the role. - Switched to using a constant internally to optimize windows-specific code
paths at compile time. - When
deploy
detects undeployed dependencies, it now eliminates duplicates
before listing them in the error message. - Now requiring IO::Pager v0.34 or later for its more consistent interface.
- Added notes about creating databases to the tutorials. Thanks to Dave Rolsky
for the prompt (#315). - Added a status message to tell the user when the registry is being updated,
rather than just show each individual update. Thanks to Ben Hutton for the
suggestion (#276). - Added support for a
$SQITCH_TARGET
environment variable, which takes
precedence over all other target specifications except for command-line
options and arguments. Thanks to @mvgrimes for the suggestion (#203). - Fixed target/engine/change argument parsing so it won't automatically fail
whencore.engine
isn't set unless no targets are found. This lets engines
be determined strictly from command-line arguments -- derived from targets,
or just listed on their own -- whether or notcore.engine
is set. This
change eliminates the need for theno_default
parameter to the
parse_args()
method of App::Sqitch Command. It also greatly reduces the
need for the core--engine
option, which was previously required to work
around this issue (see below for its removal). - Refactored config handling in tests to use a custom subclass of
App::Sqitch::Config instead of various mocks, temporary files, and the like. - Added advice to use the PL/pgSQL
ASSERT()
function for verify scripts to
the Postgres tutorial. Thanks to Sergii Tkachenko for the PR (#425).
Target Variables
- The
verify
command now readsdeploy.variables
, and individual
verify.variables override
deploy.variables, on the assumption that the verify variables in general ought to be the same as the deploy variables. This makes
verifyvariable configuration consistent with
revert` variable
configuration. - Variables set via the
--set-deploy
option on therebase
andcheckout
commands no longer apply to both reverts and deploys, but only deploys. Use
the--set
option to apply a variable to both reverts and deploys. - Added support for core, engine, and target variable configuration. The
simplest way to use them is via the--set
option on theinit
,engine
,
andtarget
commands. These commands allow the configuration of database
client variables for specific engines and targets, as well as defaults that
apply to all change execution commands (deploy
,revert
,verify
,
rebase
, andcheckout
). The commands merge the variables from each level
in this priority order:--set-deploy
and--set-revert
options onrebase
andcheckout
--set
optiontarget.$target.variables
engine.$engine.variables
deploy.variables
,revert.variables
, andverify.variables
core.variables
Seesqitch-configuration
for general documentation of of the hierarchy for
merging variables and the documentation for each command for specifics.
Options Unification
- Added the
--chdir
/--cd
/-C
option to specify a directory to change to
before executing any Sqitch commands. Thanks to Thomas Sibley for the
suggestion (#411). - Added the
--no-pager
option to disable the pager (#414). - Changed command-line parsing to allow core and command options to appear
anywhere on the line. Previously, core options had to come before the
command name, and command options after. No more. The caveat is that command
options that take arguments should either appear after the command or use
the--opt=val
syntax instead of--opt val
, so that Sqitch doesn't think
val
is the command. Even in that case, it will search the rest of the
arguments to find a valid command. However, to minimize this challenge, the
documentation now suggests and demonstrates putting all options after the
command, like so:sqitch [command] [options]
. - Simplified and clarified the distinction between core and command options by
removing all options from the core except those that affect output and
runtime context. The core options are:- -C --chdir --cd Change to directory before performing any actions
- --etc-path Print the path to the etc directory and exit
- --no-pager Do not pipe output into a pager
- --quiet Quiet mode with non-error output suppressed
- -V --verbose Increment verbosity
- --version Print the version number and exit
- --help Show a list of commands and exit
- --man Print the introductory documentation and exit
- Relatedly, single-letter core options will now always be uppercase, while
single-letter command options will be lowercase. As such,-V
has been
added as an alias for--version
, although-v
remains for now,
undocumented. It may be removed in the future should a compelling use for
-v
in a command be discovered. - All other options have been moved to the commands they affect. Their use
should remain mostly unchanged now that command options are parsed from
anywhere on the command-line, although we recommend that all options come
after commands. The options were moved as follows:--registry
,--client
,--db-name
,--db-user
,--db-host
, and
--db-port
(and their aliases) have been moved to thecheckout
,
deploy
,log
,rebase
,revert
,status
,upgrade
, and
verify
commands.--plan-file
and--top-dir
(deprecated; see below) have been moved
to theadd
,bundle
,checkout
,deploy
,rebase
,revert
,
rework
,show
,status
,tag
, andverify
commands. They were
already supported by theinit
,engine
, andtarget
commands
(where--top-dir
is not deprecated).
- Because some command options conflicted with core options, a few options
have been removed altogether, including:
- The
--verbose
option on the--engine
and--target
commands has been
removed, but no visible change should be apparent, since those commands now
read the core--verbose
option. - The undocumented
--dir
alias for--top-dir
has been removed, as it
conflicted with the option of the same name but different meaning in the
init
,engine
, andtarget
commands. - The
-d
alias for--set-deploy
in therebase
andcheckout
commands
has been changed to-e
so as not to conflict with the-d
alias for
--db-name
. - Added tests for all commands to ensure none of their options conflict with
core options. Will help prevent conflicts in the future.
Deprecations & Removals
- Deprecated the
--top-dir
option in favor of--chdir
with a warning
except when used for configuration in theinit
,engine
, andtarget
commands. - Removed the core
--deploy-dir
,--revert-dir
, and--verify-dir
options,
which have been deprecated and triggering warnings since v0.9993 (August
2015). The--dir
option to theinit
,engine
, andtarget
commands
remains the favored interface for specifying script directories. - Removed the deprecated core
--engine
option. Theinit
command still
supports it, while other commands are able to parse the engine name as an
argument — e.g.,sqitch deploy mysql
— or implicitly as part of a target,
as insqitch revert db:pg:tryme
. When Sqitch is unable to determine the
engine for a command, the error message no longer mentions--engine
and
instead suggests specifying the engine via the target. This option never
triggered an error, but demonstration of its use has been limited toinit
examples. - Removed support for reading the
core.$engine
configuration, which has been
deprecated with warnings in favor ofengine.$engine
since 0.997 (November
2014). Thesqitch engine update-config
action remains available to update
old configurations, but may be removed in the future. - Removed the
--deploy
,--revert
, and--verify
options on theadd
command, as well as their--no-*
variants. They have been deprecated with
warnings in favor of the--with
and--without
options since v0.990
(January 2014). - Removed the
--deploy-template
,--revert-template
, and
--verify-template
options to theadd
command. They have been deprecated
with warnings in favor of the--use
option since v0.990 (January 2014). - Removed the
add.deploy_template
,add.revert_template
, and
add.verify_template
configuration settings. They have been deprecated with
warnings in favor of theadd.templates
configuration section since v0.990
(January 2014). - Removed the
@FIRST
and@LAST
symbolic tags, which have been deprecated
with warnings in favor of@ROOT
and@HEAD
, respectively, since 0.997
(November 2014). - Removed the command-specific options with the string "target" in them, such
as--to-target
,--upto-target
, which have been deprecated with warnings
in in favor of options containing the string "change", such as--to-change
and--upto-change
, since v0.997 (November 2014). - Remove the
engine
andtarget
commandset-*
actions and their
corresponding methods, which have been deprecated in favor of thealter
action since v0.9993 (August 2015). - Removed the automatic updating of change and tag IDs in the Postgres engine.
This functionality was added in v0.940 (December 2012), when Postgres was
the only engine, and the SHA-1 hash for change and tag IDs was changed.
There were very few deployments at the time, and all should long since have
been updated.
API Changes
- Added the URI-overriding parameters
user
,host
,port
, anddbname
to
App::Sqitch::Target so that command options can be used to easily set them. - Added support for passing attribute parameters to the
all_targets
group
constructor on App::Sqitch::Target, so that command-line options can be used
to assign attributes to all targets read from the configuration. - Aded the
target_params
method to App::Sqitch::Command and updated all
commands to use it when constructing targets. This allows commands to define
options for Target parameters, as required for moving options to commands as
described above. - Added the
class_for
method to App::Sqitch::Command so that the new options
parser described above can load a command class without instantiating an
instance. Useful for searching command-line arguments for a command name. - Added the
create
constructor to App::Sqitch::Command to let Sqitch
instantiate an instance of a command once it finds one viaclass_for
.
Previously, Sqitch used theload
method, which handled the functionality
of bothclass_for
andcreate
. That method still exists but is used only
in tests. - Added the ConnectingCommand role to define database connection options for
the commands that need them. - Added the ContextCommand role to define command options for the location of
the plan file and top directory. This is also where use of the deprecated
form of--top-dir
triggers a warning. - Removed the
verbosity
attribute from App::Sqitch::Command::engine and
App::Sqitch::Command::target, since the--verbose
option is no longer
needed. These commands now rely on the core--verbose
option. - Removed the copying of core options from the target class and
TargetConfigCommand role, since the attributes fetched from there are no
longer core options, but provided as attribute parameters to the
constructors by commands. - Removed documentation for the optional
config
parameter to the
all_targets
constructor of App::Sqitch::Target, since it was never used by
Sqitch. It always fetched the config from the requiredsqitch
parameter.
Support for theconfig
parameter has not been removed, since third-parties
might use it. - Removed the
set_*
methods in theengine
andtarget
commands, which
have been deprecated in favor of the newalter
method since v0.9993
(August 2015). - Removed the
old_id
andold_info
methods from Change and Tag, which date
from v0.940 (December 2012), and were provided only to allow existing
Postgres databases to be updated from the old to new ID format, now removed.
There should be no other use case for these methods.