Skip to content

Sqitch v0.9999

Compare
Choose a tag to compare
@theory theory released this 01 Feb 20:32
v0.9999
98b3857

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 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.