1. 12 Dec, 2013 1 commit
    • Cleanups, renames, and leak fixes · 9cfce273
      This renames git_vector_free_all to the better git_vector_free_deep
      and also contains a couple of memory leak fixes based on valgrind
      checks.  The fixes are specifically: failure to free global dir
      path variables when not compiled with threading on and failure to
      free filters from the filter registry that had not be initialized
      fully.
      Russell Belfer committed
  2. 11 Dec, 2013 7 commits
    • Some callback error check style cleanups · c7b3e1b3
      I find this easier to read...
      Russell Belfer committed
    • Remove converting user error to GIT_EUSER · 25e0b157
      This changes the behavior of callbacks so that the callback error
      code is not converted into GIT_EUSER and instead we propagate the
      return value through to the caller.  Instead of using the
      giterr_capture and giterr_restore functions, we now rely on all
      functions to pass back the return value from a callback.
      
      To avoid having a return value with no error message, the user
      can call the public giterr_set_str or some such function to set
      an error message.  There is a new helper 'giterr_set_callback'
      that functions can invoke after making a callback which ensures
      that some error message was set in case the callback did not set
      one.
      
      In places where the sign of the callback return value is
      meaningful (e.g. positive to skip, negative to abort), only the
      negative values are returned back to the caller, obviously, since
      the other values allow for continuing the loop.
      
      The hardest parts of this were in the checkout code where positive
      return values were overloaded as meaningful values for checkout.
      I fixed this by adding an output parameter to many of the internal
      checkout functions and removing the overload.  This added some
      code, but it is probably a better implementation.
      
      There is some funkiness in the network code where user provided
      callbacks could be returning a positive or a negative value and
      we want to rely on that to cancel the loop.  There are still a
      couple places where an user error might get turned into GIT_EUSER
      there, I think, though none exercised by the tests.
      Russell Belfer committed
    • Add git_vector_free_all · fcd324c6
      There are a lot of places that we call git__free on each item in
      a vector and then call git_vector_free on the vector itself.  This
      just wraps that up into one convenient helper function.
      Russell Belfer committed
    • Further EUSER and error propagation fixes · dab89f9b
      This continues auditing all the places where GIT_EUSER is being
      returned and making sure to clear any existing error using the
      new giterr_user_cancel helper.  As a result, places that relied
      on intercepting GIT_EUSER but having the old error preserved also
      needed to be cleaned up to correctly stash and then retrieve the
      actual error.
      
      Additionally, as I encountered places where error codes were not
      being propagated correctly, I tried to fix them up.  A number of
      those fixes are included in the this commit as well.
      Russell Belfer committed
    • Improve GIT_EUSER handling · 96869a4e
      This adds giterr_user_cancel to return GIT_EUSER and clear any
      error message that is sitting around.  As a result of using that
      in places, we need to be more thorough with capturing errors that
      happen inside a callback when used internally.  To help with that,
      this also adds giterr_capture and giterr_restore so that when we
      internally use a foreach-type function that clears errors and
      converts them to GIT_EUSER, it is easier to restore not just the
      return value, but the actual error message text.
      Russell Belfer committed
    • Add config read fns with controlled error behavior · 9f77b3f6
      This adds `git_config__lookup_entry` which will look up a key in
      a config and return either the entry or NULL if the key was not
      present.  Optionally, it can either suppress all errors or can
      return them (although not finding the key is not an error for this
      function).  Unlike other accessors, this does not normalize the
      config key string, so it must only be used when the key is known
      to be in normalized form (i.e. all lower-case before the first dot
      and after the last dot, with no invalid characters).
      
      This also adds three high-level helper functions to look up config
      values with no errors and a fallback value.  The three functions
      are for string, bool, and int values, and will resort to the
      fallback value for any error that arises.  They are:
      
      * `git_config__get_string_force`
      * `git_config__get_bool_force`
      * `git_config__get_int_force`
      
      None of them normalize the config `key` either, so they can only
      be used for internal cases where the key is known to be in normal
      format.
      Russell Belfer committed
  3. 19 Nov, 2013 1 commit
  4. 18 Nov, 2013 2 commits
  5. 11 Nov, 2013 3 commits
  6. 10 Nov, 2013 1 commit
  7. 08 Nov, 2013 1 commit
  8. 07 Nov, 2013 1 commit
  9. 01 Nov, 2013 2 commits
  10. 31 Oct, 2013 2 commits
    • Set new multivar values using unmatcheable regexp. · 376454d0
      Seems that regexp in Mac OS X and Linux were behaving
      differently: while in OS X the empty string didn't
      match any value, in Linux it was matching all of them,
      so the the second fetch refspec was overwritting the
      first one, instead of creating a new one.
      
      Using an unmatcheable regular expression solves the
      problem (and seems to be portable).
      Daniel Rodríguez Troitiño committed
    • Fix saving remotes with several fetch/push ref specs. · 3793fa9b
      At some moment git_config_delete_entry lost the ability to delete one entry of
      a multivar configuration. The moment you had more than one fetch or push
      ref spec for a remote you will not be able to save that remote anymore. The
      changes in network::remote::remotes::save show that problem.
      
      I needed to create a new git_config_delete_multivar because I was not able to
      remove one or several entries of a multivar config with the current API.
      Several tries modifying how git_config_set_multivar(..., NULL) behaved were
      not successful.
      
      git_config_delete_multivar is very similar to git_config_set_multivar, and
      delegates into config_delete_multivar of config_file. This function search
      for the cvar_t that will be deleted, storing them in a temporal array, and
      rebuilding the linked list. After calling config_write to delete the entries,
      the cvar_t stored in the temporal array are freed.
      
      There is a little fix in config_write, it avoids an infinite loop when using
      a regular expression (case for the multivars). This error was found by the
      test network::remote::remotes::tagopt.
      Daniel Rodríguez Troitiño committed
  11. 28 Oct, 2013 1 commit
    • The "common.h" should be included before "config.h". · 157cef10
      When building libgit2 for ia32 architecture on a x64 machine, including
      "config.h" without a "common.h" would result the following error:
      C:\Program Files\Microsoft SDKs\Windows\v7.1\include\winbase.h(2288): error C2373: 'InterlockedIncrement' : redefinition; different type modifiers [C:\cygwin\home\zcbenz\codes\git-utils\build\libgit2.vcxproj]
      C:\Program Files\Microsoft SDKs\Windows\v7.1\include\winbase.h(2295): error C2373: 'InterlockedDecrement' : redefinition; different type modifiers [C:\cygwin\home\zcbenz\codes\git-utils\build\libgit2.vcxproj]
      C:\Program Files\Microsoft SDKs\Windows\v7.1\include\winbase.h(2303): error C2373: 'InterlockedExchange' : redefinition; different type modifiers [C:\cygwin\home\zcbenz\codes\git-utils\build\libgit2.vcxproj]
      C:\Program Files\Microsoft SDKs\Windows\v7.1\include\winbase.h(2314): error C2373: 'InterlockedExchangeAdd' : redefinition; different type modifiers [C:\cygwin\home\zcbenz\codes\git-utils\build\libgit2.vcxproj]
      Cheng Zhao committed
  12. 02 Oct, 2013 4 commits
  13. 23 Sep, 2013 1 commit
    • Remove regex usage from places that don't need it · 106c12f1
      In revwalk, we are doing a very simple check to see if a string
      contains wildcard characters, so a full regular expression match
      is not needed.
      
      In remote listing, now that we have git_config_foreach_match with
      full regular expression matching, we can take advantage of that
      and eliminate the regex here, replacing it with much simpler string
      manipulation.
      Russell Belfer committed
  14. 19 Sep, 2013 1 commit
  15. 17 Sep, 2013 1 commit
    • No such thing as an orphan branch · 605da51a
      Unfortunately git-core uses the term "unborn branch" and "orphan
      branch" interchangeably. However, "orphan" is only really there for
      the checkout command, which has the `--orphan` option so it doesn't
      actually create the branch.
      
      Branches never have parents, so the distinction of a branch with no
      parents is odd to begin with. Crucially, the error messages deal with
      unborn branches, so let's use that.
      Carlos Martín Nieto committed
  16. 27 Aug, 2013 5 commits
  17. 14 Aug, 2013 1 commit
    • remote: relax the url rules · 0b9ebb54
      Accept any value for the remote's url, including an empty string which
      we used to reject as invalid configuration.
      
      This is not quite what git does (although it has its own problems with
      such configurations) and it makes it harder to fix the issue, by not
      letting the user modify it.
      
      As we already need to check for a valid URL when we try to connect to
      the network, let that perform the check, as we don't need to do it
      anywhere else.
      Carlos Martín Nieto committed
  18. 13 Aug, 2013 1 commit
  19. 08 Aug, 2013 1 commit
  20. 15 Jul, 2013 1 commit
  21. 10 Jun, 2013 1 commit
  22. 30 May, 2013 1 commit