Commit Graph

10132 Commits

Author SHA1 Message Date
Edward Thomson
031d34b7e8 sysdir: use the standard init pattern
Don't try to determine when sysdirs are uninitialized.  Instead, simply
initialize them all at `git_libgit2_init` time and never try to
reinitialize, except when consumers explicitly call `git_sysdir_set`.

Looking at the buffer length is especially problematic, since there may
no appropriate path for that value.  (For example, the Windows-specific
programdata directory has no value on non-Windows machines.)

Previously we would continually trying to re-lookup these values,
which could get racy if two different threads are each calling
`git_sysdir_get` and trying to lookup / clear the value simultaneously.
2016-08-04 12:26:06 -04:00
Edward Thomson
da7f9feb5c Merge pull request #3879 from libgit2/ethomson/mwindow_init
mwindow: init mwindow files in git_libgit2_init
2016-08-04 11:51:06 -04:00
Edward Thomson
2381d9e490 mwindow: init mwindow files in git_libgit2_init 2016-08-04 10:30:48 -04:00
Patrick Steinhardt
1eee631d11 refspec: do not set empty rhs for fetch refspecs
According to git-fetch(1), "[t]he colon can be omitted when <dst>
is empty." So according to git, the refspec "refs/heads/master"
is the same as the refspec "refs/heads/master:" when fetching
changes. When trying to fetch from a remote with a trailing
colon with libgit2, though, the fetch actually fails while it
works when the trailing colon is left out. So obviously, libgit2
does _not_ treat these two refspec formats the same for fetches.

The problem results from parsing refspecs, where the resulting
refspec has its destination set to an empty string in the case of
a trailing colon and to a `NULL` pointer in the case of no
trailing colon. When passing this to our DWIM machinery, the
empty string gets translated to "refs/heads/", which is simply
wrong.

Fix the problem by having the parsing machinery treat both cases
the same for fetch refspecs.
2016-08-04 13:54:19 +02:00
Patrick Steinhardt
f2cab0a6fa clar: fix parsing of test suite prefixes
When passing in a specific suite which should be executed by clar
via `-stest::suite`, we try to parse this string and then include
all tests contained in this suite. This also includes all tests
in sub-suites, e.g. 'test::suite::foo'.

In the case where multiple suites start with the same _string_,
for example 'test::foo' and 'test::foobar', we fail to
distinguish this correctly. When passing in `-stest::foobar`,
we wrongly determine that 'test::foo' is a prefix and try to
execute all of its matching functions. But as no function
will now match 'test::foobar', we simply execute nothing.

To fix this, we instead have to check if the prefix is an actual
suite prefix as opposed to a simple string prefix. We do so by by
inspecting if the first two characters trailing the prefix are
our suite delimiters '::', and only consider the filter as
matching in this case.
2016-08-04 11:49:39 +02:00
Edward Thomson
baa87dfc50 Merge pull request #3880 from libgit2/ethomson/diff_file
git_diff_file: move `id_abbrev`
2016-08-03 22:00:21 -04:00
Edward Thomson
002c8e29a1 git_diff_file: move id_abbrev
Move `id_abbrev` to a more reasonable place where it packs more nicely
(before anybody starts using it).
2016-08-03 17:57:37 -04:00
Edward Thomson
152efee20b Merge pull request #3865 from libgit2/ethomson/leaks
Fix leaks, some warnings and an error
2016-08-02 18:43:12 -04:00
Edward Thomson
df87648ab8 crlf: set a safe crlf default 2016-07-24 16:10:30 -04:00
Edward Thomson
a37624ecc7 Merge pull request #3815 from pks-t/pks/coverity-model
Coverity user model
2016-07-24 16:05:17 -04:00
Edward Thomson
76cfdd4612 Merge pull request #3862 from novalis/dturner/do-not-die-on-missing-config
remote: Handle missing config values when deleting a remote
2016-07-24 15:51:13 -04:00
Edward Thomson
b118f6479d repository: don't cast to int for no reason
And give it a default so that some compilers don't (unnecessarily)
complain.
2016-07-24 15:49:19 -04:00
Edward Thomson
4aaae9354c index: cast to avoid warning 2016-07-24 15:49:19 -04:00
Edward Thomson
498d0801a1 tests: use a size_t 2016-07-24 15:49:19 -04:00
Edward Thomson
60e15ecd55 packbuilder: size_t all the things
After 1cd65991, we were passing a pointer to an `unsigned long` to
a function that now expected a pointer to a `size_t`.  These types
differ on 64-bit Windows, which means that we trash the stack.

Use `size_t`s in the packbuilder to avoid this.
2016-07-24 15:49:19 -04:00
Edward Thomson
581a4d3942 apply: safety check files that dont end with eol 2016-07-24 15:49:19 -04:00
Edward Thomson
c065f6a1d2 apply: check allocation properly 2016-07-24 15:49:19 -04:00
Edward Thomson
531be3e8c6 apply: compare preimage to image
Compare the preimage to the image; don't compare the preimage to itself.
2016-07-24 15:49:19 -04:00
Edward Thomson
e02f567641 repo::open: remove dead code, free buffers 2016-07-24 15:49:19 -04:00
Edward Thomson
378d12ac85 Merge pull request #3868 from libgit2/ethomson/mac_build
ci: point to the homebrew libssh2 install
2016-07-24 15:47:58 -04:00
Edward Thomson
0239eff354 ci: install homebrew's curl on mac 2016-07-24 14:54:40 -04:00
Richard Ipsum
8b2ad593a8 Make comment conform to style guide
Style guide says // style comments should be avoided.
2016-07-23 11:55:43 +01:00
Richard Ipsum
877282ea6f Fix outdated comment
SSH transport seems to be supported now.
2016-07-23 11:47:59 +01:00
Edward Thomson
08556e6db3 ci: install homebrew's zlib on mac 2016-07-22 21:10:25 -04:00
David Turner
d81cb2e405 remote: Handle missing config values when deleting a remote
Somehow I ended up with the following in my ~/.gitconfig:
[branch "master"]
remote = origin
merge = master
rebase = true

I assume something went crazy while I was running the git.git tests
some time ago, and that I never noticed until now.

This is not a good configuration, but it shouldn't cause problems. But
it does. Specifically, if you have this in your config, and you
perform the following set of actions:

create a remote
fetch from that remote
create a branch off of the remote master branch called "master"
delete the branch
delete the remote

The remote delete fails with the message "Could not find key
'branch.master.rebase' to delete". This is because it's iterating over
the config entries (including the ones in the global config) and
believes that there is a master branch which must therefore have these
config keys.

https://github.com/libgit2/libgit2/issues/3856
2016-07-15 13:47:01 -04:00
wildart
bdec62dce1 remove conditions that prevent use of custom TLS stream 2016-07-06 13:06:25 -04:00
Edward Thomson
c18a2bc4e0 Merge pull request #3851 from txdv/get-user-agent
Add get user agent functionality.
2016-07-05 15:51:01 -04:00
Edward Thomson
b57c176aa9 Merge pull request #3846 from rkrp/fix_bug_parsing_int64min
Fixed bug while parsing INT64_MIN
2016-07-05 12:46:27 -04:00
Andrius Bentkus
f1dba14481 Add get user agent functionality. 2016-07-05 18:10:24 +03:00
Edward Thomson
d8243465be Merge pull request #3836 from joshtriplett/cleanup-find_repo
find_repo: Clean up and simplify logic
2016-07-01 18:47:06 -04:00
Edward Thomson
ebeb56f0f5 Merge pull request #3711 from joshtriplett/git_repository_discover_default
Add GIT_REPOSITORY_OPEN_FROM_ENV flag to respect $GIT_* environment vars
2016-07-01 18:45:10 -04:00
Josh Triplett
2b80260ea5 CHANGELOG.md: Document new flags for git_repository_open_ext
Document GIT_REPOSITORY_OPEN_NO_DOTGIT and GIT_REPOSITORY_OPEN_FROM_ENV.
2016-06-30 08:08:36 -07:00
Josh Triplett
04d6ab6c4c CHANGELOG.md: Document behavior change in repository discovery 2016-06-30 08:08:06 -07:00
Edward Thomson
e421845033 Merge pull request #3847 from libgit2/ethomson/read_index_conflicts
Include conflicts in `git_index_read_index`
2016-06-30 10:20:32 -04:00
Edward Thomson
6249d960ab index: include conflicts in git_index_read_index
Ensure that we include conflicts when calling `git_index_read_index`,
which will remove conflicts in the index that do not exist in the new
target, and will add conflicts from the new target.
2016-06-29 18:37:00 -04:00
Edward Thomson
6f7ec7283d index: refactor common read_index functionality
Most of `git_index_read_index` is common to reading any iterator.
Refactor it out in case we want to implement `read_tree` in terms of it
in the future.
2016-06-29 17:01:47 -04:00
Edward Thomson
59a0005ddd Merge pull request #3813 from stinb/submodule-update-fetch
submodule: Try to fetch when update fails to find the target commit.
2016-06-29 10:01:26 -04:00
Edward Thomson
d88e500133 Merge pull request #3842 from pks-t/pks/double-free
blame: increment reference count for origin's commit
2016-06-29 09:35:56 -04:00
Patrick Steinhardt
2176670289 blame: do not decrement commit refcount in make_origin
When we create a blame origin, we try to look up the blob that is
to be blamed at a certain revision. When this lookup fails, e.g.
because the file did not exist at that certain revision, we fail
to create the blame origin and return `NULL`. The blame origin
that we have just allocated is thereby free'd with
`origin_decref`.

The `origin_decref` function does not only decrement reference
counts for the blame origin, though, but also for its commit and
blob. When this is done in the error case, we will cause an
uneven reference count for these objects. This may result in
hard-to-debug failures at seemingly unrelated code paths, where
we try to access these objects when they in fact have already
been free'd.

Fix the issue by refactoring `make_origin` such that we only
allocate the object after the only function that may fail so that
we do not have to call `origin_decref` at all. Also fix the
`pass_blame` function, which indirectly calls `make_origin`, to
free the commit when `make_origin` failed.
2016-06-29 14:43:00 +02:00
Krishna Ram Prakash R
70b9b84179 Fixed bug while parsing INT64_MIN 2016-06-29 13:32:18 +05:30
Jason Haslam
de43efcf27 submodule: Try to fetch when update fails to find the target commit in the submodule. 2016-06-28 16:08:58 -06:00
Edward Thomson
20302aa437 Merge pull request #3223 from ethomson/apply
Reading patch files
2016-06-25 23:33:05 -04:00
Edward Thomson
8774c47e81 Merge pull request #3831 from libgit2/ethomson/readme
Improve the README
2016-06-25 23:20:43 -04:00
Edward Thomson
1a79cd959b patch: show copy information for identical copies
When showing copy information because we are duplicating contents,
for example, when performing a `diff --find-copies-harder -M100 -B100`,
then show copy from/to lines in a patch, and do not show context.
Ensure that we can also parse such patches.
2016-06-25 23:08:30 -04:00
Edward Thomson
9eb1938134 patch::parse: test diff with exact rename and copy 2016-06-25 23:08:30 -04:00
Edward Thomson
8a670dc4c0 patch::parse: test diff with simple rename 2016-06-25 23:08:28 -04:00
Edward Thomson
38a347ea5d patch::parse: handle patches with no hunks
Patches may have no hunks when there's no modifications (for example,
in a rename).  Handle them.
2016-06-25 23:08:06 -04:00
Edward Thomson
e774d5af76 diff::parse tests: test parsing a diff
Test that we can create a diff file, then parse the results and
that the two are identical in-memory.
2016-06-25 23:08:04 -04:00
Josh Triplett
2b49028495 find_repo: Clean up and simplify logic
find_repo had a complex loop and heavily nested conditionals, making it
difficult to follow.  Simplify this as much as possible:

- Separate assignments from conditionals.
- Check the complex loop condition in the only place it can change.
- Break out of the loop on error, rather than going through the rest of
  the loop body first.
- Handle error cases by immediately breaking, rather than nesting
  conditionals.
- Free repo_link unconditionally on the way out of the function, rather
  than in multiple places.
- Add more comments on the remaining complex steps.
2016-06-24 16:02:52 -07:00
Josh Triplett
0dd98b6905 Add GIT_REPOSITORY_OPEN_FROM_ENV flag to respect $GIT_* environment vars
git_repository_open_ext provides parameters for the start path, whether
to search across filesystems, and what ceiling directories to stop at.
git commands have standard environment variables and defaults for each
of those, as well as various other parameters of the repository. To
avoid duplicate environment variable handling in users of libgit2, add a
GIT_REPOSITORY_OPEN_FROM_ENV flag, which makes git_repository_open_ext
automatically handle the appropriate environment variables. Commands
that intend to act just like those built into git itself can use this
flag to get the expected default behavior.

git_repository_open_ext with the GIT_REPOSITORY_OPEN_FROM_ENV flag
respects $GIT_DIR, $GIT_DISCOVERY_ACROSS_FILESYSTEM,
$GIT_CEILING_DIRECTORIES, $GIT_INDEX_FILE, $GIT_NAMESPACE,
$GIT_OBJECT_DIRECTORY, and $GIT_ALTERNATE_OBJECT_DIRECTORIES.  In the
future, when libgit2 gets worktree support, git_repository_open_env will
also respect $GIT_WORK_TREE and $GIT_COMMON_DIR; until then,
git_repository_open_ext with this flag will error out if either
$GIT_WORK_TREE or $GIT_COMMON_DIR is set.
2016-06-24 12:26:51 -07:00