0.83     2022-11-19

- Fixed test failures on msys. Implemented by Paulo Custodio. GH #116.

- When running under GitHub Actions in --check-only mode, linting failures
  will now emit GitHub annotations
  (https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#example-creating-an-annotation-for-an-error). Implemented
  by Pavel Dostál. GH #120.

0.82     2022-04-15

- Fixed git tests to ignore local Git configuration files, which may cause the
  tests to fail. Implemented by Andreas Vögele. GH #109.

- The git tests nor run with LC_ALL set to C. Implemented by Andreas
  Vögele. GH #109.

0.81     2022-02-16

- The PerlTidy plugin will now always append the `--encode-output-strings`
  flag when using `Perl::Tidy` 20220101 or newer. This eliminates issues with
  character encoded content reported in GH #84, reported by Greg
  Oschwald. Thanks to Steven Hancock for letting me know that this was

0.80     2021-11-26

- Don't run the PodSpell plugin test unless `ispell` is installed. Reported by
  Slaven Rezić. GH #108.

0.79     2021-11-26

- Run `git stash pop` with `--quiet` flag again, as long as Git is not
  2.24.x. See notes in 0.75 for why we stopped passing `--quiet` in the first

- Fixed a bug where the class in the `--tidyall-class` option was not
  loaded. Fixed by Shlomi Fish. PR #107. Fixed GH #43.

0.78     2020-04-25

- Fix an issue with the pre-commit hook code when commit after a merge. If
  tidyall invoked `git stash` in the hook and there was content to stash, this
  would break the merge commit, leading to the commit to fail entirely. Now
  the pre-commit hook code will simply never call `git stash` when merging a
  merge commit. Reported by Damien Prystay. GH #100.

- This release also includes the changes from the 0.76 and 0.77 trial

0.77     2020-01-04 (TRIAL RELEASE)

- Made some more line ending fixes in the test code.

- Fixed a test to handle spaces with paths (on Windows, at least).

0.76     2019-12-24 (TRIAL RELEASE)

- Preserve line endings in files but using raw mode to read and
  write. Otherwise Perl will automatically write files with the
  platform-appropriate ending. This could lead to ending "flapping" if you
  have developers working on the same project on different platforms, and
  probably lots of other annoying issues. Based on PR #97 from Kenneth Ölwing.

0.75     2019-12-24

- Git v2.24.0 introduced a serious bug when running `git stash` with the
  `--quiet` flag that causes it to delete files. This in turn caused this
  package's pre-commit hook code to be seriously broken. We no longer pass the
  `--quiet` flag if the git version is >= 2.24. We will re-enable the flag
  once there is a version that fixes this bug.

- The pre-commit hook code now uses `git rev-parse -q --verify refs/stash` to
  determine if the call to `git stash` actually does anything. This seems
  better than attempting to parse the output of the `git stash` call for a
  user-facing message.

0.74     2019-05-24

- Fix a warning that would happen when applying shebang matching to empty
  files. Fixed by Greg Oschwald. GH #93.

0.73     2019-01-20

- Fix test failures on Windows. Based on GH #91 from Shlomi Fish.

0.72     2018-12-20

- Added documentation for the -j/--jobs flag to the tidyall script's help
  output and POD docs.

- Make the --iterations flag for bin/tidyall actually work. This had been
  documented but it has never actually done anything (though setting this in
  your config file does work).

0.71     2018-09-12

- Added two new plugins, GenericValidator and GenericTransformer. These allow
  you to execute any command as a validator or transformer respectively. This
  should be sufficient to keep us all from having to write new plugins for
  every command in the world, as these two plugins should handle most common

0.70     2018-04-12

- Borged File::Zglob into this distro for now. File::Zglob has not been
  installable under Perl 5.26+ for 8+ months

0.69     2017-10-06

- We now chdir to $ROOT before running commands. This fixes issues when you
  run tidyall from a subdirectory of your $ROOT (which works) but commands run
  by tidyall (like perlcritic) are looking for files using paths relative to
  root. Patch by Olaf Alders. Fixes GH #85. PR #86

0.68     2017-09-29

- Fixed heisenbug that could cause displaying constructor params (in verbose
  mode) to omit most of the parameter values.

0.67     2017-09-18

- Move "cmd" attribute back to Code::TidyAll::Plugin. Moving this to a role in
  0.66 broke plugins which run external commands but which don't ship with
  this distro. Reported by Greg Oschwald. GH #82.

0.66     2017-09-17

- The tidyall command line app now takes a --plugins option. This allows you
  to limit tidyall to running just the selected plugin(s).

0.65     2017-08-01

- A file under Git which had a status of "copied" would cause uninitialized
  value warnings from a pre-commit hook. Reported by Nigel Metheringham with
  help from Adam Herzog. GH #81.

0.64     2017-07-31

- Bug fixes on Windows. Now all plugins except PodSpell (which requires
  ispell) should work on Windows. This should all fix test failures seen in
  CPANTesters on Windows.

0.63     2017-07-23

- All plugins should now work when run against paths that include
  spaces. Previously, many plugins would fail because they were calling system
  commands by passing a single string rather than a list of arguments. Note
  that we now parse the "argv" given in the config file use
  Text::ParseWords::shellwords. It's possible that this could break your setup
  if you have some very pathological configuration options. Bug reports are
  welcome. Fixes #79.

0.62     2017-07-20

- Added support for a global config option "inc". This allows you to prepend
  directories to @INC when running tidyall. This affects both loading classes
  and running plugins. This is equivalent to the command line's -I option.

0.61     2017-07-07

- Fixed a Git pre-commit hook stash bug. The hook would always call "git stash
  pop" even if the call it had just made to "git stash" hadn't added anything
  to the stash. If the stash had anything on it, this could make a mess of
  your working directory. This showed up most often with calls to "git commit
  --amend" where you were trying to just edit the prior commit message, since
  you would be unlikely to have any changes to stash when doing so.

0.60     2017-07-03

- Attempted to fix a bug related to how git stash is used in the git
  pre-commit hook. The "git stash pop" command was happening too early, which
  would block commits when all the files in the index were tidy but the
  working directory contained untidy files. Based on PR #58 from Finn Smith.

0.59     2017-05-14

- Work around issue with Perl::Tidy when Getopt::Long::Configure is called
  before we call Perl::Tidy::perltidy. See
  https://rt.cpan.org/Ticket/Display.html?id=118558 for details.

0.58     2017-03-11

- Don't assume that '.' is in @INC in the Makefile.PL.

- Don't ship the node or PHP code used for tests in the tarball. This makes it
  much smaller.

0.57     2017-02-19

- Fix code that called a Specio private method directly.

0.56     2017-02-01

- Fixed Win32 test failures. Reported by Christian Walde. GH #72.

- Added a global ignore feature. You can now provide ignore configuration at
  the top level of your tidyall config file and/or pass an --ignore flag on
  the command line. Any ignores specified this way will be ignore for all
  plugins. Based on GH #73 from Martin Guner.

0.55     2016-10-31

- Require Moo 2.000000 or greater.

0.54     2016-10-15

- Fixed error when passing in paths as a string to the Code::TidyAll
  constructor. These are now coerced to Path::Tiny objects. Reported by Martin
  Gruner. GH #66.

0.53     2016-10-10


- Fixed failing tests on OSX. Reported by Martin Gruner. GH #65.

- Files that were tidied could have their permissions mode when they were
  rewritten. Reported by Martin Gruner (GH #68) and fixed by Adam Herzog (GH

0.52     2016-09-19


- The 0.50 release added an implicit configure phase prereq on Path::Tiny
  without declaring it. That bit of code has been reverted to use just core

- Change tidyall shbang line to "#!perl". I had changed it to "#!/usr/bin/env
  perl" but MakeMaker does not rewrite this on install.

0.51     2016-09-18


- Restored some exports to Code::TidyAll::Util for backwards
  compatibility. Some other plugins are using these exports.

0.50     2016-09-18


- Converted (almost) all file handling to use Path::Tiny. This should help
  make the code and tests more cross-platform, and simplifies various bits of
  internal code. Note that plugins now receive paths as Path::Tiny objects,
  which could break code that checks if what it receives is a plain scalar.


- Added support for tidying in multiple parallel jobs at once. You can pass a
  "--jobs" argument to tidyall or pass a "jobs" param to
  Code::TidyAll->new. This requires that you install Parallel::ForkManager.
- Paths in error messages now include the full relative path to the file being
  tidied. Previously this would just be something like "Foo.pm", now it will
  be "lib/My/Package/Foo.pm".

0.49     2016-07-22

- The verbose output now just shows the plugin name in the "applying the
  following plugins: ..." message, rather than stringifying the plugin

0.48     2016-06-16

- The Git pre-commit hook now only looks at the files that are staged for
  committing, rather than everything in the git repo that has been
  modified. Note that this does not change the tidyall script's "-g" flag,
  which still operates on all modified files in the repo.

- Check the exit code when running js-beautify and throw an error if this is
  non-zero. Patch by Graham Knop. GitHub #61.

0.46     2016-04-17

- Fix a use line which specified the required version of Text::Diff as
  "v1.44". This caused weirdness to cascade in the Makefile.PL. Reported by
  Olaf Alders. GitHub #60.

0.45     2016-04-11

- Some changes intended to be internal-only in the last release broke the
  handling of ignore and select config lines with multiple space-separated
  values. This should now work again (and is tested). Reported by Martin
  Gruner. GitHub #44.

0.44     2016-04-10

- Changed the shebang config item to actually accept multi items on different
  lines. The old method of specifying more than one item on a single line,
  separated by spaces, will continue to work, but is no longer documented.

0.43     2016-03-27

- Use the same improved "git status" code for Code::TidyAll::Git::Precommit as
  we do in bin/tidyall for the -g option. Patch by Finn Smith. GitHub #57.

0.42     2016-03-10

- Specify Text::Diff version as 'v1.44' instead of '1.44'. This fixes an
  inexplicable error that the OTRS project was having with the previous
  release (GitHub #53). Fixed by Martin Gruner. GitHub #54.

0.41     2016-03-04

- Replaced List::MoreUtils with List::SomeUtils.

0.40     2016-02-21

- Don't include files not tracked by git when looking for uncommitted files.
  Fixed by Olaf Alders. GitHub #51.

- Use Text::Diff for all diffs instead of calling an external
  command. Hopefully this makes this distro a little more portable.

0.39     2016-02-13

- Use "git status --porcelain -z" when trying to figure out what files are
  being uncommitted for git hooks. Implemented by Ricardo Signes. GitHub #40.

0.38     2016-01-11

- Tweaked the test names used by Test::Code::TidyAll so that they say
  something like "lib/Foo.pm is tidy" rather than just "lib/Foo.pm".

0.37     2015-12-03

- Really fix an empty files parameter to tidyall_ok (Test::Code::TidyAll
  desperately needs some tests).

0.36     2015-12-02

- Updated the distro metadata to point to github for bug reports rather than

0.35     2015-12-02

- If the "files" parameter to tidyall_ok didn't include any files that matches
  the tidyall config (or no files at all) this would cause an error from
  Test::Builder. This has been fixed so we now just spit out a single passing

0.34     2015-12-02

- Added a new "files" parameter that can be passed to the tidyall_ok sub
  exported by Test::Code::TidyAll. This makes it possible to use this sub to
  check just a subset of your files.

0.33     2015-11-30 (TRIAL RELEASE)

- Adding diff functionality as its own plugin (DiffOnTidyError), which was
  done in 0.31, turned out to be quite problematic. As a plugin you had to
  define which files it applied to via select & exclude, and in a large code
  base it was easy to select files that no other plugin applied to. This meant
  tidyall (and Test::Code::TidyAll, etc.) would include those files even
  though they were never touched. This could make tidying and tidy tests
  _much_ slower.

  This plugin has been replaced with a new config attribute that can be
  applied to all plugins, diff_on_tidy_error. When this is set, any plugin
  that tidies source in --check-only mode (also used by Test::Code::TidyAll)
  will include a diff in the error message, one diff per plugin. This has the
  added benefit of showing if you if multiple plugins are each making changes
  to the same file.

0.32     2015-11-19

- When in verbose mode we now show what plugins are being applied to each
  file. This is helpful if you want to know why a file isn't being ignored,
  for example.

- Added a new plugin configuration option for the rc file, "weight". You can
  use this to exercise greater control over the order that plugins run in.

0.31     2015-11-17

- Added a new plugin, DiffOnTidyError. This plugin will call "diff -u" to
  compare the original file content to the tidy version.

0.30     2015-09-14

- Added a --no-cleanup option for the tidyall script that causes it to leave
  any tempdirs it creates behind. Implemented by Mark Fowler. GitHub #41.

0.29     2015-08-15

- Replaced use of Digest::SHA1 with Digest::SHA. The latter module has been
  part of the Perl core since 5.10. Implemented by Sergey Romanov. GitHub #39.

0.28     2015-08-06

- The JSON plugin now uses JSON::MaybeXS instead of JSON.pm. Patch by Greg
  Oschwald. GitHub #37.

- Added a new plugin, PerlTidySweet, which uses perltidy-sweet instead of
  perltidy. Implemented by Mark Grimes. GitHub #26.

0.27     2015-07-04


- Fixed broken POD. Most modules were missing their NAME sections because of a
  mistake in the distro's weaver.ini file. Reported by Красимир Беров.

0.26     2015-06-29


- The tidyall script did not handle the -I option correctly. It was treated as
  a boolean rather than a string, meaning it basically ignored whatever you
  passed. Fixed by Andy Jack. GH #35.

- The PodChecker plugin no longer generates warnings about an undef variable
  if the file did not have any Pod.

- Added an option for the tidyall config file, shebang. This is an additional
  filter that selects files based on the shebang line
  (#!/bin/foo). Implemented by timgimyee. GH #25.

0.25     2015-03-31


- You can now pass "verbose => 1" to tidyall_ok(). Previously this would have
  been overridden because we unconditionally set "quiet => 1", but now we only
  do this when verbose is not specified.

- Added a new "msg_outputter" attribute to Code::TidyAll. By default, this is
  a sub that simply calls "printf", but you can pass something else to change
  how messages are printed. Test::Code::TidyAll uses this to send messages
  through diag().

- If you set "verbose => 1" when calling Test::Code::TidyAll, it will now use
  Text::Diff::Table to show details of how a file needs to be tidied in order
  to pass the tidyall checks.

- Made the PerlCritic plugin pass even if a critic module issues some
  warnings. As long as perlcritic says "source OK", we want to treat that as a
  pass, despite any warnings it may issue. Fixed by Mark Fowler.

- Made the caching model pluggable, and added a new
  Code::TidyAll::CacheModel::Shared class as an alternative to the default
  model. This lets you share the cache directory between multiple branches in
  a single checkout while still detecting file changes properly. Implemented
  by Mark Fowler.

0.24     2014-11-06


- At some point in the future, it will probably be necessary for Code::TidyAll
  to become aware of encodings on a per-file basis. As it stands right now,
  any tidying plugin which reformats text could, in theory, end up splitting
  up a UTF-8 character's bytes across at a line break.


- Replaced the use of Capture::Tiny with IPC::Run3 for some plugins. The
  former seems to sometimes return character data where we want bytes, even if
  the STDOUT and STDERR handles are binmode()'d to the ":bytes" encoding. This
  prevents warnings about writing wide characters from the JSBeautify plugin.

0.23     2014-11-06

- Fix test failures seen on CPANTesters.

0.22     2014-11-05


* Removed the compile test added in the last release. Many plugin modules
  won't compile unless optional prereqs are manually installed first (such as
  Perl::Critic, Perl::Tidy, etc.).

0.21     2014-11-05


* Test::Code::TidyAll now sets "quiet => 1" when creating the Code::TidyAll
  object to suppress noise from any plugins.

* Test::Code::TidyAll now calls Test::More::diag() after test failures instead
  of before.


* Lots of little doc tweaks and fixes.

0.20    2014-05-18


* Fix option handling implentation and documentation for
  Test::Code::TidyAll::tidyall_ok -
  https://github.com/jonswar/perl-code-tidyall/issues/18 (Olad Alders)

0.19    2014-03-06


* Added a JSON plugin (Gregory Oschwald)

0.18    2013-09-21


* Fix Test::Code::TidyAll::tidyall_ok -
  https://github.com/jonswar/perl-code-tidyall/issues/12 (Adam Taylor)

* Fix JSBeautify plugin as js-beautify no longer respects --replace

0.17    2013-03-11


* Rename API method process_files to more accurate process_paths


* Fix recursive processing of directories (Mark Risman)

* Improve git precommit setup script -
  https://github.com/jonswar/perl-code-tidyall/pull/10 (Olaf Anders)

0.16    2012-10-22


* Added phpcs plugin (Joseph Crotty)

* Added cssunminifier plugin

* Added SortLines plugin, for one-entry-per-line files like .gitignore

0.15    2012-10-11


* Fix test_dirs test to not rely on file ordering

0.14    2012-10-10


* Allow a plugin to be listed multiple times in config with different

* Specify order that plugins run (tidiers before validators, then alpha) and
  document that they are applied atomically

* Added etc/editors/tidyall.vim for Vim (Justin Devuyst)

* Added -r/--recursive flag to process directories recursively

* In -p/--pipe mode, mirror input to output in case of error (Justin Devuyst)

* Fix -l/--list handling of local files

* Added --version option

* Make git prereceive hook more modular, so it can be combined with other

0.13    2012-09-30


* Adjust MasonTidy plugin for new API

* Remove Util.t containing only author-only tests

0.12    2012-09-27


* Added podspell plugin (POD spell checker)

* Added --iterations flag to run tidier transforms multiple times

* Allow .tidyallrc as alternative to tidyall.ini

* Allow git prereceive hook to be bypassed by pushing an identical set of commits
    several consecutive times (allow_repeated_push)

* Added handcrafted usage w/summary of options, instead of Pod::Usage

0.11    2012-09-21


* Allow multiple select and ignore patterns, separated by whitespace or on separate lines

* Added -l/--list flag to show which plugins match which files

* Added conf_name parameter to specify name other than tidyall.ini

* Redirect stdout to stderr with -p/--pipe, so that stdout is dedicated to the tidied content

* In tidyall.el, hide error buffer on successful tidy


* Handle argv/config errors correctly in various plugins

* Eliminate double-printed error with -p/--pipe

* Allow relative paths to -p/--pipe

0.10    2012-09-12


* Added masontidy plugin (Mason component tidier)

* Added jslint plugin (javascript validator)

0.09    2012-09-11


* Remove use of ex-dependency Hash::MoreUtils from bin/tidyall (Jason Wieland)

* Added IPC::System::Simple and Pod::Usage to deps (Jason Wieland)

0.08    2012-09-10


* Added js-beautify plugin (javascript tidier)

* Added jshint plugin (javascript validator)

* Added podchecker plugin

* Added -p/--pipe flag to read from STDIN and write to STDOUT

* Allow tidyall.el to work in narrowed regions

* Make plugins into Moo classes, pass configuration as attributes


* Remove unused SVN::Look - perl-code-tidyall/pull/1 (Pedro Melo)

* Filter just files from git status in Code::TidyAll::Git::Precommit (Pedro Melo)

0.07    2012-09-05


* Added git pre-receive hook (Code::TidyAll::Git::Prereceive)


* Show file paths with errors in quiet mode

0.06    2012-09-03


* Added -g/--git flag and git pre-commit hook (Code::TidyAll::Git::Precommit)


* Omit directories from svn_uncommitted_files (--svn)

0.05    2012-08-21


* Added etc/editors/tidyall.el for Emacs

* Only print 'no plugins apply' warning in verbose mode

0.04    2012-08-14


* Added -s/--svn flag

* Added emergency_comment_prefix ("NO TIDYALL") to svn precommit hook


* Added back missing plugins

* Fix --check-only flag

0.03    2012-07-24


* Added svn precommit hook (Code::TidyAll::SVN::Precommit)

* Added preprocess_source and postprocess_source to plugins

* Added only_modes and except_modes configuration for plugins

* Added Code::TidyAll::process_source(), for processing a string instead of a file

* When only specified files are being processed, don't scan the whole hierarchy

* Added -I flag to tidyall


* Switch to Moo

* Added separate new_from_conf_file constructor, for cleaner separation of cases

0.02    2012-07-03


* Added Test::Code::TidyAll, to test that a project is tidied

* Added prefilter and postfilter params, to be applied to code before and after processing

* Added --check-only option to check but not tidy

* Added --mode option and modes config entry, to activate only a subset of plugins in config

* Added --output-suffix to write file to a different destination

* Added --quiet option to suppress most output

* Added --tidyall-class option to specify a different Code::TidyAll subclass

* Document how to create new plugins in Code::Tidy::Plugin

0.01    2012-06-17

* Initial release