Commit Graph

3580 Commits

Author SHA1 Message Date
Isaac Kearse
fbabe855ad Trim leading colon from ssh repository path 2013-09-08 14:11:08 +12:00
nulltoken
031f3f8028 odb: Error when streaming in too [few|many] bytes 2013-09-07 23:00:20 +02:00
Carlos Martín Nieto
53ea051371 config: handle realloc issues from larger depths
As the include depth increases, the chance of a realloc
increases. This means that whenever we run git_array_alloc() or call
config_parse(), we need to remember what our reader's index is so we
can look it up again.
2013-09-07 20:51:26 +02:00
Carlos Martín Nieto
6978992298 config: return an error when reaching the maximum include depth 2013-09-07 20:51:26 +02:00
Carlos Martín Nieto
73fc5e01c2 config: fix variable overriding
When two or more variables of the same name exist and the user asks
for a scalar, we must return the latest value assign to it.
2013-09-07 20:51:26 +02:00
Carlos Martín Nieto
a9fb79896e config: refresh included files
We need to refresh the variables from the included files if they are
changed, so loop over all included files and re-parse the files if any
of them has changed.
2013-09-07 20:51:26 +02:00
Carlos Martín Nieto
19be0692b4 config: keep a list of included files
When refreshing we need to refresh if any of the files have been
touched, so we need to keep the list.
2013-09-07 20:51:26 +02:00
Carlos Martín Nieto
d8d25acb9a config: add support for include directives
Relative, absolute and home-relative paths are supported. The
recursion limit it set at 10, just like in git.
2013-09-07 20:51:26 +02:00
nulltoken
1634df8c28 revparse: Simplify error handling 2013-09-07 17:48:06 +02:00
nulltoken
a8d67afe42 revparse: Prevent unnecessary odb backend calls 2013-09-07 17:48:05 +02:00
Russell Belfer
32e4992972 Merge pull request #1791 from libgit2/cmn/revwalk-recursive
revwalk: make mark_unintersting use a loop
2013-09-06 14:20:51 -07:00
nulltoken
4047950f30 odb: Prevent stream_finalize_write() from overwriting
Now that #1785 is merged, git_odb_stream_finalize_write() calculates the object id before invoking the odb backend.

This commit gives a chance to the backend to check if it already knows this object.
2013-09-06 22:47:28 +02:00
Carlos Martín Nieto
fb23d05f0b revwalk: make mark_unintersting use a loop
Using a recursive function can blow the stack when dealing with long
histories. Use a loop instead to limit the call chain depth.

This fixes #1223.
2013-09-06 19:56:51 +02:00
Vicent Martí
366bd2f43d Merge pull request #1829 from libgit2/fix-umask-fragility
Fix umask fragility
2013-09-05 16:56:21 -07:00
Russell Belfer
a7fcc44dcf Better macro name for is-exec-bit-set test 2013-09-05 16:14:32 -07:00
Russell Belfer
af22dabb43 GIT_MODE_TYPE should exclude setgid bits
The GIT_MODE_TYPE macro was looking at all bits above the
permissions, but it should really just look at the top bits so
that it will give the right results for a setgid or setuid entry.

Since we're now using these macros in the tests, this was causing
a test failure on platforms that don't support setgid.
2013-09-05 12:01:17 -07:00
Russell Belfer
f240acce86 Add more file mode permissions macros
This adds some more macros for some standard operations on file
modes, particularly related to permissions, and then updates a
number of places around the code base to use the new macros.
2013-09-05 11:20:12 -07:00
Carlos Martín Nieto
d209cc4751 config: decouple the backend from the reader at the low level
In order to support config includes, we must differentiate between the
backend's main file and the file we are currently parsing.

This lays the groundwork for includes, keeping the current behaviours.
2013-09-05 18:06:12 +02:00
Vicent Martí
cca9bea484 Merge pull request #1831 from linquize/version.h-warning
Fix warning in src/win32/version.h
2013-09-05 06:30:08 -07:00
Linquize
21753d4869 Fix warning in src/win32/version.h 2013-09-05 20:42:47 +08:00
Ben Straub
f42d546c63 Provide better errors for push on non-bare local remotes 2013-09-04 13:07:42 -07:00
Vicent Martí
e98535923b Merge pull request #1817 from libgit2/ntk/fix/backend/honor_refresh_capabilities
Of backends and refreshers...
2013-09-04 06:20:36 -07:00
Vicent Marti
74b38d199e Backport @peff's fix for duplicates in sha1_lookup 2013-09-04 13:16:57 +02:00
nulltoken
b1a6c316a6 odb: Move the auto refresh logic to the pack backend
Previously, `git_object_read()`, `git_object_read_prefix()` and
`git_object_exists()` were implementing an auto refresh logic. When the
expected object couldn't be found in any backend, a call to
`git_odb_refresh()` was triggered and the lookup was once again performed
against all backends.

This commit removes this auto-refresh logic from the odb layer and pushes
it down into the pack-backend (as it's the only one currently exposing
a `refresh()` endpoint).
2013-09-04 07:44:53 +02:00
Russell Belfer
cae5293854 Fix resolving relative windows network paths 2013-09-03 14:00:27 -07:00
Vicent Martí
6208bd499b Merge pull request #1804 from ethomson/rewrites
Minor changes for rewrites
2013-09-03 12:29:18 -07:00
Russell Belfer
37fc44ddff Merge pull request #1825 from nvloff/resolve_relative
path: properly resolve relative paths
2013-09-03 12:27:56 -07:00
Nikolai Vladimirov
6d9a6c5cec path: properly resolve relative paths 2013-09-03 20:45:53 +03:00
Vicent Martí
b595b385df Merge pull request #1814 from libgit2/is-empty-fix
Fix incorrect precedence within git_repository_is_empty()
2013-09-03 04:11:07 -07:00
Krzysztof Adamski
b1447edebc Use git__insertsort_r on Android too. 2013-09-01 18:47:56 +02:00
Linquize
d45e9480e7 oid: git_oid_shorten_add() sets GITERR_INVALID when OID set is full 2013-08-31 18:22:50 +08:00
nulltoken
9b4ed214f4 odb: Code beautification 2013-08-30 23:19:02 +02:00
nulltoken
a12e069a3e odb: Honor the non refreshing capability of a backend 2013-08-30 23:19:02 +02:00
Russell Belfer
4218183631 Treat detached HEAD as non-empty repo
This simplifies the git_repository_is_empty a bit so that a
detached HEAD is just taken to mean the repo is not empty, since
a newly initialized repo will not have a detached HEAD.
2013-08-29 10:27:01 -07:00
Vicent Martí
8b2f230cd5 repository: Make the is_empty check more explicit 2013-08-29 13:27:37 +02:00
Justin Spahr-Summers
4ab6a759f6 Fix incorrect precedence within git_repository_is_empty()
Reverts part of 9146f1e57e.
2013-08-28 22:51:57 -07:00
Russell Belfer
19b9a09209 Add stddef include for sortedcache
All use of sortedcache will need this header, so put it in the
definition of the sortedcache API.
2013-08-28 11:20:47 -07:00
Vicent Martí
dbecec37a7 Merge pull request #1805 from libgit2/threading-packed-load
Thread safety for the refdb_fs
2013-08-28 09:38:14 -07:00
Edward Thomson
17c7fbf6d2 Split rewrites, status doesn't return rewrites
Ensure that we apply splits to rewrites, even if we're not
interested in examining it closely for rename/copy detection.

In keeping with core git, status should not display rewrites,
it should simply show files as "modified".
2013-08-28 08:30:19 -05:00
Vicent Martí
1ef05e3f0e Merge pull request #1803 from libgit2/ntk/topic/even_more_lenient_remote_parsing
Even more lenient remote parsing
2013-08-28 06:05:50 -07:00
Vicent Martí
d07cc8a2f7 Merge pull request #1808 from frasertweedale/fix/freebsd-dup-include
netops: remove duplicate include
2013-08-28 06:05:07 -07:00
Vicent Martí
b8b22d774e Merge pull request #1772 from libgit2/config-iter
Configuration iterators redux
2013-08-28 06:04:51 -07:00
Edward Thomson
1ff3a09415 Improve win32 version check, no ipv6 tests on XP 2013-08-27 19:44:35 -05:00
Russell Belfer
f087bc245e Convert to our own SRWLOCK type on Win32 2013-08-27 12:08:55 -07:00
nulltoken
aec87f712f remote: Make git_remote_list() detect pushurl 2013-08-27 20:14:10 +02:00
nulltoken
191adce875 vector: Teach git_vector_uniq() to free while deduplicating 2013-08-27 20:14:07 +02:00
nulltoken
c9ffa84bde remote: Relax the parsing logic even more
In order to be loaded, a remote needs to be configured with at least a `url` or a `pushurl`.

ENOTFOUND will be returned when trying to git_remote_load() a remote with neither of these entries defined.
2013-08-27 19:31:19 +02:00
nulltoken
ece24ef7c4 remote: Don't parse missing urls as empty strings 2013-08-27 16:57:17 +02:00
nulltoken
44bc0c6ac3 remote: Warn the user when connecting with no url 2013-08-27 16:57:16 +02:00
nulltoken
b83c92dd6f remote: Assert proper GIT_DIRECTION_XXXX values 2013-08-27 16:57:15 +02:00
Russell Belfer
2f368a661c Fix MINGW SRWLock typedefs 2013-08-26 15:17:35 -07:00
Russell Belfer
430953417f Load SRWLock APIs at runtime
This loads SRWLock APIs at runtime and in their absence (i.e. on
Windows before Vista) falls back on a regular CRITICAL_SECTION
that will not permit concurrent readers.
2013-08-26 14:56:31 -07:00
Nikolai Vladimirov
504850cdf5 refs: add git_reference_is_tag 2013-08-26 08:04:10 +03:00
Fraser Tweedale
e52963080a netops: remove duplicate include
9e9aee6 added an include <netinet/in.h> to fix the build on FreeBSD.
Sometime since then the same header is included ifndef _WIN32, so
remove the duplicate include.
2013-08-24 20:15:22 +10:00
Russell Belfer
805755f49b Fix sortedcache docs and other feedback
This converts an internal lock from a write lock to a read lock
where write isn't needed, and also clarifies some doc things about
where various locks are acquired and how various APIs are intended
to be used.
2013-08-22 15:44:34 -07:00
Russell Belfer
b6ac07b517 Trying to fix Win32 warnings 2013-08-22 14:45:10 -07:00
Russell Belfer
eb868b1e98 Drop support for THREADSAFE on Windows XP
This makes libgit2 require Windows Vista or newer if it is going
to be compiled with the THREADSAFE option
2013-08-22 14:34:21 -07:00
Russell Belfer
972bb689c4 Add SRWLock implementation of rwlocks for Win32 2013-08-22 14:10:56 -07:00
Russell Belfer
2b6e190847 A bit of item alignment paranoia 2013-08-22 11:50:10 -07:00
Russell Belfer
8d9a85d43a Convert sortedcache to use rwlock
This is the first use we have of pthread_rwlock_t in libgit2.
Hopefully it won't cause any serious portability problems.
2013-08-22 11:40:53 -07:00
Russell Belfer
3eecadcce5 Improve comments on locking for sortedcache APIs 2013-08-21 22:50:37 -07:00
Russell Belfer
e8c5eb5537 No need to lock newly created tgt in copy 2013-08-21 22:44:56 -07:00
Russell Belfer
b37359aac5 Fix warnings when compiling without threads 2013-08-21 16:50:03 -07:00
Russell Belfer
fe37274080 Rewrite refdb_fs using git_sortedcache object
This adds thread safety to the refdb_fs by using the new
git_sortedcache object and also by relaxing the handling of some
filesystem errors where the fs may be changed out from under us.

This also adds some new threading tests that hammer on the refdb.
2013-08-21 16:26:32 -07:00
Russell Belfer
24c71f14b4 Add internal ref set_name fn instead of realloc
The refdb_fs implementation calls realloc directly on a reference
object when it wants to rename it.  It is not a public object, so
this doesn't mess with the immutability of references, but it does
assume certain constraints on the reference representation.  This
commit wraps that assumption in an isolated API to isolate it.
2013-08-21 14:10:27 -07:00
Russell Belfer
a4977169e1 Add sortedcache APIs to lookup index and remove
This adds two other APIs that I need to the sortedcache type.
2013-08-21 14:09:38 -07:00
Russell Belfer
0b7cdc0263 Add sorted cache data type
This adds a convenient new data type for caching the contents of
file in memory when each item in that file corresponds to a name
and you need to both be able to lookup items by name and iterate
over them in some sorted order.  The new data type has locks in
place to manage usage in a threaded environment.
2013-08-20 16:14:24 -07:00
Russell Belfer
0f0f565507 Don't try to pack symbolic refs
If there were symbolic refs among the loose refs then the code
to create packed-refs would fail trying to parse the OID out of
them (where Git just skips trying to pack them).  This fixes it.
2013-08-20 16:14:23 -07:00
Edward Thomson
c0b01b7572 Skip UTF-8 BOM in binary detection
When a git_buf contains a UTF-8 BOM, the three bytes comprising
that BOM are treated as unprintable characters.  For a small git_buf,
the three BOM characters overwhelm the printable characters.  This
is problematic when trying to check out a small file as the CR/LF
filtering will not apply.
2013-08-19 18:46:26 -05:00
Edward Thomson
8255b497b6 Quiet down some warnings 2013-08-19 17:49:53 -05:00
Edward Thomson
238b761491 Fix p_inet_pton on windows
p_inet_pton on Windows should set errno properly for callers.
Rewrite p_inet_pton to handle error cases correctly and add
test cases to exercise this function.
2013-08-19 17:21:35 -05:00
Edward Thomson
86967cc579 Use time(2) to get the time
We didn't use the added precision in gettimeofday, so remove it.
This prevents us from having an unnecessary reimplementation on
win32.
2013-08-19 16:44:17 -05:00
Carlos Martín Nieto
6d69fbce31 Revparse does not handle refspecs 2013-08-19 13:04:05 +02:00
Vicent Martí
520287f63a Merge pull request #1785 from libgit2/cmn/odb-hash-frontend
odb: move hashing to the frontend for streaming
2013-08-19 02:17:00 -07:00
Vicent Martí
1c1b4e8a15 Merge pull request #1792 from libgit2/ntk/bug/prefix_size
odb: Straighten oid prefix handling
2013-08-19 02:16:02 -07:00
Carlos Martín Nieto
3d27687475 index: report when it's locked
Report the index being locked with its own error code in order to be
able to differentiate, as a locked index is typically the result of a
crashed process or concurrent access, both of which often require user
intervention to fix.
2013-08-19 10:30:44 +02:00
nulltoken
d19dd9cf73 odb: Straighten oid prefix handling 2013-08-18 23:38:51 +02:00
Carlos Martín Nieto
090a07d295 odb: avoid hashing twice in and edge case
If none of the backends support direct writes and we must stream the
whole file, we already know what the object's id should be; so use the
stream's functions directly, bypassing the frontend's hashing and
overwriting of our existing id.
2013-08-17 02:12:04 +02:00
Carlos Martín Nieto
fe0c6d4e71 odb: make it clearer that the id is calculated in the frontend
The frontend is in charge of calculating the id of the objects. Thus
the backends should treat it as a read-only value. The positioning in
the function signature made it seem as though it was an output
parameter.

Make the id const and move it from the front to behind the subject
(backend or stream).
2013-08-17 01:41:08 +02:00
Vicent Martí
51a5e13347 Merge pull request #1778 from libgit2/push_tag_to_tag_test
push: handle tag chains correctly
2013-08-16 16:22:37 -07:00
Russell Belfer
ce23330fd6 Add new git_signature_default API using config
This adds a new API for creating a signature that uses the
config to look up "user.name" and "user.email".
2013-08-16 15:04:15 -07:00
Martin Woodward
c9340df055 Give credit to PHP for the p_readlink function in posix_w32.c 2013-08-16 19:40:58 +01:00
Carlos Martín Nieto
5ce6c1e917 push: handle tag chains correctly
When dealing with a chain of tags, we need to enqueue each of them
individually, which means we can't use `git_tag_peel` as that jumps
over the intermediate tags.

Do the peeling manually so we can look at each object and take the
appropriate action.
2013-08-16 01:32:29 +02:00
Carlos Martín Nieto
d4e6cf0cd0 odb: remove a duplicate object header formatting function 2013-08-15 14:32:47 +02:00
Carlos Martín Nieto
8380b39a67 odb: perform the stream hashing in the frontend
Hash the data as it's coming into the stream and tell the backend what
its name is when finalizing the write. This makes it consistent with
the way a plain git_odb_write() performs the write.
2013-08-15 14:29:39 +02:00
Carlos Martín Nieto
376e6c9f96 odb: wrap the stream reading and writing functions
This is in preparation for moving the hashing to the frontend, which
requires us to handle the incoming data before passing it to the
backend's stream.
2013-08-15 14:29:27 +02:00
Evan Hanson
1616fa68e5 revparse: Use more idiomatic error value test 2013-08-15 17:25:05 +12:00
Evan Hanson
899ec41fa1 revparse: Free left side of invalid range revspecs
This fixes a small memory leak in git_revparse where early returns on
errors from git_revparse_single cause a free() on the (reallocated) left
side of the revspec to be skipped.
2013-08-15 16:25:48 +12:00
Vicent Marti
1e94df08da sha1-lookup: This assert was correct 2013-08-15 00:09:46 +02:00
Russell Belfer
c87bf86cd7 Commit 7affc2f7 removed var initialization
That commit accidentally removed the initialization of the "start"
variable giving undefined results for the host extraction from the
url input.
2013-08-14 10:58:02 -07:00
Vicent Martí
ad0af71575 Merge pull request #1780 from phkelley/development
Respect GIT_SSL_NO_VERIFY and http.sslVerify
2013-08-14 06:48:09 -07:00
Vicent Martí
9d1751bf6e Merge pull request #1783 from libgit2/cmn/relax-remote
remote: relax the url rules
2013-08-14 06:44:28 -07:00
Vicent Martí
89f6d84ccf Merge pull request #1781 from brodie/brodie/stat-before-open
fileops: stat() before open()ing in git_futils_readbuffer_updated()
2013-08-14 06:40:38 -07:00
Carlos Martín Nieto
0b9ebb54ff remote: relax the url rules
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.
2013-08-14 11:52:49 +02:00
Vicent Marti
59547ce772 oid: Helper for old-school hashcmp 2013-08-14 10:34:07 +02:00
Vicent Marti
e2164da5eb sha1_lookup: Hello my name is MSVC and how do I pointer 2013-08-14 10:31:02 +02:00
Vicent Marti
67591c8cd8 sha1_lookup: do not use the "experimental" lookup mode 2013-08-14 10:28:01 +02:00
Carlos Martín Nieto
f4be8209af config: don't special-case the multivar iterator
Build it on top of the normal iterator instead, which lets use re-use
a lot of code.
2013-08-14 00:45:05 +02:00
Philip Kelley
af6dab7ef7 Respect GIT_SSL_NO_VERIFY and http.sslVerify 2013-08-13 15:10:03 -04:00
Ben Straub
2af9bcb2db Merge pull request #1779 from ben/win32-precompiled-header-speedup
Speed up build under MSVC
2013-08-13 11:37:31 -07:00