perl-File-Find-Object / Changes

Full commit
shl...@6f433eb9-… d30454e 
shl...@6f433eb9-… fafb39b 
shl...@6f433eb9-… a6fcabb 
shl...@6f433eb9-… fafb39b 
shl...@6f433eb9-… c616af7 
shl...@6f433eb9-… d0b9d9f 

shl...@6f433eb9-… 12e5f3e 
shl...@6f433eb9-… 37db517 
shl...@6f433eb9-… 16d9c48 
shl...@6f433eb9-… d0b9d9f 
shl...@6f433eb9-… 0866608 
shl...@6f433eb9-… 9d4e702 

shl...@6f433eb9-… 1bf9696 

shl...@6f433eb9-… 9d4e702 

shl...@6f433eb9-… aaaab26 

shl...@6f433eb9-… ba04b42 

shl...@6f433eb9-… 47df5ca 

shl...@6f433eb9-… 6679a20 

shl...@6f433eb9-… aaaab26 
shl...@6f433eb9-… 32a511d 
shl...@6f433eb9-… 9f85b21 

shl...@6f433eb9-… a638130 

shl...@6f433eb9-… 6b7b2d6 

shl...@6f433eb9-… 51b69ee 

shl...@6f433eb9-… a3611f7 

shl...@6f433eb9-… de7794b 

shl...@6f433eb9-… 0f9fbe8 

shl...@6f433eb9-… 10f7ffd 

shl...@6f433eb9-… d3bfe11 

shl...@6f433eb9-… 26cf38e 

shl...@6f433eb9-… 69de4b1 

shl...@6f433eb9-… 9f85b21 
shl...@6f433eb9-… 48613fd 
shl...@6f433eb9-… 4f49967 

shl...@6f433eb9-… 7f7d3fe 
shl...@6f433eb9-… 152402f 

shl...@6f433eb9-… 4f49967 
shl...@6f433eb9-… 65bf396 
shl...@6f433eb9-… 7f1a678 

shl...@6f433eb9-… 57aa0ae 

shl...@6f433eb9-… 9760db7 

shl...@6f433eb9-… edd8aa4 

shl...@6f433eb9-… 03eb062 

shl...@6f433eb9-… f5acf04 

shl...@6f433eb9-… 7f1a678 
shl...@6f433eb9-… 411da5f 
shl...@6f433eb9-… ccc5e68 

shl...@6f433eb9-… 5f7424c 

shl...@6f433eb9-… ccc5e68 
shl...@6f433eb9-… 39b3cc0 
shl...@6f433eb9-… 1a89848 

shl...@6f433eb9-… 12d0440 
shl...@6f433eb9-… 0d8cdef 

shl...@6f433eb9-… 6330874 
shl...@6f433eb9-… 0701b5f 

shl...@6f433eb9-… 0d8cdef 
shl...@6f433eb9-… 736b602 
shl...@6f433eb9-… 9c2936f 
shl...@6f433eb9-… 2d9a23a 

shl...@6f433eb9-… 9c2936f 
shl...@6f433eb9-… fcc5211 

shl...@6f433eb9-… 2b6ba82 
shl...@6f433eb9-… 594fa2e 

shl...@6f433eb9-… e3bca5b 
shl...@6f433eb9-… b119566 
shl...@6f433eb9-… 79cc5fc 

shl...@6f433eb9-… 6aa51a7 
shl...@6f433eb9-… e3bca5b 
shl...@6f433eb9-… 6aa51a7 

shl...@6f433eb9-… b119566 
shl...@6f433eb9-… 40e6786 

shl...@6f433eb9-… c2e9af1 

shl...@6f433eb9-… bca3b27 

shl...@6f433eb9-… 734b7bb 

shl...@6f433eb9-… 48017a0 

shl...@6f433eb9-… e4e0424 
shl...@6f433eb9-… 671e2cd 
shl...@6f433eb9-… e4e0424 

shl...@6f433eb9-… c6227c4 
shl...@6f433eb9-… 5065fdd 
shl...@6f433eb9-… c6227c4 

shl...@6f433eb9-… e0e3708 
shl...@6f433eb9-… c6227c4 
shl...@6f433eb9-… e4e0424 
0.2.2 - Thu Jun 25 22:39:10 IDT 2009
    - added some META.yml resources.
        - added META.yml keywords.

0.2.1 - Thu Jun 18 18:01:24 IDT 2009
    - Optimization: removed the _dir field of File::Find::Object::PathComp
    and its _dir_copy copy-accessor, and replaced them all with passing
    the $dir_str explicitly. This reduced the code considerably, and
    eliminated a similar symptom to this one:
    - Added the ->is_file() method to ::Result.
    - Converted ::Result->is_dir() to use -d _ 
    - Added ::Result->is_link().

0.2.0 - Sun Feb 22 11:52:06 IST 2009
    - Optimization: now not checking for the existence of the callback() after 
    every iteration, in case it doesn't exist. Instead, the default_actions
    is calculated according to its existence when the tree traverser
    is initialized.
    - Refactoring/Optimization: avoided having two _set_obj() methds by
    calling _set_obj() from _run_cb().
0.1.9 - Tue Feb 10 16:54:00 IST 2009
    - Added use integer to the modules, because they don't make use
    of floating-point calculation. It may be a minor optimization, but then
    again it may be not.
    - Optimization: optimized the loop detection by having a hash lookup 
    of inodes in each path component, that are built incrementally and checked
    for every subsequent node.
    - Optimization: replaced the _top_it() of _me_die() with a normal method
    with a conditional, as it was the only place where _top_it() was still
    - Optimization/Cleanup: _set_inodes() in ::DeepPath.
    - Clarified the licensing blurbs of the .pm files.

0.1.8 - Mon Jan 19 18:36:51 IST 2009
    - Optimization/Refactoring: replaced the last call to ->_father with a 
    call to _current_father(). Removed ->_father and optimized
    _current_father() .
    - Optimization/Refactoring: refactored _become_default() to remove
    the execessive use of $father and $father->idx(). Now ->idx() is
    no longer needed and will be removed next.
    - Optimization/Refactoring: removed the ->idx() method as it
    was no longer used and needed.
    - Optimization: instead of calling File::Find::Object::Result->new()
    just bless to it.
    - Optimization: now caching the filesystem device at
    the top for nocrossfs().
        - Plus: rearranged the order of the checks in
    - Optimization/Refactoring: made the _top_it method names saner,
    and removed an unused one.
    - Refactoring: refactored _check_subdir_helper_d() to make
    the conditions clearer.
    - Optimization: now compiling the _check_subdir_helper function
    by eval ""'ing it because it contains many conditions that depend
    on instance-wide and constant parameters.
    - Cleanup: moved some POD'ed out functions to under rejects/ .
    - Optimization: renamed _calc_next_obj() to next_obj(), as next_obj()
    just called it directly. Cleaned up the rest of the logic in next_obj().
    - Bug fix: the nocrossfs option was fixed. Previously it used an undefined

0.1.7 - Thu Jan 15 16:09:49 IST 2009
    - Fixed the check-for-link and for directory semantics on Windows
    and other systems. Converted to "perldoc -f lstat" instead of 
    "perldoc -f stat", and using stat only for symbolic links to check
    if they are directories. Now added a test for that.
        - Fixed t/01ffo.t to check for the warning.
        - Also see:
    - Small optimization: converted a loop with:
    while($ptr) { ... } continue { $ptr = $self->_father($ptr); }
    to List::Util::first.
    - Added more dependencies to Build.PL / Makefile.PL including

0.1.6 - Fri Jan  9 17:49:01 IST 2009
    - Converted the accessor generator to Class::XSAccessor instead
    of Class::Accessor. After consulting Devel::NYTProf, it seemed that
    the majority of the time of a simple File-Find-Object scan was spent
    in Class::Accessor. Hopefully, this will make F-F-O run faster.
    - A small optimization - added a flag to $self with whether the stack
    is full or not. This is used inside _top_it() and _is_top().
    - A small optimization - implemented _current directly instead of
    a _top / _non_top version - saved 2.5 seconds of runtime.
    - A small optimization - got rid of _current_components_copy() (which
    was useless because _current_components already returns a dynamic
    reference) and replaced all calls with calls to _current_components().
    - A small optimization - ->dir() instead of ->_dir_copy() for 
    a function whose return value is dereferenced and flatted.
    - A small optimization - now caching the results of _current_components
    inside an accessor and updating it upon every change.
    - A small optimization - now caching the results of _current_path()
    upon every modification of _current_components, so File::Spec->catfile()
    won't be called excessively.
    - Optimization/Refactoring - changed the actions() handling so instead
    of having the indices, we calculate an array of master actions at
    start that correspond with the depth() parameter, and then assign it for
    each PathComponent object in turn based on $top. This is instead of 
    the indexes and explicit calculations etc., which was both messier
    and slower.
    - Optimization/Refactoring - renamed _current_components() to
    _curr_comps() and _current_path to _curr_path() to make them
    shorter and faster. Added a comment explaining what they are.
    - Optimization/Refactoring - optimized _calc_current_item_obj.
    - Optimization - removed an _is_top() conditional in _recurse() that
    was likely not to be evaluated, by re-arranging the order of _mystat
    call. Now _mystat is not an action, but rather called explicitly.
    _is_top() is now PODded-out because it's not used.
    - Refactoring - made the top path component-handling object a separate
    object (::PathTop) instead of $top/$tree . Hopefully, this will later 
    allow caching _current(), and having a unified directory stack.
    - Refactoring - created a base class for Path-Components (i.e: ::PathTop
    and ::PathComponent). Most of the methods out of ::Base belong there
    so they were moved. This class inherits from ::Base, but there's not
    a lot there anymore.
    - Refactoring - renamed ::PathComponent as ::DeepPath and ::PathTop
    as ::TopPath. Otherwise they could be confused with ::PathComp.
    - Refactoring - made the first ::PathTop component the first element
    in _dir_stack() so we won't need to keep in a distinct reference. All
    the other elements moved 1 level down the stack.
    - Optimization - now caching $top->_dir_stack()->[-1] into 
    $top->_current() as an accessor.

0.1.5 - Sat Jan  3 17:17:31 IST 2009
    - Unified the two calls to stat() (and several calls to other file
    operators) in order to reduce the number of system calls/disk accesses
    issued by File::Find::Object.
    - Refactored the code from the last change and added
    File::Find::Object::Result->stat_ret() for the return value of stat().

0.1.4 - Thu Dec 25 18:27:48 IST 2008
    - Bug fix: made sure ->item_obj() is available on the first call
    to the callback() and is properly synchronized with it.

0.1.3 - Wed Nov 12 18:50:49 IST 2008
    - Refactoring: converted _movenext() from pseudo-conditionals
    to polymorphism by making it a method of ->_current().
    - Refactoring: extracted the _next_traverse_to() method.
    - Bug fix (with possible correctness/SECURITY implications):
        - now correctly handling files and directories whose filenames
        are false in Perl - most notable "0".

0.1.2 - Sun Oct 26 12:57:55 IST 2008
    - Corrected the README.
    - Now checking for inodes that are 0, when checking for cyclical trees,
    as a fix for stat() calls on systems that do not support them. This should
    fix Win32 test failures (and bad behaviour in general) like the following:          -

0.1.1 - Wed Oct 22 12:30:56 IST 2008
    - Potential Security Fix!!! No longer passing a filename directly to
    the format in <<printf (STDERR)>> when warning on a loop.
    - Bug fix - the check for a loop was broken.
    - New Feature - Added the ->next_obj() and ->item_obj() methods
    to return a File::Find::Object::Result object instead of a plain
    - Refactoring:
        - No longer passing $current explicitly from one method to another
        (hello EEK!). Instead, we reference $self->_current()
        - Remmed out the DESTROY method as it was empty.
        - Revamped the _action handling - an array instead of a hash.
        - Created _top and _non_top methods delegated by _is_top using
        - _current_idx() was eliminated - now it's just $#dir_stack.
        - Created a _copy methods to create flat copies of array references.
        - Extracted many methods.
    - Switched Build.PL to inc/Test/Run/ - that gives us:
        - ./Build runtest
        - ./Build distruntest
        - ./Build tags

0.1.0 - Wed Mar  5 20:46:27 IST 2008
    - Now handling directories that cannot be opendir()'ed in a graceful
    manner - just not traversing them further.

0.0.9 - Fri Feb 22 20:04:03 IST 2008
    - Now running canonpath() on the targets in the call to 
      File::Find::Object->new. That way, trailing slashes are omitted in
      the results.
    - Allow File::Find::Object to properly accept paths to regular 
      files as input paths. Fixes:
      Thanks to Sergey V Panteleev for reporting the bug.
    - TODO : check behavior on traversing non-existant paths.
        - Done.
    - Now skipping non-existant files.
        - Added a test for it in t/03traverse.t

0.0.8 - Tue Jul 31 16:23:34 IDT 2007
    - added the empty PL_FILES key to the Makefile.PL to avoid running 
    Build.PL on older versions of EU::MM.

0.0.7 - Fri Feb  2 19:03:29 IST 2007
    - moved the tree script under the examples directory.
    - added the LICENSE section to the POD.
    - added t/pod.t and t/pod-coverage.t and made sure the module
      has full POD coverage.
    - added a Build.PL build script to generate a better META.yml file.
    - all of these are Kwalitee improvements.
      ( )
    - Added some links to the main POD documentation for similar modules
      and for the Perl Advent article.

0.0.6 - Tue Nov 28 15:49:23 IST 2006
    - Added the following new interface methods:
        - set_traverse_to
        - get_traverse_to
        - get_current_node_files_list
        - prune
    - Some changes to the internals to accomodate for them.

0.0.5 - Sun Sep  3 23:22:36 IDT 2006
    - Eliminated the F-F-O-internal isa F-F-O relationship.
    - Created accessors for everything - now based on Class::Accessor
    - F-F-O-internal is now named File::Find::Object::PathComponent
    - Some smaller refactorings.

0.0.4 - Wed Aug 23 00:31:39 IDT 2006
    - Eliminated circular references. (Hopefully)
        - Still have an isa relationship between File::Find::Object and
        File::Find::Object::internal, which is what handles each recursed to
    - Created some accessor functions instead of direct hash accesses.

0.0.3 - Fri Jul 14 14:25:42 IDT 2006
    - Fixed some language problems in the POD.
    - Added the Changes file.
    - Changed the license to GPL/Artistic/Artistic-2.0
    - Placed the .pm files inside lib.
    - Added the TreeCreate module under t/lib (with appropriate tests) to test 
    the main module.
    - Made the default test order lexicographical, and predictable. In the 
    process, eliminated keeping the directory handles, and possibly the fact 
    that they are kept open.
    - Fixed a bug where circular references prevented the module from being