Changelog for ack

1.74        Wed Nov 28 22:08:16 CST 2007
    Added -u, --unrestricted options that search absolutely all
    files and directories, just like grep.

    Ignores Codeville's .cdv directories.

    Ignores SourceGear's _sgbak directories.

    ack -o emulates grep now and shows filenames unless explicitly
    suppressed with -h.

    Added workaround for older Getopt::Long.

    Fixed some testcases so that they are more robust (order of
    files, forward/backward slashes and shellquoting).

    Fixed a test that would fail if the files weren't sorted.

1.72        Wed Nov  7 23:16:46 CST 2007
    Please note that I have moved the bug/issue queue to Google
    Code at  The RT queue
    at will no longer be maintained.

    The test suite will now run with a TTY, and as part of the
    Debian packaging process.

    Fixed some grouping bugs.  Thanks, Torsten Blix.

    Skips Mercurial's .hg and Bazaar's .bzr directories.  Thanks,
    Ori Avtalion.

    Added .cc, .hpp, and .hh for C++.  Thanks, Kevin Riggle.

1.70        Sun Nov  4 21:13:55 CST 2007
    Added --lines argument.

    Added -1 to the --help output.  Thanks Elliot Shank.

    Added sanity checks for -m, --after_context and --before_context.

    -m and -C didn't play nicely together.  Now they do.

1.69_01     Fri Oct 26 2007
    Added -A, -B and -C options for showing context after, before
    and around your match, respectively.  Thanks very much to Torsten
    Blix for writing code and tests for this most popular request.

    Skips directory autom4te.cache, a cache for autoconf tools, and
    cover_db, used by Devel::Cover.

    ack used to check for options that didn't make sense together,
    like "ack -l --group", and wouldn't run.  Now, with the ability
    to have options in the environment, and in your .ackrc file, I
    was getting a lot of conflicts that didn't make sense.  If I
    specify "ack -l --group" on the command line, I should get an
    error, but if I do "ack -l" and I have "--group" in my .ackrc,
    that shouldn't throw an error.

    So I know what I want the behavior to be, but I don't know how
    I want to code it.  So, in the meantime, I'm removing the

1.68    Tue Oct 16 14:58:27 CDT 2007
    Implemented --with-filename and --no-filename, which were
    documented but never implemented.  Thanks to Nigel Metheringham
    for the heads-up.

    Added Erlang support.

    Added tests for ack -h and -H.

1.67_02     Sun Oct  7 14:50:38 CDT 2007
    ack no longer uses -T, but the tests still use it.

    Check for ~/_ackrc, too.

    --passthru would highlight every single zero-width space between
    characters.  Oops.  The effect would be to have your output be
    15x larger than necessary.

    Added still more sanity checks on option conflicts.

    The output for -v negative searching now matches regular searching.

1.67_01     Wed Sep 26 13:36:18 CDT 2007
    Color coding no longer "smears" the following line if the colored
    part of the match wraps to the next line.

    Support for an .ackrc file.

    Little bitty speed enhancements inside.  Nothing major, but it
    all adds up, especially on something as commonly-used as ack.

    ack now runs under -T (taint mode).  This is just a good idea,
    although there's nothing that ack does that executes code.  Thanks to
    Bill Ricker for bringing this up via what turns out to be a non-issue,
    but still nudged me to do this.

1.66    Fri Aug 24 00:04:02 CDT 2007
    New Macs are shipping with Test::Harness 1.85, and ack's test
    confuse it.  I added a requirement of Test::Harness 2.50.  The
    specific version is somewhat arbitrary.

    The -o and --output switches now properly show all matches on
    a line, not just the first one.

    Added the -1 switch, which makes ack only give one match of
    whatever it is you're looking for, and stop searching after it
    finds it.  Say that you know there's a Perl file with "foo" in
    the name, you can do

        ack -1 --perl -g foo

    and ack will show the first file matching "foo", and stop once
    it finds the file.

    Split up more of the code into functions in App::Ack.  This is
    to make things easier for Gabor Szabo's wack project.

1.65_01 Fri Aug 10 00:28:55 CDT 2007

    Added --passthru switch, to print all lines, whether or not they
    match.  This is something that could potentially get used a lot,
    so I'm not sure that --passthru is the best name.  I'm open to

    Added FORTRAN support.  Thanks, Tod Hagan.

    Now ignores .pc directories for the Quilt patch management
    system.  Thanks, Dirk Jagdmann.

    The -i switch now works with the -g switch.  Thanks, Leland Johnson.

1.64    Tue Jul 17 10:51:47 CDT 2007

    Sped up searching by using the /o flag.  Duh!

    Added --hh for C header files.

    Specifically excluding a type with --no-whatever trumps its
    inclusion in --something-else.  For example, if you want to
    search .c files, but excluding .h files, you can use --cc
    --no-hh.  (In fact, that's the very reason I wrote this feature.)

    Added -g=regex to let you do -f listings, but filter out only
    those files matching the regex.  This is exactly the same as
    "ack -f | ack regex".

    The standalone version of ack gets unused functions pruned out
    from it.

    Removed the discussion of -A, -B and -C which doesn't work yet.

1.63_03     Thu Jun 14 09:47:39 CDT 2007

    The tests didn't clear ACK_OPTIONS before running, so if you
    set this useful environment variable, your tests would fail.
    Thanks, Michael Hendricks.

    Added a filetype of "--text", which matches any text file.  This
    is off by default, just as --binary is.

    Added a filetype of "--skipped", which matches any file that
    ack skips, like core dumps and backup files.  It will NOT
    include files that are in ignored directories like blib/ and

1.63_02     Thu Jun 14 09:39:23 CDT 2007
    Buggy release.  Ignore.

1.63_01     Tue Jun  5 2007
    The changes I made to detect if ack is outputting to the screen
    may break some automated build tools.  If so, please contact
    me.  That's why this is a dev release.

    Colorized output to the screen is now the default, correctly.
    I got rid of the is_interactive() I took from IO::Interactive
    and just checked for C<-t *STDOUT>, because that's what we're
    really checking for: Is the output going to the screen?

1.62    Mon May 21 15:22:19 CDT 2007

    The extensions .tt and .ttml are no longer part of the --perl
    type.  They are now only in the --tt type.

    RT #26953: was in the wrong directory, but only the
    Perl from Darwinports complained, because apparently most other
    Perl installs have "." in @INC.

    RT #25391: Fixed test failures under Win32.

    Spelled Slaven Rezić's name properly.  Look, my first utf-8 string!

    Added .properties extension for --java.

    Added -L as a negation to -l.  This is equivalent to -l -v.

    Added more GNU-style long opts.  Thanks to Ævar Arnfjörð Bjarmason,
    my second utf-8 string.

1.60    Fri Mar  9 22:34:15 CST 2007

    ack should behave better when running under a shell now.

    ack now recognizes makefiles and Visual Basic files.

    Added new extensions for Mason per
    Thanks, Elias Lutfallah.

    Added .rxml to --ruby.  Thanks, Ian Langworth.

    Added .php3, .php4 and .php5 to --php5.  Added --jsp extensions.
    Thanks, Stephen Steneker.

    Teeny speed optimizations on some regexes.

    Changed App::Ack::should_ignore to ::is_searchable() (and
    reversed the meaning).

    Added error checking on file closes.

    Improved how it knows if it's running interactive by stealing
    is_interactive() from IO::Interactive.

    Added example of using with vim.  Thanks, Mark Stosberg.

1.58    Thu Jan 18 22:46:36 CST 2007

    The PHP list of extensions no longer includes .htm and .html.

    Directories with a file named "0" would stop ack's searching.

    Added a --tcl flag.  Thanks, Matt Diephouse.

1.56    Wed Jan 17 12:55:38 CST 2007

    Now correctly handles filetypes of files with multiple periods.

    Added .xs to the list of --cc files.

    Warning messages now include the name "ack" at the beginning
    of them.

    Now skips .git directories.

1.54    Sun Jan  7 22:34:57 CST 2007

    ack no longer follows symlinks by default, except for starting
    points specified on the command line.

    Added the --follow/--nofollow switches for following symlinks.

    Added .sty and .cls to the --tex files.  Thanks, Uwe Voelker.

    t/filetypes.t would fail sometimes based on hash order.

1.52        Fri Dec 22 00:41:45 CST 2006

    In 1.51_01, I changed how we check the -B of a file, but it's
    not reliable.  Perl's -B operator acts differently if you call
    -B $filename vs. -B $fh.

    I changed some internal code to figure out a file's extension.
    By using my own, instead of File::Basename, I cut out over 50%
    of the run time on my test of acking through a large tree.

    When using -a, it's not necessary to determine the filetype
    before searching, only if we should ignore the file or not.
    This cut out an additional 10% or so of execution time when
    doing -a searces.

    We no longer need to build a list of all used suffixes.  This
    makes startup quicker.

1.51_01     Mon Dec 18 12:59:28 CST 2006

    Development version.  I'm putting this out so hardcore ack users
    can test out some new features.

    Tests now pass under Windows.

    You can now set the colors for display with the ACK_COLOR_MATCH
    and ACK_COLOR_FILENAME environment variables.

    ack-standalone now builds with a shebang line of "#!/usr/bin/env
    perl", which is more compatible.  Of course, you're welcome to
    change it to whatever you like.

    I now check for binaryness on the already-open file, rather
    than reopening it from the filesystem.  This gave me about a
    1% speedup in my tests.

    Started adding sanity checks to the options.  For instance, it
    doesn't make sense to use -l and -C together, so ack will
    complain about that.

    Added a --sort-files option.

    More testing on XML and PHP detection courtesy Bill Ricker.

    Lots of refactoring of search() in preparation for showing
    context around matches.