Commit Graph

592 Commits

Author SHA1 Message Date
Vicent Martí
7b134cfebe Merge pull request #141 from jpfender/unmerged
index: Add API for unmerged entries
2011-05-18 17:04:12 -07:00
Vicent Martí
7d6274baa9 Merge pull request #197 from schu/errors
Move odb.c to the new error handling
2011-05-18 17:00:20 -07:00
schu
12de98c1c8 Move odb.c to the new error handling
Add missing free in git_odb_new().

Signed-off-by: schu <schu-github@schulog.org>
2011-05-18 18:11:25 +02:00
Sebastian Schuberth
765fdf4a0e Use "__inline" instead of "inline" with MSVC
MSVC supports "inline" only in C++ code, not in C code.
2011-05-18 17:31:24 +02:00
Sebastian Schuberth
072347166f Define str(n)casecmp for MSVC
MSVC has _str(n)icmp instead.
2011-05-18 17:31:23 +02:00
Jakob Pfender
9d27fd3bee index.c: Fix typo
git__rethrow was missing an underscore.
2011-05-17 16:51:37 +02:00
Jakob Pfender
c90bfec7aa Move index.c to new error handling mechanism 2011-05-17 16:21:14 +02:00
Jakob Pfender
050e8877dd Merge branch 'development' into unmerged 2011-05-17 15:31:05 +02:00
Vicent Marti
0da2c70067 utils: Move git__str[n]tolower 2011-05-17 15:11:19 +03:00
Vicent Marti
128d37316b config_file: Fix compilation 2011-05-17 15:11:19 +03:00
Vicent Marti
6adcb5f3d2 utils: Implement git__strndup 2011-05-17 15:11:19 +03:00
Vicent Marti
b3d94069b4 repository: Properly free the index on close 2011-05-17 15:11:19 +03:00
Carlos Martín Nieto
29dca0883f Move config to the new error methods
Take this opportunity to fix an instance of returning
GIT_EOBJCORRUPTED when malloc failed.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-05-17 13:41:42 +02:00
Carlos Martín Nieto
94711cad3b Merge upstream/development 2011-05-17 12:12:59 +02:00
Vicent Marti
335d6c9980 cache: Drop cuckoo hashing
Now we use a simple closed-addressing cache. Cuckoo hashing was creating
too many issues with race conditions. Fuck that.

Let's see what happens performance wise, we may have to roll back or
come up with another way to implement an efficient multi-threaded cache.
2011-05-17 01:46:07 +03:00
Vicent Marti
3de79280e3 cache: Fix deadlock
Do not try to adquire the same node lock twice when the cuckoo hashing
resolves to the same node.
2011-05-17 00:51:52 +03:00
Vicent Marti
5ca2f58057 Do not set error message on GIT_EREVWALKOVER
This is not really an error, just a special return code to mark the end
of an iteration.
2011-05-15 23:48:05 +03:00
Vicent Marti
7cadd1f6a7 Check error code from git_cache_init 2011-05-15 23:46:22 +03:00
Vicent Marti
4edf3e099a Return success code on git_cache_init 2011-05-15 23:45:24 +03:00
Vicent Martí
3fe2e770ca Merge pull request #184 from nulltoken/repo-error-handling
Updated fileops.c and repository.c to new error handling mechanism
2011-05-15 13:34:43 -07:00
Shuhei Tanuma
71747bcae0 fix git_otype typo when calling git_odb_read_header. 2011-05-15 20:07:54 +09:00
nulltoken
81201a4c4d Move cache.c to the new error handling 2011-05-15 06:57:34 +02:00
nulltoken
3abe3bba5a Move repository.c to the new error handling 2011-05-14 16:05:33 +02:00
nulltoken
77c3999ca9 Move fileops.c to the new error handling 2011-05-14 14:46:22 +02:00
Vicent Martí
f02f4b536c Merge pull request #183 from schu/errors
Replace errors
2011-05-13 15:25:19 -07:00
Vicent Marti
098173c52a Check Redis replies for NULL 2011-05-13 04:19:53 +03:00
schu
b51c92693d Move revwalk.c to the new error handling
Signed-off-by: schu <schu-github@schulog.org>
2011-05-11 14:44:44 +02:00
schu
86f5fa7810 Move vector.c to the new error handling
Remove "redundant" check for v->_cmp in wrapper function
git_vector_bsearch().

Signed-off-by: schu <schu-github@schulog.org>
2011-05-11 14:00:53 +02:00
schu
d6de92b6fe Move tree.c to the new error handling
Signed-off-by: schu <schu-github@schulog.org>
2011-05-11 12:40:04 +02:00
schu
cbcaf0c09c Move blob.c to the new error handling
Signed-off-by: schu <schu-github@schulog.org>
2011-05-11 12:39:31 +02:00
Vicent Marti
6810bf28f8 Move all error-related defines to git2/errors.h 2011-05-11 00:40:07 +03:00
Vicent Marti
f4a936b56a Bring back git_strerror
We cannot totally deprecate this until the new error handling mechanisms
are all in place.
2011-05-11 00:35:40 +03:00
Carlos Martín Nieto
44dc0d261b Move tag.c to the new error handling
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-05-10 18:56:44 +02:00
Carlos Martín Nieto
5de24ec736 Move signature.c to the new error handling
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-05-10 17:38:41 +02:00
Carlos Martín Nieto
c033500549 Move config to a backend structure
Configuration options can come from different sources. Currently,
there is only support for reading them from a flat file, but it might
make sense to read it from a database at some point.

Move the parsing code into src/config_file.c and create an include
file include/git2/config_backend.h to allow for other backends to be
developed.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-05-10 14:47:20 +02:00
Vicent Marti
5711ca93d1 Merge branch 'error-handling' into development 2011-05-09 21:58:26 +03:00
Vicent Marti
fa59f18d0d Change error handling mechanism once again
Ok, this is the real deal. Hopefully. Here's how it's going to work:

- One main method, called `git__throw`, that sets the error
	code and error message when an error happens.

	This method must be called in every single place where an error
	code was being returned previously, setting an error message
	instead.

	Example, instead of:

		return GIT_EOBJCORRUPTED;

	Use:

		return git__throw(GIT_EOBJCORRUPTED,
			"The object is missing a finalizing line feed");

	And instead of:

		[...] {
			error = GIT_EOBJCORRUPTED;
			goto cleanup;
		}

	Use:

		[...] {
			error = git__throw(GIT_EOBJCORRUPTED, "What an error!");
			goto cleanup;
		}

	The **only** exception to this are the allocation methods, which
	return NULL on failure but already set the message manually.

		/* only place where an error code can be returned directly,
		   because the error message has already been set by the wrapper */
		if (foo == NULL)
			return GIT_ENOMEM;

- One secondary method, called `git__rethrow`, which can be used to
fine-grain an error message and build an error stack.

	Example, instead of:

		if ((error = foobar(baz)) < GIT_SUCCESS)
			return error;

	You can now do:

		if ((error = foobar(baz)) < GIT_SUCCESS)
			return git__rethrow(error, "Failed to do a major operation");

	The return of the `git_lasterror` method will be a string in the
	shape of:

		"Failed to do a major operation. (Failed to do an internal
		operation)"

	E.g.

		"Failed to open the index. (Not enough permissions to access
		'/path/to/index')."

	NOTE: do not abuse this method. Try to write all `git__throw`
	messages in a descriptive manner, to avoid having to rethrow them to
	clarify their meaning.

	This method should only be used in the places where the original
	error message set by a subroutine is not specific enough.

	It is encouraged to continue using this style as much possible to
	enforce error propagation:

		if ((error = foobar(baz)) < GIT_SUCCESS)
			return error; /* `foobar` has set an error message, and
							 we are just propagating it */

The error handling revamp will take place in two phases:

	- Phase 1: Replace all pieces of code that return direct error codes
	with calls to `git__throw`. This can be done semi-automatically
	using `ack` to locate all the error codes that must be replaced.

	- Phase 2: Add some `git__rethrow` calls in those cases where the
	original error messages are not specific enough.

Phase 1 is the main goal. A minor libgit2 release will be shipped once
Phase 1 is ready, and the work will start on gradually improving the
error handling mechanism by refining specific error messages.

OTHER NOTES:

	- When writing error messages, please refrain from using weasel
	words. They add verbosity to the message without giving any real
	information. (<3 Emeric)

	E.g.

		"The reference file appears to be missing a carriage return"
			Nope.

		"The reference file is missing a carriage return"
			Yes.

	- When calling `git__throw`, please try to use more generic error
	codes so we can eventually reduce the list of error codes to
	something more reasonable. Feel free to add new, more generic error
	codes if these are going to replace several of the old ones.

	E.g.

		return GIT_EREFCORRUPTED;

	Can be turned into:

		return git__throw(GIT_EOBJCORRUPTED,
			"The reference is corrupted");
2011-05-09 21:58:02 +03:00
Vicent Marti
5eb0fab846 errors: Update external API with new git_lasterror 2011-05-09 21:58:02 +03:00
Vicent Marti
3f53c97113 errors: Set error messages on memory allocation 2011-05-09 21:58:02 +03:00
Vicent Marti
02f9e637a1 errors: Add error handling function 2011-05-09 21:58:01 +03:00
Vicent Martí
cd2cc2dc36 Merge pull request #170 from jasonrm/development
Fix misspelling of git_index_append2 (was git_index_apppend2).
2011-05-08 14:00:57 -07:00
Vicent Martí
5f94b77cd1 Merge pull request #174 from carlosmn/backend-static
odb backend_sort_cmp should be static
2011-05-08 13:59:47 -07:00
kelly.leahy
16a5c30465 Fix bug in the way pthead_mutex_t was being destroyed in win32.
Win32 critical section objects (CRITICAL_SECTION) are not kernel objects.
Only kernel objects are destroyed by using CloseHandle.  Critical sections
are supposed to be deleted with the DeleteCriticalSection API
(http://msdn.microsoft.com/en-us/library/ms682552(VS.85).aspx).
2011-05-08 12:32:35 -07:00
Carlos Martín Nieto
d8e1d038b3 Fix two warnings from Clang
Both are about not reading the value stored in a variable.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-05-06 12:47:21 +02:00
Carlos Martín Nieto
39e1032cfc odb backend_sort_cmp should be static
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
2011-05-06 12:43:37 +02:00
Carlos Martín Nieto
ca8d2dfc0c Merge remote-tracking branch 'upstream/development' into config 2011-05-05 16:22:06 +02:00
Carlos Martín Nieto
094aaaaee9 config: store the section name separately
The section and variable names use different rules, so store them as
two different variables internally.

This will simplify the configuration-writing code as well later on,
but even with parsing, the code is simpler.

Take this opportunity to add a variable to the list directly when
parsing instead of passing through config_set.
2011-05-05 16:18:11 +02:00
Jason R. McNeil
773bc20dd3 Fix misspelling of git_index_append2 (was git_index_apppend2). 2011-05-03 22:22:42 -07:00
Vicent Martí
cc3b82e376 Merge pull request #151 from carlosmn/root-commit.
Support root commits
2011-05-02 15:29:50 -07:00
Vicent Martí
fde97669ec Merge pull request #146 from nordsturm/fix_subtrees.
Fix tree-entry attribute convertion (fix corrupted trees)
2011-05-02 15:26:16 -07:00