• Show log

    Commit

  • Hash : 41a82592
    Author : Russell Belfer
    Date : 2012-05-15T14:17:39

    Ranged iterators and rewritten git_status_file
    
    The goal of this work is to rewrite git_status_file to use the
    same underlying code as git_status_foreach.
    
    This is done in 3 phases:
    
    1. Extend iterators to allow ranged iteration with start and
       end prefixes for the range of file names to be covered.
    2. Improve diff so that when there is a pathspec and there is
       a common non-wildcard prefix of the pathspec, it will use
       ranged iterators to minimize excess iteration.
    3. Rewrite git_status_file to call git_status_foreach_ext
       with a pathspec that covers just the one file being checked.
    
    Since ranged iterators underlie the status & diff implementation,
    this is actually fairly efficient.  The workdir iterator does
    end up loading the contents of all the directories down to the
    single file, which should ideally be avoided, but it is pretty
    good.