Commit Graph

4334 Commits

Author SHA1 Message Date
Edward Thomson
7be1caf7f5 Determine crlf safety by statistics, not literal reversibility 2014-04-07 21:41:36 -07:00
Edward Thomson
855c66de66 Introduce core.safecrlf handling 2014-04-07 21:09:09 -07:00
Russell Belfer
7167fd7ef8 vmg is always right 2014-04-07 11:51:12 -07:00
Russell Belfer
c813b34550 Fix bug with multiple iconv conversions in one dir
The internal buffer in the `git_path_iconv_t` structure was not
being reset before the calls to `iconv` were made to convert data,
so if there were multiple decomposed Unicode paths in a single
directory, paths after the first one were being appended to the
first instead of treated as independent data.
2014-04-07 11:45:32 -07:00
Jacques Germishuys
c031129510 git_repository_state_cleanup() should remove rebase-merge/, rebase-apply/ and BISECT_LOG 2014-04-07 17:35:28 +02:00
Vicent Marti
6720eef938 Merge pull request #2249 from libgit2/rb/starstar-fnmatch
Add support for ** matches in ignores
2014-04-07 11:22:23 +02:00
Russell Belfer
c7d9606066 Fix fnmatch comment to be clearer 2014-04-06 11:20:22 -07:00
Vicent Marti
52056db9c1 Merge pull request #2250 from jacquesg/vector-leak
Don't lose our elements when calling git_vector_set()
2014-04-06 16:22:29 +02:00
Jacques Germishuys
4998009a28 Don't lose our elements when calling git_vector_set() 2014-04-06 15:16:44 +02:00
Russell Belfer
2b6b85f116 Add support for ** matches in ignores
This is an experimental addition to add ** support to fnmatch
pattern matching in libgit2.  It needs more testing.
2014-04-04 17:02:12 -07:00
Vicent Marti
923c84008d Merge pull request #2215 from libgit2/rb/submodule-cache-fixes
Improve submodule cache management
2014-04-04 14:24:08 +02:00
Vicent Marti
f34408a7b4 Merge pull request #2211 from Yogu/retry-renaming-config
Retry committing locked files on error
2014-04-04 14:23:07 +02:00
Russell Belfer
eedeeb9e8f Test (and fix) the git_submodule_sync changes
I wrote this stuff a while ago and forgot to write tests.  Wanted
to do so now to wrap up the PR and immediately found problems.
2014-04-03 11:58:51 -07:00
Russell Belfer
18cc7d28c4 Minor code cleanup 2014-04-03 11:29:08 -07:00
Jan Melcher
f2fb4bac68 git_submodule_resolve_url supports relative urls
The base for the relative urls is determined as follows, with descending
priority:

- remote url of HEAD's remote tracking branch
- remote "origin"
- workdir

This follows git.git behaviour
2014-04-03 10:44:08 -07:00
Jacques Germishuys
3b4ba27870 Const correctness! 2014-04-03 16:06:31 +02:00
Carlos Martín Nieto
67d4997a7e remote: mark branch for-merge even if we're unborn
When the current branch is unborn, git will still mark the current
branch's upstream for-merge if there is an upstream configuration. The
only non-constrived case is cloning from an empty repository which then
gains history. origin's master should be marked for-merge.

In order to do this, we cannot use the high-level wrappers that expect a
reference, as we may not have one. Move over to the internal ones that
expect a reference name, which we do have.
2014-04-02 20:22:22 +02:00
Vicent Marti
64a862c2b8 Merge pull request #2237 from mekishizufu/fix_return_value
Fix submodule_is_config_only's return value
2014-04-02 18:48:38 +02:00
Jiri Pospisil
49653665d1 checkout: Fix submodule_is_config_only's return value 2014-04-02 18:21:41 +02:00
Vicent Marti
fe23860aac Merge pull request #2230 from anuraggup/revwalk-merge-base
No need to find merge base.
2014-04-02 17:45:25 +02:00
Russell Belfer
ea1ca3c921 Fix skipping content of contained repos
When doing a diff for use in status, we should never show the
content of a git repository contained inside another one.  The
logic to do this was looking for a .git directory and so when a
gitlink plain .git file was used, it was failing to exclude the
directory content.
2014-04-01 21:30:52 -07:00
Russell Belfer
8f4e5275e4 More tests and fix submodule index refresh
There was a little bug where the submodule cache thought that the
index date was out of date even when it wasn't that was resulting
in some extra scans of index data even when not needed.

Mostly this commit adds a bunch of new tests including adding and
removing submodules in the index and in the HEAD and seeing if we
can automatically pick them up when refreshing.
2014-04-01 16:46:25 -07:00
Russell Belfer
4ece3e225b Fix submodule accounting for name and path changes
Wrote tests that try adding, removing, and updating the name of
submodules which showed a number of problems with how we account
for changes when incrementally updating the submodule info.  Most
of these issues didn't exist before because reloading would always
blow away the old submodule data.
2014-04-01 12:19:11 -07:00
Carlos Martín Nieto
f28e4c97b3 refspec: git_refspec_parse() does not exist 2014-04-01 20:18:36 +02:00
Russell Belfer
aa78c9ba77 Minor submodule cache locking improvements
This improvement the management of the lock around submodule cache
updates slightly, using the lock to make sure that foreach can
safely make a snapshot of all existing submodules and making sure
that git_submodule_add_setup also grabs a lock before inserting
the new submodule.  Cache initialization / refresh should already
have been holding the lock correctly as it adds submodules.
2014-04-01 10:22:51 -07:00
Russell Belfer
eeeb9654f0 Reinstate efficient submodule reloading
This makes it so that git_submodule_reload_all will actually only
reload changed items unless the `force` flag is used.
2014-04-01 09:49:58 -07:00
Russell Belfer
a4ccd2b001 Use enums instead of bools for submodule options
When forcing cache flushes or reload, etc., it is easier to keep
track of intent using enums instead of plain bools.  Also, this
fixes a bug where the cache was not being properly refreshes by
a git_submodule_reload_all.
2014-04-01 09:49:58 -07:00
Russell Belfer
db0e7878d3 Make submodule refresh a bit smarter
This makes submodule cache refresh actually look at the timestamps
from the data sources for submodules and reload as needed if they
have changed since the last refresh.
2014-04-01 09:48:37 -07:00
Russell Belfer
69b6ffc4c5 Make a real submodule cache object
This takes the old submodule cache which was just a git_strmap
and makes a real git_submodule_cache object that can contain other
things like a lock and timestamp-ish data to control refreshing of
submodule info.
2014-04-01 09:48:37 -07:00
Russell Belfer
e402d2f134 Submodule sync refactoring
Turns out there was already a helper to do what I wanted to do,
so I just made it so that I could use it for sync and switched to
that instead.
2014-04-01 09:45:20 -07:00
Russell Belfer
8286300a1e Fix git_submodule_sync and add new config helper
This fixes `git_submodule_sync` to correctly update the remote URL
of the default branch of the submodule along with the URL in the
parent repository config (i.e. match core Git's behavior).

Also move some useful helper logic from the submodule code into
a shared config API `git_config__update_entry` that can either set
or delete an entry with constraints like not overwriting or not
creating a new entry.  I used that helper to update a couple other
places in the code.
2014-04-01 09:45:20 -07:00
Russell Belfer
18234b14ad Add efficient git_buf join3 API
There are a few places where we need to join three strings to
assemble a path.  This adds a simple join3 function to avoid the
comparatively expensive join_n (which calls strlen on each string
twice).
2014-04-01 09:45:20 -07:00
Russell Belfer
2450d4c63a Merge pull request #2208 from libgit2/vmg/mempack
In-memory packing backend
2014-04-01 09:33:18 -07:00
Edward Thomson
d67397dd0c Merge pull request #2226 from libgit2/rb/submodule-sorting-fix
Fix submodule sort order during iteration
2014-04-01 09:32:17 -07:00
Vicent Marti
9325460a93 Merge pull request #2206 from libgit2/cmn/inmemory-swap-order
Rename in-memory remote to anonymous and swap url and fetch order
2014-04-01 13:47:44 +02:00
Carlos Martín Nieto
fd536d29c1 remote: rename inmemory to anonymous and swap url and fetch order
The order in this function is the opposite to what
create_with_fetchspec() has, so change this one, as url-then-refspec is
what git does.

As we need to break compilation and the swap doesn't do that, let's take
this opportunity to rename in-memory remotes to anonymous as that's
really what sets them apart.
2014-04-01 13:38:04 +02:00
Edward Thomson
3ab5781601 Merge pull request #2178 from libgit2/rb/fix-short-id
Fix git_odb_short_id and git_odb_exists_prefix bugs
2014-03-31 23:23:32 -07:00
Anurag Gupta
3bc3d79761 No need to find merge base. 2014-03-31 15:15:32 -07:00
Russell Belfer
7dcd42a55f Cleanups 2014-03-31 13:31:01 -07:00
Russell Belfer
c856f8c503 Fix submodule sorting in workdir iterator
With the changes to how git_path_dirload_with_stat handles things
that look like submodules, submodules could end up sorted in the
wrong order with the workdir iterator.  This moves the submodule
check earlier in the iterator processing of a new directory so
that the submodule name updates will happen immediately and the
sort order will be correct.
2014-03-31 12:41:29 -07:00
Russell Belfer
945c92a5cf Add faster git_submodule__is_submodule check 2014-03-31 12:40:58 -07:00
Edward Thomson
7f930ded88 Const up members of git_merge_file_result 2014-03-31 11:08:31 -07:00
Vicent Marti
336e895721 Merge pull request #2222 from ethomson/merge_head_id
Introduce git_merge_head_id
2014-03-31 19:17:01 +02:00
Edward Thomson
976634c467 Introduce git_merge_head_id 2014-03-31 11:43:38 -05:00
Etienne Samson
31143b3655 Don't reset need_pack
While looping over multiple heads, an up-to-date head will clobber the `remote->need_pack` setting, preventing the rest of the machinery from building and downloading a pack-file, breaking fetches.
2014-03-30 19:08:56 +02:00
Russell Belfer
acdc7cff2e Fix memory leak of submodule branch name 2014-03-27 15:29:17 -07:00
Russell Belfer
add8db06f9 Fix use-after-free in submodule reload
If the first call to release a no-longer-existent submodule freed
the object, the check if a second is needed would dereference the
data that was just freed.
2014-03-27 15:28:29 -07:00
Jan Melcher
2873a862fd Retry renaming files on Access Denied errors
When a file is open for reading (without shared-delete permission), and
then a different thread/process called p_rename, that would fail, even
if the file was only open for reading for a few milliseconds. This
change lets p_rename wait up to 50ms for the file to be closed by the
reader. Applies only to win32.

This is especially important for git_filebuf_commit, because writes
should not fail if the file is read simultaneously.

Fixes #2207
2014-03-27 12:42:44 +01:00
Russell Belfer
380f864a10 Fix error when submodule path and name differ
When a submodule was inserted with a different path and name, the
return value from khash greater than zero was allowed to propagate
back out to the caller when it should really be zeroed.  This led
to a possible crash when reloading submodules if that was the
first time that submodule data was loaded.
2014-03-26 16:06:21 -07:00
Russell Belfer
22df47cbc5 Fix segfault if gitmodules is invalid
The reload_all call could end up dereferencing a NULL pointer if
there was an error while attempting to load the submodules config
data (i.e. invalid content in the gitmodules file).  This fixes it.
2014-03-26 14:38:26 -07:00
Edward Thomson
9cb99e8b85 Free temporary merge index 2014-03-26 12:43:41 -05:00
Vicent Marti
dc7efa1aef Merge pull request #2204 from libgit2/rb/submodule-reference-counting
Make submodules externally refcounted
2014-03-26 18:29:34 +01:00
Vicent Marti
6105d59707 In-memory packing backend 2014-03-26 18:17:08 +01:00
Vicent Marti
77b699e0da Merge pull request #2205 from libgit2/rb/submodule-untracked-vs-ignored
Update behavior for untracked contained repositories
2014-03-26 10:29:11 +01:00
Edward Thomson
1df8ad01d7 clone: don't overwrite original error message 2014-03-25 21:54:42 -07:00
Russell Belfer
591e82952a Fix submodule leaks and invalid references
This cleans up some places I missed that could hold onto submodule
references and cleans up the way in which the repository cache is
both reloaded and released so that existing submodule references
aren't destroyed inappropriately.
2014-03-25 16:52:01 -07:00
Russell Belfer
d3bc95fd66 Update behavior for untracked sub-repos
When a directory containing a .git directory (or even just a plain
gitlink) was found, libgit2 was going out of its way to treat it
specially.  This seemed like it was necessary because the diff
code was not originally emulating Git's behavior for untracked
directories correctly (i.e. scanning for ignored vs untracked items
inside).  Now that libgit2 diff mimics Git's untracked directory
behavior, the special handling for contained Git repos is actually
incorrect and this commit rips it out.
2014-03-25 12:37:05 -07:00
Edward Thomson
451aaf866a Merge pull request #2181 from anuraggup/hide_cb
Callback function to hide commit and its parents in revision walker
2014-03-25 10:33:18 -07:00
Russell Belfer
a15c7802c8 Make submodules externally refcounted
`git_submodule` objects were already refcounted internally in case
the submodule name was different from the path at which it was
stored.  This makes that refcounting externally used as well, so
`git_submodule_lookup` and `git_submodule_add_setup` return an
object that requires a `git_submodule_free` when done.
2014-03-25 09:14:48 -07:00
Anurag Gupta
7ca1584b47 Conforming to libgit2 coding style. 2014-03-24 11:20:31 -07:00
Anurag Gupta
46e4d82d6f Remove unused push_cb_data 2014-03-24 11:20:22 -07:00
Anurag Gupta
892aa808e2 Callback to hide commits in revision walker. 2014-03-24 11:20:03 -07:00
Vicent Marti
85a41fc4bf Merge pull request #2183 from ethomson/merge_refactor
Refactor the `git_merge` API
2014-03-24 18:09:13 +01:00
Carlos Martín Nieto
42dee8ecd7 settings: use git_buf for returning strings
This survived the last round of culling, as the signature is only in the
comments.
2014-03-24 13:21:51 +01:00
Linquize
31a14982a0 Fix wrong assertion
Fixes issue #2196
2014-03-21 17:36:34 +08:00
Vicent Marti
36a80fdaed Merge pull request #2195 from libgit2/cmn/revwalk-no-hide
revwalk: don't try to find merge bases when there can be none
2014-03-20 21:06:23 +01:00
Carlos Martín Nieto
704b55cce3 revwalk: don't try to find merge bases when there can be none
As a way to speed up the cases where we need to hide some commits, we
find out what the merge bases are so we know to stop marking commits as
uninteresting and avoid walking down a potentially very large amount of
commits which we will never see. There are however two oversights in
current code.

The merge-base finding algorithm fails to recognize that if it is only
given one commit, there can be no merge base. It instead walks down the
whole ancestor chain needlessly. Make it return an empty list
immediately in this situation.

The revwalk does not know whether the user has asked to hide any commits
at all. In situation where the user pushes multiple commits but doesn't
hide any, the above fix wouldn't do the trick. Keep track of whether the
user wants to hide any commits and only run the merge-base finding
algorithm when it's needed.
2014-03-20 20:24:11 +01:00
Carlos Martín Nieto
1c35165993 reflog: remove some dead code 2014-03-20 19:18:50 +01:00
Carlos Martín Nieto
8350437112 reflog: follow core.logallrefupdates
On bare by default, or when core.logallrefupdates is false, we must not
write the reflog.
2014-03-20 19:18:49 +01:00
Edward Thomson
58c2b1c421 UNBORN implies FAST_FORWARD 2014-03-20 09:35:22 -07:00
Edward Thomson
ac584fcfd3 Introduce GIT_MERGE_ANALYSIS_UNBORN 2014-03-20 09:25:11 -07:00
Edward Thomson
97f3462ae6 git_merge_status -> git_merge_analysis 2014-03-20 09:25:10 -07:00
Edward Thomson
d9fdee6e4c Remove git_merge_result as it's now unnecessary 2014-03-20 09:25:09 -07:00
Edward Thomson
5aa2ac6de1 Update git_merge_tree_opts to git_merge_options 2014-03-20 09:25:08 -07:00
Edward Thomson
02105a27f0 Change signature of git_merge to take merge and checkout opts 2014-03-20 09:25:07 -07:00
Edward Thomson
1c0b6a38ba Remove fastforward / uptodate from git_merge 2014-03-20 09:25:06 -07:00
Edward Thomson
ccb308273a Add git_merge_status to provide info about an upcoming merge 2014-03-20 09:25:06 -07:00
Edward Thomson
05d47768ca Introduce git_merge_file for consumers 2014-03-20 09:25:05 -07:00
Carlos Martín Nieto
99797c96cd reflog: handle symref chains
Given HEAD -> master -> foo, when updating foo's reflog we should also
update HEAD's, as it's considered the current branch.
2014-03-19 18:14:35 +01:00
Carlos Martín Nieto
6aaae94a70 reflog: handle the birth of a branch
The reflog append function was overzealous in its checking. When passed
an old and new ids, it should not do any checking, but just serialize
the data to a reflog entry.
2014-03-19 16:52:20 +01:00
Carlos Martín Nieto
afc57eb48f reflog: simplify the append logic
Remove some duplicated logic.
2014-03-19 15:54:33 +01:00
Carlos Martín Nieto
1afe140043 refdb: don't update when there's no need
If the caller wants to update a ref to point to the same target as it
currently has, we should return early and avoid writing to the reflog.
2014-03-19 15:54:33 +01:00
Carlos Martín Nieto
bac95e6e1e reflog: more comprehensive HEAD tests
The existing ones lack checking zeroed ids when switching back from an
unborn branch as well as what happens when detaching.

The reflog appending function mistakenly wrote zeros when dealing with a
detached HEAD. This explicitly checks for those situations and fixes
them.
2014-03-18 19:58:52 +01:00
Vicent Marti
5dd7d2432e Merge pull request #2189 from Aimeast/octopus
Implement git_merge_base_octopus
2014-03-18 16:23:51 +01:00
Aimeast
0aee025bef Implement git_merge_base_octopus 2014-03-18 22:31:14 +08:00
Vicent Marti
dd4c6962d7 Merge pull request #2192 from phkelley/development
Seamless support for NTLM/Kerberos auth on Windows
2014-03-18 15:25:43 +01:00
Philip Kelley
1392418ea8 Seamless support for NTLM/Kerberos auth on Windows 2014-03-18 10:24:23 -04:00
Carlos Martín Nieto
4b7e1b9e92 refs: append to the HEAD reflog when updating the current branch
When we update the current branch, we must also append to HEAD's reflog
to keep them in sync.

This is a bit of a hack, but as git.git says, it covers 100% of
default cases.
2014-03-17 17:47:47 +01:00
Carlos Martín Nieto
853b1407c0 branch: constness fixes 2014-03-17 17:47:46 +01:00
Russell Belfer
5302a88538 Fix pqueue sort boundary condition bug
If the pqueue comparison fn returned just 0 or 1 (think "a<b")
then the sort order of returned items could be wrong because there
was a "< 0" that really needed to be "<= 0".  Yikes!!!
2014-03-12 11:21:55 -07:00
Russell Belfer
8949907887 Fix a number of git_odb_exists_prefix bugs
The git_odb_exists_prefix API was not dealing correctly when a
later backend returned GIT_ENOTFOUND even if an earlier backend
had found the object.

Additionally, the unit tests were not properly exercising the API
and had a couple mistakes in checking the results.

Lastly, since the backends are not expected to behavior correctly
unless all bytes of the short id are zero except for the prefix,
this makes the ODB prefix APIs explicitly clear out the extra
bytes so the user doesn't have to be as careful.
2014-03-10 11:34:50 -07:00
Carlos Martín Nieto
9af14886a9 MSVC is silly 2014-03-10 18:20:47 +01:00
Vicent Marti
fc78488b3d Merge pull request #2175 from Yogu/submodule-resolve-url
Add git_submodule_resolve_url()
2014-03-10 18:16:56 +01:00
Jan Melcher
52fba18f4e Add git_submodule_resolve_url() 2014-03-10 18:16:10 +01:00
Brendan Forster
0782c89ed5 corrected typo in error message 2014-03-10 14:40:07 +11:00
Vicent Marti
041cd4a23f Merge pull request #2028 from libgit2/options-names
Rename options structures
2014-03-07 19:02:58 +01:00
Vicent Marti
628edd6b1b Merge pull request #2167 from mekishizufu/memory_access_fixes
Fun with memory access
2014-03-07 16:26:58 +01:00
Carlos Martín Nieto
ae32c54e58 Plug a few leaks in the tests 2014-03-07 16:03:15 +01:00
Carlos Martín Nieto
a07b169834 branch: fix leak when checking against HEAD
We look up a reference in order to figure out if it's the current
branch, which we need to free once we're done with the check.

As a bonus, only perform the check when we're passed the force flag, as
it's a useless check otherwise.
2014-03-07 16:03:10 +01:00
Carlos Martín Nieto
7c1ee212b7 commit: simplify and correct refcounting in nth_gen_ancestor
We can make use of git_object_dup to use refcounting instead of pointer
comparison to make sure we don't free the caller's object.

This also lets us simplify the case for '~0' which is now just an
assignment instead of looking up the object we have at hand.
2014-03-07 16:03:10 +01:00
Carlos Martín Nieto
5187b609ba local transport: catch double-opens
Combinations of connect + fetch can call local_open multiple
times. Detect this and skip the initialization stage.
2014-03-07 16:03:10 +01:00
Jiri Pospisil
79aa03020d blame: Fix compare function's data types
Previously the hunk_byfinalline_search_cmp function was called with different
data types (size_t and uint32_t) for the key argument but expected only the
former resulting in an invalid memory access when passed the latter on a 64 bit
machine.

The following patch makes sure that the function is called and works with the
same type (size_t).
2014-03-07 15:52:34 +01:00
Jiri Pospisil
00258cc0b6 git_oid_fromstrn: Simplify the implementation and fix memory access issues 2014-03-07 15:52:27 +01:00
Ben Straub
aa17c3c63c git_revert_opts -> git_revert_options 2014-03-06 09:44:52 -08:00
Ben Straub
6affd71f33 git_checkout_opts -> git_checkout_options 2014-03-06 09:44:51 -08:00
Matthew Bowen
b9f819978c Added function-based initializers for every options struct.
The basic structure of each function is courtesy of arrbee.
2014-03-05 21:49:23 -05:00
Vicent Marti
a064dc2d0b Merge pull request #2159 from libgit2/rb/odb-exists-prefix
Add ODB API to check for existence by prefix and object id shortener
2014-03-06 00:47:05 +01:00
Russell Belfer
26875825df Check short OID len in odb, not in backends 2014-03-05 13:06:22 -08:00
Vicent Marti
a62ad3c353 Merge pull request #2164 from libgit2/cmn/refs-delete-iteration
refdb: catch a directory disappearing
2014-03-05 21:07:20 +01:00
Vicent Marti
967d3f2e3e Merge pull request #2163 from ethomson/nobackend_odb_write
ODB writing fails gracefully when unsupported
2014-03-05 21:06:59 +01:00
Carlos Martín Nieto
a213a7bfa8 refdb: catch a directory disappearing
If a directory disappears between the time we look up the entries of its
parent and the time when we go to look at it, we should ignore the error
and move forward.

This fixes #2046.
2014-03-05 21:00:15 +01:00
Edward Thomson
7bd2f40154 ODB writing fails gracefully when unsupported
If no ODB backends support writing, we should fail gracefully.
2014-03-05 11:35:47 -08:00
Brian Lambert
06a8f5c3b2 Fixed missing error check on call to git_remote_download in git_remote_fetch. Moved error check to statement following git_remote_disconnect so that the disconnect happens regardless of the result of the download call. 2014-03-05 00:00:41 -05:00
Russell Belfer
13f7ecd7b9 Add git_object_short_id API to get short id string
This finds a short id string that will unambiguously select the
given object, starting with the core.abbrev length (usually 7)
and growing until it is no longer ambiguous.
2014-03-04 16:23:28 -08:00
Russell Belfer
f5753999e4 Add exists_prefix to ODB backend and ODB API 2014-03-04 15:34:23 -08:00
Vicent Marti
66d9e0461c Merge pull request #2157 from libgit2/cmn/write-object-mem
pack-objects: free memory safely
2014-03-04 21:01:39 +01:00
Carlos Martín Nieto
a14aa1e789 pack-objects: free memory safely
A few fixes have accumulated in this area which have made the freeing of
data a bit muddy. Make sure to free the data only when needed and once.

When we are going to write a delta to the packfile, we need to free the
data, otherwise leave it. The current version of the code mixes up the
checks for po->data and po->delta_data.
2014-03-04 20:11:50 +01:00
Jacques Germishuys
4636ca9391 Remove ignored files from the working directory if they were stashed 2014-03-04 12:22:27 +02:00
Vicent Marti
0511b15c82 Merge pull request #2141 from ravselj/development
BUGFIX - Fetching twice from the same remote causes a segfault
2014-03-03 15:05:26 +01:00
Vicent Marti
ebb3c506fd features: Rename _HAS_ to _FEATURE_ 2014-03-03 12:40:25 +01:00
Vicent Marti
c9f5298b0e caps: Rename to features to avoid confusion 2014-03-03 12:10:36 +01:00
Miha
b5212858f1 Merge remote-tracking branch 'remotes/upstream/development' into development 2014-03-03 11:40:22 +01:00
Ben Straub
494be429ad Merge pull request #2144 from linquize/branch-f-current
Do not allow git_branch_create() to force update branch
2014-03-02 09:00:00 -06:00
Russell Belfer
6789b7a75d Add buffer to buffer diff and patch APIs
This adds `git_diff_buffers` and `git_patch_from_buffers`.  This
also includes a bunch of internal refactoring to increase the
shared code between these functions and the blob-to-blob and
blob-to-buffer APIs, as well as some higher level assert helpers
in the tests to also remove redundancy.
2014-02-27 14:13:22 -08:00
Linquize
59b1dbcd7a Do not allow git_branch_create() to force update branch 2014-02-27 23:56:25 +08:00
Ben Straub
1574d3884f Merge pull request #2137 from jru/blame-first-parent
Blame first-parent history
2014-02-26 16:58:20 -05:00
Juan Rubén
0276f0f55b Reset num_parents to 1 only for merge commits
Also, correct test case to account for the boundary flag
2014-02-26 19:25:07 +01:00
Miha
3536c168c3 - need_pack was not set to 0 when local fetch was already present causing negotiate_fetch access violation 2014-02-25 14:57:47 +01:00
Miha
300f44125a - BUGFIX #2133 (@fourplusone) in smart_protocol.c
- added MSVC cmake definitions to disable warnings
- general.c is rewritten so it is ansi-c compatible and compiles ok on microsoft windows
- some MSVC reported warning fixes
2014-02-25 11:56:11 +01:00
Vicent Marti
cb81c3a764 Merge pull request #2138 from ethomson/sysdir
Move system directory cache out of utils
2014-02-25 10:46:41 +01:00
Edward Thomson
4f46a98b6e Remove now-duplicated stdarg.h include 2014-02-24 23:32:25 -08:00
Edward Thomson
ab0af298da Include stdarg.h for the va_copy test 2014-02-24 21:56:08 -08:00
Edward Thomson
83634d38be Move system directory cache out of utils 2014-02-24 17:52:38 -08:00
Ben Straub
c8893d1f00 Use a portable cast 2014-02-24 13:39:04 -08:00
Ben Straub
b1f2c2e255 Prevent icc warning 2014-02-24 05:33:14 -08:00
Ben Straub
8ac7da796b Avoid casting warning 2014-02-24 05:32:05 -08:00
Juan Rubén
c7c833947e Add option to limit blame to first parent 2014-02-23 23:26:12 +01:00
Russell Belfer
72556cc63b Address PR comments
* Make GIT_INLINE an internal definition so it cannot be used in
  public headers
* Fix language in CONTRIBUTING
* Make index caps API use signed instead of unsigned values
2014-02-20 14:27:10 -08:00
Russell Belfer
978a4ed5eb Make git_oid_equal a non-inline API 2014-02-20 11:00:31 -08:00
Ben Straub
864535cf85 Readability 2014-02-18 14:07:42 -08:00
Ben Straub
9bda5fb8c1 Improve error propagation in shallow call 2014-02-18 14:05:30 -08:00
brian m. carlson
0197d4107a
Check for EWOULDBLOCK as well as EAGAIN on write.
On some systems, notably HP PA-RISC systems running Linux or HP-UX,
EWOULDBLOCK and EAGAIN are not the same value.  POSIX (and these OSes) allow
EWOULDBLOCK to occur on write(2) (and send(2), etc.), so check explicitly
for this case as well as EAGAIN by defining and using a macro GIT_ISBLOCKED
that considers both.

The macro is necessary because MSYS does not provide EWOULDBLOCK and
compilation fails if an attempt is made to use it unconditionally.  On most
systems, where the two values are the same, the compiler will simply
optimize this check out and it will have no effect.
2014-02-16 16:56:37 +00:00
Edward Thomson
b033f3a3f9 Never convert CRLF->LF
Core git performs no conversion on systems that use LF, emulate that.
2014-02-11 16:52:08 -08:00
Russell Belfer
5d195cf76b Merge pull request #2110 from libgit2/ed/crlf_input
Handle `core.autocrlf=input` when checking out
2014-02-11 15:56:04 -08:00
Carlos Martín Nieto
15284a2c5a refs: move current_id before the reflog parameters
Keep the reflog parameters as the last two, as they're the optional
parameters.
2014-02-10 14:52:28 +01:00
Carlos Martín Nieto
77ad675464 refs: conditional wording fixups
This addresses arrbee's concerns about wording in the conditional
reference udpate functions.
2014-02-10 14:38:01 +01:00
Edward Thomson
66b2626c93 core.autocrlf=input w/ text=auto attr to workdir 2014-02-09 13:45:40 -08:00
Russell Belfer
80c29fe93e Add git_commit_amend API
This adds an API to amend an existing commit, basically a shorthand
for creating a new commit filling in missing parameters from the
values of an existing commit.  As part of this, I also added a new
"sys" API to create a commit using a callback to get the parents.
This allowed me to rewrite all the other commit creation APIs so
that temporary allocations are no longer needed.
2014-02-07 16:17:59 -08:00
Russell Belfer
2d9291943c Merge pull request #2099 from libgit2/bs/more-reflog-stuff
More reflogness
2014-02-07 16:14:17 -08:00
Russell Belfer
57c47af107 Merge pull request #2042 from libgit2/cmn/conditional-ref
refs: conditional ref updates
2014-02-07 16:05:19 -08:00
Russell Belfer
3158e2febe Fix some Windows warnings
This fixes a number of warnings with the Windows 64-bit build
including a test failure in test_repo_message__message where an
invalid pointer to a git_buf was being used.
2014-02-07 15:43:37 -08:00
Vicent Marti
c4ee3b54f8 Merge pull request #2100 from libgit2/rb/update-pqueue
Replace priority queue code with implementation from hashsig
2014-02-07 18:32:06 +01:00
Ben Straub
db55bb73ff Correct default reflog message for git_remote_fetch 2014-02-06 11:18:10 -08:00
Edward Thomson
55d257e7de Remove unused utf8 -> utf16 conversion code 2014-02-05 15:03:00 -08:00
Ben Straub
0de2c4e3a3 Merge remote-tracking branch 'libgit2/development' into bs/more-reflog-stuff 2014-02-05 13:15:57 -08:00
Russell Belfer
df70de071a Merge pull request #2094 from libgit2/cmn/push-non-commit
Add flexibility to the revwalk API
2014-02-05 10:25:50 -08:00
Carlos Martín Nieto
24f3024f36 Split p_strlen into its own header
We need this from util.h and posix.h, but the latter includes common.h
which includes util.h, which means p_strlen is not defined by the time
we get to git__strndup().

Split the definition on p_strlen() off into its own header so we can use
it in util.h.
2014-02-05 14:34:15 +01:00
Carlos Martín Nieto
1e6f0ac436 utils: don't reimplement strnlen
The standard library provides a very nice strnlen function, which knows
to use SSE, let's not reimplement it ourselves.
2014-02-05 14:31:13 +01:00
Carlos Martín Nieto
a6563619e9 commit: faster parsing
The current code issues a lot of strncmp() calls in order to check for
the end of the header, simply in order to copy it and start going
through it again. These are a lot of calls for something we can check as
we go along. Knowing the amount of parents beforehand to reduce
allocations in extreme cases does not make up for them.

Instead start parsing immediately and check for the double-newline after
each header field, leaving the raw_header allocation for the end, which
lets us go through the header once and reduces the amount of strncmp()
calls significantly.

In unscientific testing, this has reduced a shortlog-like usage (walking
though the whole history of a branch and extracting data from the
commits) of git.git from ~830ms to ~700ms and makes the time we spend in
strncmp() negligible.
2014-02-05 14:31:13 +01:00
Carlos Martín Nieto
c74077d13c revparse: do look at all refs when matching text
Now that we no longer fail to push non-commits on a glob, let's search
on all refs when we rev-parse syntax asks us to match text.
2014-02-05 12:16:44 +01:00
Carlos Martín Nieto
af81720236 revwalk: remove usage of foreach 2014-02-05 12:16:44 +01:00
Carlos Martín Nieto
d465e4e980 revwalk: ignore wrong object type in glob pushes
Pushing a whole namespace can cause us to attempt to push non-committish
objects. Catch this situation and special-case it for ignoring this.
2014-02-05 12:16:44 +01:00
Carlos Martín Nieto
f61272e047 revwalk: accept committish objects
Let the user push committish objects and peel them to figure out which
commit to push to our queue.

This is for convenience and for allowing uses of

    git_revwalk_push_glob(w, "tags")

with annotated tags.
2014-02-05 12:16:37 +01:00
Carlos Martín Nieto
5367ec4b84 refs: add an unconditional delete
Add it under the git_reference_remove() name, letting the user pass the
repo and name, analogous to unconditional setting/creation.
2014-02-05 12:07:57 +01:00
Carlos Martín Nieto
b7ae71ecf2 refs: catch cases where the ref type has changed
If the type of the on-disk reference has changed, the old value
comparison should fail.
2014-02-05 12:07:57 +01:00
Carlos Martín Nieto
f44fd59ed7 refs: check the ref's old value when deleting
Recognize when the reference has changed since we loaded it.
2014-02-05 12:07:57 +01:00
Carlos Martín Nieto
7ee8c7e677 refs: placeholder conditional delete
We don't actually pass the old value yet.
2014-02-05 12:07:57 +01:00
Carlos Martín Nieto
f8621dde40 refs: factor out old value comparison
We will reuse this later for deletion.
2014-02-05 12:07:57 +01:00
Carlos Martín Nieto
878fb66f57 refs: bring conditional symbolic updates to the frontend
Bring the race detection goodness to symbolic references as well.
2014-02-05 12:07:57 +01:00
Carlos Martín Nieto
911236619b refdb: add conditional symbolic updates
Add a parameter to the backend to allow checking for the old symbolic
target.
2014-02-05 12:07:56 +01:00
Carlos Martín Nieto
1202c7eaa6 refs: fix leak on successful update
Free the old ref even on success.
2014-02-05 12:07:56 +01:00
Carlos Martín Nieto
fc4728e3e2 refs: return GIT_EMODIFIED if the ref target moved
In case we loose the race to update the reference, return GIT_EMODIFIED
to let the user distinguish it from other types of errors.
2014-02-05 12:07:56 +01:00
Carlos Martín Nieto
5d96fe8828 refs: changes from feedback
Change the name to _matching() intead of _if(), and force _set_target()
to be a conditional update. If the user doesn't care about the old
value, they should use git_reference_create().
2014-02-05 12:07:56 +01:00
Carlos Martín Nieto
9b148098e6 refs: conditional ref updates
Allow updating references if the old value matches the given one.
2014-02-05 12:07:56 +01:00
Ben Straub
010cec3ac2 Add reflog params to git_repository_detach_head 2014-02-04 20:50:40 -08:00
Ben Straub
c3ab1e5af4 Add reflog parameters to remote apis
Also added a test for git_remote_fetch.
2014-02-04 20:38:13 -08:00
Ben Straub
491cecfe8c Add reflog parameters to git_push_update_tips 2014-02-04 20:27:44 -08:00
Russell Belfer
1bbacc9ff6 Avoid extra copying in pqueue operations
This tweaks the pqueue_up and pqueue_down routines so that they
will not do full element swaps but instead carry over the state
of the previous loop iteration and only assign elements for which
we know the final position.  This will avoid a little bit of data
assignment which should improve performance in theory.

Also got rid of some vector helpers that I'm no longer using.
2014-02-04 16:46:43 -08:00
Ben Straub
0adb06065b Fix reflog message when creating commits 2014-02-04 15:32:57 -08:00
Russell Belfer
43709ca878 Fix typo setting sorted flag when reloading index
This fixes a typo I made for setting the sorted flag on the index
after a reload.  That typo didn't actually cause any test failures
so I'm also adding a test that explicitly checks that the index is
correctly sorted after a reload when ignoring case and when not.
2014-02-04 10:33:30 -08:00
Russell Belfer
882c774271 Convert pqueue to just be a git_vector
This updates the git_pqueue to simply be a set of specialized
init/insert/pop functions on a git_vector.

To preserve the pqueue feature of having a fixed size heap, I
converted the "sorted" field in git_vectors to a more general
"flags" field so that pqueue could mix in it's own flag.  This
had a bunch of ramifications because a number of places were
directly looking at the vector "sorted" field - I added a couple
new git_vector helpers (is_sorted, set_sorted) so the specific
representation of this information could be abstracted.
2014-02-04 10:01:37 -08:00
Russell Belfer
4075e060b4 Replace pqueue with code from hashsig heap
I accidentally wrote a separate priority queue implementation when
I was working on file rename detection as part of the file hash
signature calculation code.  To simplify licensing terms, I just
adapted that to a general purpose priority queue and replace the
old priority queue implementation that was borrowed from elsewhere.

This also removes parts of the COPYING document that no longer
apply to libgit2.
2014-02-03 21:02:08 -08:00
Edward Thomson
dbfd83bc65 Remove unused pointer assignment 2014-02-03 19:56:34 -08:00
Edward Thomson
c0b10c25e0 Merge wd validation tests against index not HEAD
Validating the workdir should not compare HEAD to working
directory - this is both inefficient (as it ignores the cache)
and incorrect.  If we had legitimately allowed changes in the
index (identical to the merge result) then comparing HEAD to
workdir would reject these changes as different.  Further, this
will identify files that were filtered strangely as modified,
while testing with the cache would prevent this.

Also, it's stupid slow.
2014-02-03 19:56:34 -08:00
Ben Straub
86746b4b3a Add reset tests for reflog 2014-02-03 15:06:47 -08:00
Ben Straub
586be3b889 Add reflog parameters to git_reset 2014-02-03 15:05:55 -08:00
Vicent Marti
3b6a5bac20 Merge pull request #2095 from libgit2/update-head-reflog
Correct "new" id for reattached-HEAD reflog entry
2014-02-03 10:36:04 -08:00
Arthur Schreiber
50ad7cc208 Add git_reference_is_note. 2014-02-02 18:20:38 +01:00
Ben Straub
7f058b8668 Check for errors when dereferencing symbolic refs 2014-02-01 19:31:26 -08:00
Ben Straub
ee8e6afda9 Reflog: correct "new" id for reattaching HEAD 2014-02-01 11:46:44 -08:00
Ben Straub
a1710a28f6 Enhance testing of signature parameters 2014-01-30 15:53:52 -08:00
Ben Straub
59bb1126e0 Provide good default reflog messages in branch api 2014-01-30 15:53:52 -08:00
Ben Straub
ccf6ce5c89 Ensure renaming a reference updates the reflog 2014-01-30 15:52:13 -08:00
Ben Straub
540c1809f4 Add reflog parameters to git_branch_move 2014-01-30 15:52:13 -08:00
Ben Straub
48110f67e4 Deleting a branch deletes its reflog 2014-01-30 15:52:13 -08:00
Ben Straub
1cc974ab62 Augment clone API with reflog parameters 2014-01-30 15:52:13 -08:00
Ben Straub
b31ebfbc66 Add reflog params to git_branch_create 2014-01-30 15:52:13 -08:00
Ben Straub
6357388e98 Enhance clarity 2014-01-30 15:51:00 -08:00
Ben Straub
a2311f92c2 Ensure updating HEAD updates reflog 2014-01-30 15:51:00 -08:00
Ben Straub
94f263f59b Add reflog params to set-head calls 2014-01-30 15:51:00 -08:00