You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 as foo:greeble, Sqitch would raise an error if foo: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 Maria mysql 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, and connections.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
when core.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 not core.engine is set. This
change eliminates the need for the no_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 reads deploy.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 withrevert` variable
configuration.
Variables set via the --set-deploy option on the rebase and checkout
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 the init, engine,
and target 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, and checkout). The commands merge the variables from each level
in this priority order:
--set-deploy and --set-revert options on rebase and checkout
--set option
target.$target.variables
engine.$engine.variables
deploy.variables, revert.variables, and verify.variables
core.variables
See sqitch-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 the checkout, deploy, log, rebase, revert, status, upgrade, and verify commands.
--plan-file and --top-dir (deprecated; see below) have been moved
to the add, bundle, checkout, deploy, rebase, revert, rework, show, status, tag, and verify commands. They were
already supported by the init, engine, and target 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, and target commands.
The -d alias for --set-deploy in the rebase and checkout 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 the init, engine, and target
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 the init, engine, and target commands
remains the favored interface for specifying script directories.
Removed the deprecated core --engine option. The init 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 in sqitch 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 to init
examples.
Removed support for reading the core.$engine configuration, which has been
deprecated with warnings in favor of engine.$engine since 0.997 (November
2014). The sqitch 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 the add
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 the add 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 the add.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 and target command set-* actions and their
corresponding methods, which have been deprecated in favor of the alter
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, and dbname 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 via class_for.
Previously, Sqitch used the load method, which handled the functionality
of both class_for and create. 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 required sqitch parameter.
Support for the config parameter has not been removed, since third-parties
might use it.
Removed the set_* methods in the engine and target commands, which
have been deprecated in favor of the new alter method since v0.9993
(August 2015).
Removed the old_id and old_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.