Be notified of new releases
Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 36 million developers.Sign up
Changes since v0.9999
- Fixed test failure due to a hard-coded system error that may be localized on non-en-US hosts. Thanks to Slaven Rezić for the catch (#427).
- Now require Test::MockModule 0.17 to silence a warning during testing. Thanks to Slaven Rezić for the suggestion.
- Fixed an error when Sqitch is run with no arguments. Thanks to Henrik Tudborg for the report (#428).
- Fixed missing dependency on IO::Pager in the distribution metadata.
- Removed use of File::HomeDir, thanks to a PR from Karen Etheridge (#433).
- Updated the tagline from "Sane database change management" to "Sensible database change management" out of sensitivity to those subject to mental illness (#435).
- Removed double-quoting of SQLite commands on Windows, inadvertently added by the workaround for Windows quoting in v0.9999.
- Fixed a Snowflake issue where Sqitch failed to recognize the proper error code for a missing table and therefore an uninitialized registry. Thanks to @lerouxt and @kulmam92 for the report and fix (#439).
- Added check for project initialization when no engine config can be found. When run from a directory with no configuration, Sqitch now reports that the project is not initialized instead of complaining about a lack of engine config (#437).
- Documented Snowflake key pair authentication in
sqitch-authentication, as well as
sqitch-environment. Thanks to Casey Largent for figuring it out (#441).
- Added the German localization. Thanks to Thomas Iguchi for the pull request (#451).
- Renamed the French localization from "fr" to "fr_FR", so that systems will actually find it.
- Added the
ask_yes_no()method as a replacement for
ask_y_n(), which is now deprecated. The new method expects localized responses from the user when translations are provided. Defaults to the English "yes" and "no" when no translation is available. Suggested by German translator Thomas Iguchi (#449).
- Fixed a bug where only project without a URI was allowed in the registry. Thanks to Conding-Brunna for the report (#450).
- Clarified the role of project URIs for uniqueness: They don't allow multiple projects with the same name, but do prevent the deployment of a project with the same name but different URI.
- Fixed an issue where target variables could not be found when a target name was not lowercase. Thanks to @maximejanssens for the report (#454).
- Now require Config::GitLike 1.15 or higher.
- Fixed the indentation of variables emitted by the
showactions of the
enginecommands, fixing a "Negative repeat count does nothing" warning in the process. Thanks to @maximejanssens for the
- Fixed a Snowflake test failure when the current system username has a space or other character requiring URI escaping. Thanks to Ralph Andrade for the report (#463).
- Fixed an issue where a wayward newline in some versions of SQLite prevented Sqitch from parsing the version. Thanks to Kivanc Yazan for the report (#465) and the fix (#465)!
- Fixed an error when Sqitch was run on a system without a valid username, such as some Docker environments. Thanks to Ferdinand Salis for the report (#459)!
- When Sqitch finds the registry does not exist on PostgreSQL, it now sends a warning to the PostgreSQL log reporting that it will initialize the database. This is to reduce confusion for folks watching the PostgreSQL error log while Sqitch runs (#314).
- Fixed a test failure with the MySQL max limit value, mostly exhibited
on BSD platforms.
- Removed fallback in the PostgreSQL engine on the
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 as
foo:greeble, Sqitch would raise an error if
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
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-errorto the Maria
mysqlclient 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
- 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
undefarguments that should be defined.
- The Snowflake engine now consults the
connections.rolenamevariables 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.
deploydetects 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
- Added support for a
$SQITCH_TARGETenvironment 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
core.engineisn'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 not
core.engineis set. This
change eliminates the need for the
no_defaultparameter to the
parse_args()method of App::Sqitch Command. It also greatly reduces the
need for the core
--engineoption, 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).
verifycommand now reads
deploy.variables, and individual
, on the assumption that the verify variables in general ought to be the same as the deploy variables. This makesverify
variable configuration consistent withrevert` variable
- Variables set via the
--set-deployoption on the
commands no longer apply to both reverts and deploys, but only deploys. Use
--setoption 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
--setoption on the
targetcommands. 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 (
checkout). The commands merge the variables from each level
in this priority order:
sqitch-configurationfor general documentation of of the hierarchy for
merging variables and the documentation for each command for specifics.
- Added the
-Coption to specify a directory to change to
before executing any Sqitch commands. Thanks to Thomas Sibley for the
- Added the
--no-pageroption 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
--opt=valsyntax instead of
--opt val, so that Sqitch doesn't think
valis 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,
added as an alias for
-vremains for now,
undocumented. It may be removed in the future should a compelling use for
-vin 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:
--db-port(and their aliases) have been moved to the
--top-dir(deprecated; see below) have been moved
verifycommands. They were
already supported by the
--top-diris not deprecated).
- Because some command options conflicted with core options, a few options
have been removed altogether, including:
--verboseoption on the
--targetcommands has been
removed, but no visible change should be apparent, since those commands now
read the core
- The undocumented
--top-dirhas been removed, as it
conflicted with the option of the same name but different meaning in the
has been changed to
-eso as not to conflict with the
- 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-diroption in favor of
--chdirwith a warning
except when used for configuration in the
- Removed the core
which have been deprecated and triggering warnings since v0.9993 (August
--diroption to the
remains the favored interface for specifying script directories.
- Removed the deprecated core
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,
sqitch revert db:pg:tryme. When Sqitch is unable to determine the
engine for a command, the error message no longer mentions
instead suggests specifying the engine via the target. This option never
triggered an error, but demonstration of its use has been limited to
- Removed support for reading the
core.$engineconfiguration, which has been
deprecated with warnings in favor of
engine.$enginesince 0.997 (November
sqitch engine update-configaction remains available to update
old configurations, but may be removed in the future.
- Removed the
--verifyoptions on the
command, as well as their
--no-*variants. They have been deprecated with
warnings in favor of the
--withoutoptions since v0.990
- Removed the
--verify-templateoptions to the
addcommand. They have been deprecated
with warnings in favor of the
--useoption since v0.990 (January 2014).
- Removed the
add.verify_templateconfiguration settings. They have been deprecated with
warnings in favor of the
add.templatesconfiguration section since v0.990
- Removed the
@LASTsymbolic tags, which have been deprecated
with warnings in favor of
@HEAD, respectively, since 0.997
- Removed the command-specific options with the string "target" in them, such
--upto-target, which have been deprecated with warnings
in in favor of options containing the string "change", such as
--upto-change, since v0.997 (November 2014).
- Remove the
set-*actions and their
corresponding methods, which have been deprecated in favor of the
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
- Added the URI-overriding parameters
App::Sqitch::Target so that command options can be used to easily set them.
- Added support for passing attribute parameters to the
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_paramsmethod 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
- Added the
class_formethod 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
createconstructor to App::Sqitch::Command to let Sqitch
instantiate an instance of a command once it finds one via
Previously, Sqitch used the
loadmethod, which handled the functionality
create. That method still exists but is used only
- 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
--top-dirtriggers a warning.
- Removed the
verbosityattribute from App::Sqitch::Command::engine and
App::Sqitch::Command::target, since the
--verboseoption is no longer
needed. These commands now rely on the core
- 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
configparameter to the
all_targetsconstructor of App::Sqitch::Target, since it was never used by
Sqitch. It always fetched the config from the required
Support for the
configparameter has not been removed, since third-parties
might use it.
- Removed the
set_*methods in the
have been deprecated in favor of the new
altermethod since v0.9993
- Removed the
old_infomethods 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.