1. 26 Mar, 2013 3 commits
    • Fix some diff ignores and submodule dirty workdir · ccfa6805
      This started out trying to look at the problems from issue #1425
      and gradually grew to a broader set of fixes.  There are two core
      things fixed here:
      
      1. When you had an ignore like "/bin" which is rooted at the top
         of your tree, instead of immediately adding the "bin/" entry
         as an ignored item in the diff, we were returning all of the
         direct descendants of the directory as ignored items.  This
         changes things to immediately ignore the directory.  Note that
         this effects the behavior in test_status_ignore__subdirectories
         so that we no longer exactly match core gits ignore behavior,
         but the new behavior probably makes more sense (i.e. we now
         will include an ignored directory inside an untracked directory
         that we previously would have left off).
      2. When a submodule only contained working directory changes, the
         diff code was always considering it unmodified which was just
         an outright bug. The HEAD SHA of the submodule matches the SHA
         in the parent repo index, and since the SHAs matches, the diff
         code was overwriting the actual status with UNMODIFIED.
      
      These fixes broke existing tests test_diff_workdir__submodules and
      test_status_ignore__subdirectories but looking it over, I actually
      think the new results are correct and the old results were wrong.
      @nulltoken had actually commented on the subdirectory ignore issue
      previously.
      
      I also included in the tests some debugging versions of the
      shared iteration callback routines that print status or diff
      information.  These aren't used actively in the tests, but can be
      quickly swapped in to test code to give a better picture of what
      is being scanned in some of the complex test scenarios.
      Russell Belfer committed
    • Implement GIT_STATUS_OPT_EXCLUDE_SUBMODULES · 37ee70fa
      This option has been sitting unimplemented for a while, so I
      finally went through and implemented it along with some tests.
      
      As part of this, I improved the implementation of
      GIT_DIFF_IGNORE_SUBMODULES so it be more diligent about avoiding
      extra work and about leaving off delta records for submodules to
      the greatest extent possible (though it may include them still
      if you are request TYPECHANGE records).
      Russell Belfer committed
  2. 25 Mar, 2013 7 commits
  3. 22 Mar, 2013 1 commit
  4. 21 Mar, 2013 2 commits
  5. 19 Mar, 2013 1 commit
    • Three submodule status bug fixes · 65025cb8
      1. Fix sort order problem with submodules where "mod" was sorting
         after "mod-plus" because they were being sorted as "mod/" and
         "mod-plus/".  This involved pushing the "contains a .git entry"
         test significantly lower in the stack.
      2. Reinstate behavior that a directory which contains a .git entry
         will be treated as a submodule during iteration even if it is
         not yet added to the .gitmodules.
      3. Now that any directory containing .git is reported as submodule,
         we have to be more careful checking for GIT_EEXISTS when we
         do a submodule lookup, because that is the error code that is
         returned by git_submodule_lookup when you try to look up a
         directory containing .git that has no record in gitmodules or
         the index.
      Russell Belfer committed
  6. 18 Mar, 2013 2 commits
    • Fixes and cleanups · 32460251
      Get rid of some dead code, tighten things up a bit, and fix a bug
      with core::env test.
      Russell Belfer committed
    • Switch search paths to classic delimited strings · 41954a49
      This switches the APIs for setting and getting the global/system
      search paths from using git_strarray to using a simple string with
      GIT_PATH_LIST_SEPARATOR delimited paths, just as the environment
      PATH variable would contain.  This makes it simpler to get and set
      the value.
      
      I also added code to expand "$PATH" when setting a new value to
      embed the old value of the path.  This means that I no longer
      require separate actions to PREPEND to the value.
      Russell Belfer committed
  7. 17 Mar, 2013 1 commit
  8. 15 Mar, 2013 3 commits
    • Implement global/system file search paths · 5540d947
      The goal of this work is to expose the search logic for "global",
      "system", and "xdg" files through the git_libgit2_opts() interface.
      
      Behind the scenes, I changed the logic for finding files to have a
      notion of a git_strarray that represents a search path and to store
      a separate search path for each of the three tiers of config file.
      For each tier, I implemented a function to initialize it to default
      values (generally based on environment variables), and then general
      interfaces to get it, set it, reset it, and prepend new directories
      to it.
      
      Next, I exposed these interfaces through the git_libgit2_opts
      interface, reusing the GIT_CONFIG_LEVEL_SYSTEM, etc., constants
      for the user to control which search path they were modifying.
      There are alternative designs for the opts interface / argument
      ordering, so I'm putting this phase out for discussion.
      
      Additionally, I ended up doing a little bit of clean up regarding
      attr.h and attr_file.h, adding a new attrcache.h so the other two
      files wouldn't have to be included in so many places.
      Russell Belfer committed
  9. 14 Mar, 2013 4 commits
    • Fix various build warnings · 55e0f53d
      This fixes various build warnings on Mac and Windows (64-bit).
      Russell Belfer committed
    • Added pool freelist struct for readability · 14bedad9
      This adds a git_pool_freelist_item struct that makes it a little
      easier to follow what's going on with the pool free list block
      management code.  It is functionally neutral.
      Russell Belfer committed
    • Fix valgrind issues (and mmap fallback for diff) · d85296ab
      This fixes a number of issues identified by valgrind - mostly
      missed free calls.  Inside valgrind, mmap() may fail which causes
      some of the diff tests to fail.  This adds a fallback code path
      to diff_output.c:get_workdir_content() where is the mmap() fails
      the code will now try to read the file data directly into allocated
      memory (which is what it would do if the data needed to be filtered
      anyhow).
      Russell Belfer committed
    • Improved tree iterator internals · 0c468633
      This updates the tree iterator internals to be more efficient.
      
      The tree_iterator_entry objects are now kept as pointers that are
      allocated from a git_pool, so that we may use git__tsort_r for
      sorting (which is better than qsort, given that the tree is
      likely mostly ordered already).
      
      Those tree_iterator_entry objects now keep direct pointers to the
      data they refer to instead of keeping indirect index values.  This
      simplifies a lot of the data structure traversal code.
      
      This also adds bsearch to find the start item position for range-
      limited tree iterators, and is more explicit about using
      git_path_cmp instead of reimplementing it.  The git_path_cmp
      changed a bit to make it easier for tree_iterators to use it (but
      it was barely being used previously, so not a big deal).
      
      This adds a git_pool_free_array function that efficiently frees a
      list of pool allocated pointers (which the tree_iterator keeps).
      Also, added new tests for the git_pool free list functionality
      that was not previously being tested (or used).
      Russell Belfer committed
  10. 13 Mar, 2013 1 commit
    • Fix workdir iterator bugs · bbb13646
      This fixes two bugs with the workdir iterator depth check: first
      that the depth was not being decremented and second that empty
      directories were counting against the depth even though a frame
      was not being created for them.
      
      This also fixes a bug with the ENOTFOUND return code for workdir
      iterators when you attempt to advance_into an empty directory.
      Actually, that works correctly, but it was incorrectly being
      propogated into regular advance() calls in some circumstances.
      
      Added new tests for the above that create a huge hierarchy on
      the fly and try using the workdir iterator to traverse it.
      Russell Belfer committed
  11. 12 Mar, 2013 3 commits
  12. 11 Mar, 2013 7 commits
  13. 09 Mar, 2013 3 commits
    • diff: allow asking for diffs with no context · 1aa5318a
      Previously, 0 meant default. This is problematic, as asking for 0
      context lines is a valid thing to do.
      
      Change GIT_DIFF_OPTIONS_INIT to default to three and stop treating 0
      as a magic value. In case no options are provided, make sure the
      options in the diff object default to 3.
      Carlos Martín Nieto committed
    • config: don't allow passing NULL as a value to set · 48bde2f1
      Passing NULL is non-sensical. The error message leaves to be desired,
      though, as it leaks internal implementation details. Catch it at the
      `git_config_set_string` level and set an appropriate error message.
      Carlos Martín Nieto committed
    • Make tree iterator handle icase equivalence · e40f1c2d
      There is a serious bug in the previous tree iterator implementation.
      If case insensitivity resulted in member elements being equivalent
      to one another, and those member elements were trees, then the
      children of the colliding elements would be processed in sequence
      instead of in a single flattened list.  This meant that the tree
      iterator was not truly acting like a case-insensitive list.
      
      This completely reworks the tree iterator to manage lists with
      case insensitive equivalence classes and advance through the items
      in a unified manner in a single sorted frame.
      
      It is possible that at a future date we might want to update this
      to separate the case insensitive and case sensitive tree iterators
      so that the case sensitive one could be a minimal amount of code
      and the insensitive one would always know what it needed to do
      without checking flags.
      
      But there would be so much shared code between the two, that I'm
      not sure it that's a win.  For now, this gets what we need.
      
      More tests are needed, though.
      Russell Belfer committed
  14. 07 Mar, 2013 2 commits