Commit Graph

2268 Commits

Author SHA1 Message Date
Ben Straub
f2a855d5fe Clone: restructure. 2012-06-21 09:53:44 -07:00
Ben Straub
bb1f6087e4 Add progress reporting to clone. 2012-06-21 09:53:44 -07:00
Ben Straub
764df57e82 Add git_clone and git_clone_bare.
So far they only create a repo, setup the "origin"
remote, and fetch. The API probably needs work as
well; there's no way to get progress information
at this point.

Also uncovered a shortcoming; git_remote_download
doesn't fetch over local transport.
2012-06-21 09:53:44 -07:00
nulltoken
d4827081ea branch: drop git_branch_list() 2012-06-21 18:51:32 +02:00
nulltoken
a8fd805e2f branch: add git_branch_foreach() 2012-06-21 18:51:27 +02:00
liyuray
dfa0b65c69 fix below issues on mingw:
1. compile warning:

D:\libgit2.git\src\win32\posix_w32.c: In function 'p_open':
D:\libgit2.git\src\win32\posix_w32.c:235:10: warning: 'mode_t' is promoted to 'int' when passed through '...' [enabled by default]
D:\libgit2.git\src\win32\posix_w32.c:235:10: note: (so you should pass 'int' not 'mode_t' to 'va_arg')
D:\libgit2.git\src\win32\posix_w32.c:235:10: note: if this code is reached, the program will abort

2. test crash.

3. the above two issues are same root cause. please see http://www.eskimo.com/~scs/cclass/int/sx11c.html
2012-06-21 20:17:54 +08:00
Michael Schubert
f95121cb4f object: add missing git_odb_object_free 2012-06-21 10:33:24 +02:00
Michael Schubert
dca6b228d1 notes: fix memory leaks 2012-06-21 10:33:24 +02:00
Carlos Martín Nieto
b3aa440641 repository: avoid opening the repository twice on reinit
The call to repo_init_reinit already takes care of opening the
repository and giving us a git_repository object to give to the
caller. There is no need to call git_repository_open again.
2012-06-21 02:15:25 +02:00
Chris Young
b6423939d5 more getaddrinfo compatibility 2012-06-20 20:35:13 +01:00
Chris Young
8d18f1f723 getaddrinfo() replacement functions 2012-06-20 20:12:30 +01:00
Ben Straub
a15e7f8621 Fix indentation. 2012-06-19 21:12:04 -07:00
Ben Straub
eb6bc45f6d Avoid uninitialized variable error. 2012-06-19 21:11:48 -07:00
Carlos Martín Nieto
1d94a7d0f6 diff: make sure we free all allocated resources
When the creation of one iterator fails, we need to free the prefix
and possibly one of the iterators. Make sure we do so.
2012-06-20 02:22:07 +02:00
Carlos Martín Nieto
c06e000394 odb: don't leak when detecting id ambiguity
If we find several objects with the same prefix, we need to free the
memory where we stored the earlier object. Keep track of the raw.data
pointer across read_prefix calls and free it if we find another
object.
2012-06-20 01:41:30 +02:00
Carlos Martín Nieto
cdca82c784 Plug a few leaks 2012-06-20 00:46:34 +02:00
Vicent Martí
c3ce8d0c9a Merge pull request #775 from arrbee/fix-index-filemodes
Make index add/append support core.filemode flag
2012-06-19 15:17:35 -07:00
Vicent Martí
5232994072 Merge pull request #768 from nulltoken/topic/expose-message-prettify
message: Expose git_message_prettify()
2012-06-19 15:04:45 -07:00
Carlos Martín Nieto
053b509668 revparse: handle a non-existent path in the colon syntax
oid_for_tree_path may not always find the path in the tree, in which
case we need to return an error. The current code doesn't do this and
results in undefined behavior.
2012-06-19 23:47:17 +02:00
Russell Belfer
da825c92d9 Make index add/append support core.filemode flag
This fixes git_index_add and git_index_append to behave more like
core git, preserving old filemode data in the index when adding
and/or appending with core.filemode = false.

This also has placeholder support for core.symlinks and
core.ignorecase, but those flags are not implemented (well,
symlinks has partial support for preserving mode information in
the same way that git does, but it isn't tested).
2012-06-19 14:27:02 -07:00
Ben Straub
2c90145aad Fix potential segfault in revparse. 2012-06-19 09:25:55 -07:00
nulltoken
743a4b3bdd message: Expose git_message_prettify()
git_commit() and git_tag() no longer prettify the
message by default. This has to be taken care of
by the caller.

This has the nice side effect of putting the
caller in position to actually choose to strip
the comments or not.
2012-06-19 10:02:22 +02:00
Vicent Martí
68f527c448 Merge pull request #758 from libgit2/config-values-containing-quotes
Quotes inside config values don't survive serialization/deserialization
2012-06-18 17:50:12 -07:00
Vicent Marti
8c4c357f18 clar: Fix warnings 2012-06-19 02:43:36 +02:00
Vicent Martí
31eed56b9e Merge pull request #753 from nulltoken/topic/merge-base-many
Expose git_merge_base_many()
2012-06-18 17:36:14 -07:00
Vicent Marti
b93688d06d Merge remote-tracking branch 'yorah/fix/notes-creation' into development
Conflicts:
	src/notes.c
2012-06-19 02:33:03 +02:00
Vicent Marti
515a4c7c06 tree: Proper path comparison logic 2012-06-19 00:59:04 +02:00
Tim Clem
ac8eac2f66 Fix compile errors when building on windows
Errors were due to not including winsock2 early enough.
2012-06-15 11:25:52 -07:00
Tim Clem
e00b56eb04 Fix broken tests caused by no longer prettifying by default 2012-06-15 10:18:08 -07:00
Tim Clem
e4031cb531 Kill message_prettify - we will export instead 2012-06-15 09:26:56 -07:00
Tim Clem
bc2deed0fb Don't strip comments (#) from commit messages by default 2012-06-15 09:13:59 -07:00
Chris Young
d043013fea More changes resulting from pull request 2012-06-14 19:09:42 +01:00
Chris Young
a8df98c6fb Updates from comments on OS4 compatibility pull request http://github.com/libgit2/libgit2/pull/766 2012-06-14 18:57:24 +01:00
Chris Young
a21bb1aa33 Merge remote-tracking branch 'source/development' into development 2012-06-13 23:28:51 +01:00
Chris Young
96ef3d8462 Make this more generic and mergeable.
Needs AmigaOS.cmake now from CMake package at OS4Depot, or contents below:
--8<--
SET(AMIGA 1)
SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC")
SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")
--8<--
2012-06-13 23:16:14 +01:00
Ben Straub
73aaf67439 Precompile headers for MSVC. 2012-06-13 14:28:47 -07:00
Carlos Martín Nieto
49938cad91 config: correctly escape quotes in the value
When a configuration option is set, we didn't check to see whether
there was any escaping needed. Escape the available characters so we
can unescape them correctly when we read them.
2012-06-13 23:26:00 +02:00
Frederick Ros
fa45d25f38 Fix issue #763 2012-06-13 17:35:13 +02:00
Chris Young
2aeadb9c78 Actually do the mmap... unsurprisingly, this makes the indexer work on SFS
On RAM: the .idx and .pack files become links to a .lock and the original download respectively.
Assume some feature (such as record locking) supported by SFS but not JXFS or RAM: is required.
2012-06-12 19:25:09 +01:00
Russell Belfer
64e56478ad Merge pull request #760 from nulltoken/topic/logAllRefUpdates
make git_repository_init() value the core.logallrefupdates config entry
2012-06-12 09:29:56 -07:00
Michael Schubert
c073459371 revparse: remove unnecessary GIT_BEGIN_DECL 2012-06-12 11:34:01 +02:00
nulltoken
7623b1b63f repository: make git_repository_init() value the core.logallrefupdates config entry 2012-06-12 06:42:46 +02:00
Russell Belfer
471fa05eb7 Fix fragile commit parsing in revwalk 2012-06-11 15:53:47 -07:00
Ben Straub
0284a21983 Fix mingw32 (Travis) build. 2012-06-11 12:55:36 -07:00
Russell Belfer
9939e602d8 Ignores allow unescapes internal whitespace 2012-06-11 09:24:02 -07:00
Chris Young
90490113af Basic mmap/munmap compatiblity 2012-06-10 18:08:15 +01:00
Chris Young
7d1983ebc2 stop readdir parsing crashing 2012-06-09 18:58:11 +01:00
Chris Young
327fb51cec Fix gethostbyname compatibility 2012-06-09 18:13:07 +01:00
Chris Young
b9bfc7684b pre-compiled sha1ppc.S.obj file with nasty CMake hack instructions as the cross-compile process refuses to build and link this file itself. 2012-06-09 17:33:08 +01:00
Russell Belfer
ac971ecfdb Better fix for isalpha in drive letter detection
Missed a place that used this and missed git__isalpha
2012-06-08 14:08:34 -07:00
Russell Belfer
d17db71b6f isalpha is not great for UTF-8
When checking for a drive letter on windows, instead of using
isalpha(), it is better to just check for a..z and A..Z, I think,
particularly because the MS isalpha implementation appears to
assert when given an 0xFF byte.
2012-06-08 13:56:53 -07:00
Russell Belfer
145e696b49 Minor fixes, cleanups, and clarifications
There are three actual changes in this commit:

1. When the trailing newline of a file is removed in a diff, the
   change will now be reported with `GIT_DIFF_LINE_DEL_EOFNL` passed
   to the callback.  Previously, the `ADD_EOFNL` constant was given
   which was just an error in my understanding of when the various
   circumstances arose.  `GIT_DIFF_LINE_ADD_EOFNL` is deprecated and
   should never be generated.  A new newline is simply an `ADD`.
2. Rewrote the `diff_delta__merge_like_cgit` function that contains
   the core logic of the `git_diff_merge` implementation.  The new
   version doesn't actually have significantly different behavior,
   but the logic should be much more obvious, I think.
3. Fixed a bug in `git_diff_merge` where it freed a string pool
   while some of the string data was still in use.  This led to
   `git_diff_print_patch` accessing memory that had been freed.

The rest of this commit contains improved documentation in `diff.h`
to make the behavior and the equivalencies with core git clearer,
and a bunch of new tests to cover the various cases, oh and a minor
simplification of `examples/diff.c`.
2012-06-08 12:11:13 -07:00
Russell Belfer
0abd724454 Fix filemode comparison in diffs
File modes were both not being ignored properly on platforms
where they should be ignored, nor be diffed consistently on
platforms where they are supported.

This change adds a number of diff and status filemode change
tests.  This also makes sure that filemode-only changes are
included in the diff output when they occur and that filemode
changes are ignored successfully when core.filemode is false.

There is no code that automatically toggles core.filemode
based on the capabilities of the current platform, so the user
still needs to be careful in their .git/config file.
2012-06-08 12:09:10 -07:00
yorah
a02e724978 notes: simplify the handling of fanouts
- Do not create new levels of fanout when creating notes from libgit2
 - Insert a note in an existing matching fanout
 - Remove a note from an existing fanout
 - Cleanup git_note_read, git_note_remove, git_note_foreach, git_note_create methods in order use tree structures instead of tree_oids
2012-06-08 20:34:24 +02:00
nulltoken
b0b3b4e39e treebuilder: prevent git_treebuilder_free() from segfaulting when being passed a NULL treebuilder 2012-06-08 20:34:13 +02:00
Chris Young
aa5a92d121 OS4 compatibility 2012-06-08 18:57:35 +01:00
Vicent Martí
3f0358604e misc: Fix warnings from PVS Studio trial 2012-06-07 22:43:48 +02:00
Chris Young
6b5db63c15 random page size for os4 2012-06-07 21:40:07 +01:00
Chris Young
c41fc47512 horrid gethostbyname compatibility 2012-06-07 21:26:39 +01:00
Ben Straub
763b838152 Fixing rev-parse-induced Travis errors. 2012-06-07 13:22:50 -07:00
Chris Young
2774ccb851 no fnmatch.h 2012-06-07 20:40:34 +01:00
Vicent Martí
6c08e69fd9 Merge pull request #669 from nulltoken/topic/reset
Add git_reset()
2012-06-07 12:30:20 -07:00
Vicent Martí
b9ebcc59e7 Merge pull request #684 from benstraub/rev-parse
Rev parse
2012-06-07 12:29:31 -07:00
Chris Young
c3f35902f3 Merge remote-tracking branch 'source/development' into update-test
Merging main libgit2!
Conflicts:
	CMakeLists.txt
	src/unix/map.c
2012-06-07 20:29:22 +01:00
Ben Straub
327dc61f13 Prefer git__free (again). 2012-06-07 12:28:08 -07:00
nulltoken
edebceffef Add git_reset()
Currently supports Soft and Mixed modes.
2012-06-07 21:27:30 +02:00
Ben Straub
31dda64716 Rename internal function. 2012-06-07 12:16:39 -07:00
Vicent Martí
cddb8efe56 Merge pull request #704 from nulltoken/topic/blob_fromchunks
Add the ability to create blob given a provider of chunks of bytes
2012-06-07 11:34:48 -07:00
nulltoken
cd44576790 blob: add git_blob_create_fromchunks() 2012-06-07 20:33:22 +02:00
Vicent Martí
5bb545822d Merge pull request #752 from nulltoken/fix/warning
Fix compilation warning and failing test
2012-06-07 09:44:08 -07:00
nulltoken
b46bdb2204 merge: Expose git_merge_base_many() 2012-06-07 16:25:37 +02:00
Adam Roben
8e60c712ac Fix git_status_file for files that start with a character > 0x7f
git_status_file would always return GIT_ENOTFOUND for these files.

The underlying bug was that git__strcmp_cb, which is used by
git_path_with_stat_cmp to sort entries in the working directory,
compares strings based on unsigned chars (this is confirmed by the
strcmp(3) manpage), while git__prefixcmp, which is used by
workdir_iterator__entry_cmp to search for a path in the working
directory, compares strings based on char. So the sort puts this path at
the end of the list, while the search expects it to be at the beginning.

The fix was simply to make git__prefixcmp compare using unsigned chars,
just like strcmp(3). The rest of the change is just adding/updating
tests.
2012-06-07 09:50:19 -04:00
nulltoken
6f944ab196 Fix compilation warning 2012-06-07 13:36:28 +02:00
Ben Straub
9ecf860d48 Rename posix wrappers with 'p_' prefix. 2012-06-06 13:24:25 -07:00
Ben Straub
1a728066c3 Remove 'git__' prefix from a static function. 2012-06-06 13:04:08 -07:00
Ben Straub
d6391a626f Rev-parse: stop referencing freed memory.
Converted an internal utility to return an oid, 
rather than a tree entry (whose lifetime is tied
to the parent tree, which was freed before 
returning).
2012-06-06 13:00:12 -07:00
Ben Straub
19d35d528c Prefer git__free() to free(). 2012-06-06 12:31:48 -07:00
Ben Straub
8a385c0482 Move git__date_parse declaration to util.h. 2012-06-06 12:25:22 -07:00
Ben Straub
2c2cde47b8 Fix signatures for tree calls. 2012-06-06 08:41:39 -07:00
Carlos Martín Nieto
66798ad0d8 Don't include arpa/inet.h on Windows 2012-06-06 11:00:15 +02:00
Michael Schubert
fdc5c38e40 transports: fix buglet 2012-06-05 23:03:06 +02:00
Vicent Martí
966fbdcb8e Merge pull request #697 from carlosmn/ssl
Add HTTPS support
2012-06-05 13:53:33 -07:00
Vicent Martí
eadc0e03f1 Merge pull request #747 from nulltoken/topic/init-filemode
Make git_repository_init() value "core.filemode" and "core.ignorecase"
2012-06-05 13:41:13 -07:00
nulltoken
693b23c09a repository: make git_repository_init() value the core.ignorecase config entry 2012-06-05 22:33:34 +02:00
Vicent Martí
2255b60e28 Merge pull request #714 from schu/config-enotfound
config: do not set an error for GIT_ENOTFOUND
2012-06-05 13:12:36 -07:00
Ben Straub
56a5000d58 Merge branch 'development' into rev-parse
Conflicts:
	src/util.h
	tests-clar/refs/branches/listall.c
2012-06-05 12:52:44 -07:00
nulltoken
fac66990b6 repository: make git_repository_init() value the core.filemode config entry 2012-06-05 14:01:44 +02:00
Chris Young
82c23c5870 Assume this is irrelevant for now 2012-06-05 12:06:40 +01:00
Carlos Martín Nieto
01dbe273c9 Merge pull request #737 from nulltoken/topic/git_remote_add_refspec
Remotes and refspecs
2012-06-04 15:10:29 -07:00
nulltoken
d27bf66561 remote: Make git_remote_add() generate a default refspec with a force update specifier 2012-06-04 23:47:09 +02:00
Arthur Schreiber
e9551e86b9 Fix git_close/http_close/local_close to set the transport's connected attribute to 0. 2012-06-02 16:52:22 +02:00
Ben Straub
734efe4b8e Rev-parse: implement ":/foo" syntax. 2012-06-01 14:18:52 -07:00
Carlos Martín Nieto
1d4dcc4b48 config: set an error message when asked to delete a non-existent key 2012-06-01 11:48:58 +02:00
Ben Straub
b183a92fc2 Rev-parse: Plug memory leaks. 2012-05-31 13:42:58 -07:00
Ben Straub
244d2f6b80 Rev-parse: add "tag:README" syntax. 2012-05-30 16:52:11 -07:00
Ben Straub
dd9e4abc1b Approxidate: use libgit2 naming/calling conventions.
Also use git_time_t (64-bit integer) for time
values, although the 2038 problem is still present
on 32-bit machines.
2012-05-30 11:46:42 -07:00
nulltoken
d05e2c64dd refspec: expose the force update specifier through git_refspec_force() accessor 2012-05-30 01:05:17 +02:00
Garrett Regier
2ab9dcbd62 Fix checking for the presence of a flag 2012-05-27 16:52:37 -07:00
nulltoken
9bea8e8590 filebuf: add git_filebuf_flush() 2012-05-27 19:54:53 +02:00
Scott J. Goldman
c1318f7125 Use lowercase names for Windows headers
Otherwise we can't cross-compile on Linux.
2012-05-26 18:16:13 -07:00
Carlos Martín Nieto
250b95b24b ssl: allow skipping the server certificate check
Sometimes it's useful not to perform the check. Allow it to be
configurable.
2012-05-26 21:17:08 +02:00
Russell Belfer
29ef309e2c Make errors for system and global files consistent
The error codes from failed lookups of system and global files
on Windows were not consistent with the codes returned on other
platforms.  This makes the error detection patterns match and
adds a unit test for the various errors.
2012-05-25 09:44:56 -07:00
Russell Belfer
2a99df6909 Fix bugs for status with spaces and reloaded attrs
This fixes two bugs:

* Issue #728 where git_status_file was not working for files
  that contain spaces.  This was caused by reusing the "fnmatch"
  parsing code from ignore and attribute files to interpret the
  "pathspec" that constrained the files to apply the status to.
  In that code, unescaped whitespace was considered terminal to
  the pattern, so a file with internal whitespace was excluded
  from the matched files.  The fix was to add a mode to that code
  that allows spaces and tabs inside patterns.  This mode only
  comes into play when parsing in-memory strings.

* The other issue was undetected, but it was in the recently
  added code to reload gitattributes / gitignores when they were
  changed on disk.  That code was not clearing out the old values
  from the cached file content before reparsing which meant that
  newly added patterns would be read in, but deleted patterns
  would not be removed.  The fix was to clear the vector of
  patterns in a cached file before reparsing the file.
2012-05-24 17:14:56 -07:00
Russell Belfer
9cde607c95 Clean up system file finding tests on Win32 2012-05-24 15:08:55 -07:00
Vicent Martí
349fb6d7ac windows: Properly expand all environment variables 2012-05-24 23:10:12 +02:00
Russell Belfer
5f60fd0098 Merge pull request #726 from arrbee/utf16-home-dir
Get user's home dir in UTF-16 clean manner
2012-05-24 13:56:03 -07:00
Russell Belfer
9e35d7fd6e Fix bugs in UTF-8 <-> UTF-16 conversion
The function to convert UTF-16 to UTF-8 was only allocating a
buffer of wcslen(utf16str) bytes for the UTF-8 string, but that
is not sufficient if you have multibyte characters, and so when
those occured, the conversion was failing.  This updates the
conversion functions to use the Win APIs to calculate the correct
buffer lengths.

Also fixes a comparison in the unit tests that would fail if
you did not have a particular environment variable set.
2012-05-24 13:44:24 -07:00
Carlos Martín Nieto
d3e9c4a5fc repository: default to core.bare = false if it's not set
We used to consider a missing core.bare option to mean that the
repository was corrupt. This is too strict. Consider it a non-bare
repository if it's not set.
2012-05-24 21:54:19 +02:00
Russell Belfer
2305913007 Get user's home dir in UTF-16 clean manner
On Windows, we are having problems with home directories
that have non-ascii characters in them.  This rewrites the
relevant code to fetch environment variables as UTF-16 and
then explicitly map then into UTF-8 for our internal usage.
2012-05-24 12:45:20 -07:00
Vicent Martí
87ac556f2f Merge pull request #720 from nulltoken/fix/libgit2sharp_issue_153
Make git_futils_mkdir_r() able to cope with Windows network paths
2012-05-23 15:05:03 -07:00
Carlos Martín Nieto
8bf10dbab2 Remove left-over debugging output 2012-05-23 12:59:21 +02:00
nulltoken
dc07184fa9 fileops: Make git_futils_mkdir_r() able to cope with Windows network paths
Partially fix libgit2/libgit2sharp#153
2012-05-23 12:57:13 +02:00
Michael Schubert
e203e9d472 config: do not set an error for GIT_ENOTFOUND
An unset config variable isn't bad per se -- let the call site set an
error in case GIT_ENOTFOUND isn't acceptable.
2012-05-19 18:57:13 +02:00
Michael Schubert
54db1a18df Cleanup
* indexer: remove leftover printf

* commit: remove unused macros COMMIT_BASIC_PARSE, COMMIT_FULL_PARSE
  and COMMIT_PRINT
2012-05-19 18:49:32 +02:00
Carlos Martín Nieto
441df990b4 ssl: look up the last CN the alternative names don't match 2012-05-19 17:51:53 +02:00
Carlos Martín Nieto
3f9eb1e502 ssl: add support for certificates issues to an IP address 2012-05-19 17:51:53 +02:00
Carlos Martín Nieto
d3e1367f61 ssl: remove GnuTLS support
It's too much work for now to redo everything.

Move the ssl context struct to transport.h
2012-05-19 17:51:53 +02:00
Carlos Martín Nieto
16768191c7 ssl: match host names according to RFC 2818 (HTTP over TLS) 2012-05-19 17:51:53 +02:00
Carlos Martín Nieto
dbb36e1b42 ssl: check certificates against the system's trusted CAs 2012-05-19 17:51:53 +02:00
Carlos Martín Nieto
89460f3f57 ssl: teardown the connection on close
This should help us free some resources, though the libraries do keep
some buffers allocated regardless.
2012-05-19 17:50:52 +02:00
Carlos Martín Nieto
a6f24a5b3a https: make it work with OpenSSL as well
Add specific functions that use OpenSSL instead of GnuTLS
2012-05-19 17:50:52 +02:00
Carlos Martín Nieto
66024c7cbc http: add https support when GnuTLS is available
If it's not available, an error saying so will be returned when trying
to use a https:// URL.

This also unifies a lot of the network code to use git_transport in
many places instead of an socket descriptor.
2012-05-19 17:50:52 +02:00
Vicent Martí
59d91979d8 Merge pull request #710 from libgit2/breaking-changes
Break everything before the release
2012-05-18 13:53:38 -07:00
Michael Schubert
a167002f9e fetch: set dummy function for local fetch
Local fetch isn't implemented yet. Don't segfault on call, but set a
dummy for negotiate_fetch and terminate gracefully.

Reported-by: Brad Harder <bch@methodlogic.net>
2012-05-18 12:44:01 +02:00
Vicent Martí
6ec01e6361 Merge pull request #685 from nulltoken/fix/list-remote-branches
branch: retrieve symbolic references when listing the branches
2012-05-17 16:51:17 -07:00
Vicent Martí
904b67e69f errors: Rename error codes 2012-05-18 01:48:50 +02:00
Vicent Martí
e172cf082e errors: Rename the generic return codes 2012-05-18 01:26:26 +02:00
Vicent Martí
2e2e97858d Properly tag all enums with a _t 2012-05-18 01:26:23 +02:00
Vicent Martí
4fbd1c007e refs: git_reference_listall -> git_reference_list 2012-05-18 01:26:16 +02:00
Vicent Martí
29e948debe global: Change parameter ordering in API
Consistency is good.
2012-05-18 01:25:57 +02:00
nulltoken
392eced6f0 branch: retrieve symbolic references when listing the branches 2012-05-18 00:26:04 +02:00
Vicent Martí
52695898e5 Merge pull request #709 from arrbee/profiling-with-scottg
Profiling with scottg
2012-05-17 14:46:44 -07:00
Russell Belfer
e3557172af No point in keeping commented out fn 2012-05-17 14:44:17 -07:00
Russell Belfer
6e5c4af00e Fix workdir iterators on empty directories
Creating a workdir iterator on a directory with absolutely
no files was returning an error (GIT_ENOTFOUND) instead of
an iterator for nothing.  This fixes that and includes two
new tests that cover that case.
2012-05-17 14:21:10 -07:00
Russell Belfer
a0d959628f Other optimization and warning fixes
This fixes a warning left by the earlier optimization and
addresses one of the other hotspots identified by GProf.
2012-05-17 13:14:17 -07:00
Russell Belfer
b59c73d39a Optimize away git_text_gather_stats in diff
GProf shows `git_text_gather_stats` as the most expensive call
in large diffs.  The function calculates a lot of information
that is not actually used and does not do so in a optimal
order.  This introduces a tuned `git_buf_is_binary` function
that executes the same algorithm in a fraction of the time.
2012-05-17 13:06:20 -07:00
Russell Belfer
bd4ca902b5 Fix status for files under ignored dirs
There was a bug where tracked files inside directories that were
inside ignored directories where not being found by status.  To
make that a little clearer, if you have a .gitignore with:

    ignore/

And then have the following files:

    ignore/dir/tracked     <-- actually a tracked file
    ignore/dir/untracked   <-- should be ignored

Then we would show the tracked file as being removed (because
when we got the to contained item "dir/" inside the ignored
directory, we decided it was safe to skip -- bzzt, wrong!).

This update is much more careful about checking that we are
not skipping over any prefix of a tracked item, regardless of
whether it is ignored or not.

As documented in diff.c, this commit does create behavior that
still differs from core git with regards to the handling of
untracked files contained inside ignored directories.  With
libgit2, those files will just not show up in status or diff.
With core git, those files don't show up in status or diff
either *unless* they are explicitly ignored by a .gitignore
pattern in which case they show up as ignored files.

Needless to say, this is a local behavior difference only, so
it should not be important and (to me) the libgit2 behavior
seems more consistent.
2012-05-16 17:08:59 -07:00
nulltoken
ee7680d53b notes: make git_note_foreach() callback signature easier to cope with from a binding perspective 2012-05-16 21:51:45 +02:00
Vicent Martí
9d0011fd83 tree: Naming conventions 2012-05-16 19:24:35 +02:00
Vicent Martí
cedf9ca955 tree: Kill the git_tree_diff functions
These are deprecated and replaced with the diffing code in git2/diff.h
2012-05-16 19:24:35 +02:00
Vicent Martí
9bd5a99fea Merge pull request #700 from cholin/revwalk_reset
really reset walker with git_revwalk_reset
2012-05-16 10:22:49 -07:00
Vicent Martí
c261c272af Merge pull request #702 from arrbee/fix-status-file
Update git_status_file and add ranged iterators
2012-05-16 09:57:45 -07:00
Russell Belfer
2c83391728 Document git_buf_common_prefix
This function fills in a git_buf with the common prefix of
an array of strings, but let's make that a little more clear.
2012-05-15 16:33:05 -07:00
Carlos Martín Nieto
6a9d61ef50 indexer: add more consistency checks
Error out in finalize if there is junk after the packfile hash or we
couldn't process all the objects.
2012-05-16 01:22:25 +02:00
Ben Straub
1ce4cc0164 Fix date.c build in msvc.
Ported the win32 implementations of gmtime_r,
localtime_r, and gettimeofday to be part of the 
posix compatibility layer, and fixed
git_signature_now to use them.
2012-05-15 15:41:05 -07:00
Russell Belfer
58ffeb9cde Fix notes to use new fixed iterator signature 2012-05-15 14:51:30 -07:00
Russell Belfer
41a82592ef Ranged iterators and rewritten git_status_file
The goal of this work is to rewrite git_status_file to use the
same underlying code as git_status_foreach.

This is done in 3 phases:

1. Extend iterators to allow ranged iteration with start and
   end prefixes for the range of file names to be covered.
2. Improve diff so that when there is a pathspec and there is
   a common non-wildcard prefix of the pathspec, it will use
   ranged iterators to minimize excess iteration.
3. Rewrite git_status_file to call git_status_foreach_ext
   with a pathspec that covers just the one file being checked.

Since ranged iterators underlie the status & diff implementation,
this is actually fairly efficient.  The workdir iterator does
end up loading the contents of all the directories down to the
single file, which should ideally be avoided, but it is pretty
good.
2012-05-15 14:34:15 -07:00
Carlos Martín Nieto
73d87a091c Introduce GITERR_INDEXER 2012-05-15 21:42:20 +02:00
Nico von Geyso
0b86fdf96e really reset walker with git_revwalk_reset
From the description  of git_revwalk_reset in revwalk.h the function should
clear all pushed and hidden commits, and leave the walker in a blank state (just like at creation).
Apparently everything gets reseted appart of pushed commits (walk->one and walk->twos)

This fix should reset the walker properly.
2012-05-15 17:09:34 +02:00
nulltoken
d5ed6348c7 Fix compilation warnings 2012-05-14 22:24:58 +02:00
nulltoken
86ecd84427 notes: add git_notes_foreach() 2012-05-14 22:07:42 +02:00
Vicent Martí
8c6329eec9 Merge pull request #692 from nulltoken/fix/delete-branch_ENOTFOUND
branch: make git_branch_delete() return GIT_ENOTFOUND when the branch doesn't exist
2012-05-14 11:25:40 -07:00
Vicent Martí
c9e9ec97d2 Merge pull request #688 from hanwen/master
See issue https://github.com/libgit2/libgit2/issues/680
2012-05-14 11:24:37 -07:00
Vicent Martí
e49cb1687e Merge pull request #671 from nulltoken/topic/blob_create_fromdisk
Add git_blob_create_fromdisk()
2012-05-14 11:03:30 -07:00
Vicent Martí
72bfde9790 Merge pull request #681 from scottjg/solaris-fixes
Fix build/runtime issues on Solaris
2012-05-14 11:01:14 -07:00
Vicent Martí
27f5b7cfed Merge pull request #682 from arrbee/attribute-cache-buster
Attribute cache buster
2012-05-14 10:58:23 -07:00
nulltoken
87fe3507bb iterator: prevent git_iterator_free() from segfaulting when being passed a NULL iterator 2012-05-13 19:09:57 +02:00
nulltoken
6ca9643c96 blob: Add git_blob_create_fromdisk()
This function will create blobs in the object database from files anywhere on the filesystem. This can be run against bare and non-bare repositories.
2012-05-13 11:28:49 +02:00
nulltoken
341a7136f6 branch: make git_branch_delete() return GIT_ENOTFOUND when the branch doesn't exist 2012-05-13 10:30:13 +02:00
Han-Wen Nienhuys
24634c6fd0 Handle duplicate objects from different backends in git_odb_read_prefix(). 2012-05-12 15:50:19 -03:00
Scott J. Goldman
6fb1c0b489 Fix readdir_r() usage for Solaris
On Solaris, struct dirent is defined differently than Linux. The field
containing the path name is of size 0, rather than NAME_MAX. So, we need to
use a properly sized buffer on Solaris to avoid a stack overflow.

Also fix some DIR* leaks on cleanup.
2012-05-12 09:51:32 -07:00
Vicent Martí
b72969e064 Merge pull request #683 from arrbee/better-repo-init
Improve repo initialization to be more like git
2012-05-12 01:51:58 -07:00
nulltoken
e28c37761b object: make git_object_lookup() return GIT_ENOTFOUND when searching for an existing object by specifying an incorrect type
This fix complements cb0ce16bbe and cover the following additional use cases

 - retrieving an object which has been previously searched, found and cached
 - retrieving an object through an non ambiguous abbreviated id
2012-05-11 23:56:23 +02:00
Russell Belfer
db62807215 Fixed leaks and added tests 2012-05-11 12:16:19 -07:00
Ben Straub
72b86bae50 Rev-parse: better error handling for chaining.
Fixed an error where "nonexistant^N" or similar
would fall into an assert. This now properly returns
an error.
2012-05-11 11:58:02 -07:00
Ben Straub
94952ded3a Rev-parse: proper error checking. 2012-05-11 11:35:50 -07:00
Ben Straub
7e79d389a4 Rev-parse: regex check for "git describe" output. 2012-05-11 11:35:50 -07:00
Ben Straub
b41384b473 Plugging memory leak. 2012-05-11 11:35:50 -07:00
Ben Straub
c8a33547a0 Rev-parse: now capturing and reporting regex errors. 2012-05-11 11:35:50 -07:00
Ben Straub
2b35c45f1b Rev-parse: now @{-N} syntax searches in the right direction! 2012-05-11 11:35:50 -07:00
Ben Straub
46c2ead05d Now properly handling branches with "-g" in their names. 2012-05-11 11:35:50 -07:00
Ben Straub
ec6a632a1b Simplifying revparse_lookup_fully_qualified_ref. 2012-05-11 11:35:50 -07:00
Ben Straub
a346992f7e Rev-parse: @{time} syntax.
Ported date.c (for approxidate_careful) from git.git
revision aa39b85. Trimmed out the parts we're not
using.
2012-05-11 11:35:50 -07:00
Ben Straub
886f183ac3 Rev-parse: "ref^{/regex}" syntax. 2012-05-11 11:31:30 -07:00
Ben Straub
bae780e084 Rev-parse: fixing double-freeing. Thanks, Visual Studio! 2012-05-11 11:31:30 -07:00
Ben Straub
a6346302e6 Rev-parse: "ref@{upstream}" syntax.
Added tracking configuration to the test repo's
config to support unit tests.
2012-05-11 11:30:47 -07:00
Ben Straub
65bc26d54a Fixed last 2 memory leaks in rev-parse. 2012-05-11 11:30:46 -07:00
Ben Straub
27ee848397 Rev-parse: plugging (most) memory leaks. 2012-05-11 11:30:46 -07:00
Ben Straub
e88b8bd593 Incorporating feedback from @tanoku.
Removed repeated strlen's, and unnecessary loop-termination variable.
2012-05-11 11:30:46 -07:00
Ben Straub
a51bdbcfa1 Implementing rev-parse's ref@{n} and @{-n} syntaxes.
Added some reflags to the test repo to support
unit tests.
2012-05-11 11:30:46 -07:00
Ben Straub
38533d5acf Implementing rev-parse's "ref~2" syntax.
Also extended the test suite to include chaining
operators, e.g. "master^2~3^4".
2012-05-11 11:30:46 -07:00
Ben Straub
e0887d8178 Removed goto from state machine loop. 2012-05-11 11:30:46 -07:00
Ben Straub
7149a6252c Returning error if dereferencing operation fails. 2012-05-11 11:30:46 -07:00
Ben Straub
387d01b857 Implemented rev-parse "^{type}" syntax. 2012-05-11 11:30:45 -07:00
Ben Straub
9d7bdf7119 Implemented rev-parse's "^{}" syntax. 2012-05-11 11:30:45 -07:00
Ben Straub
f597ea8978 Implemented partial caret syntax for rev-parse.
Supported forms:
- "^n"
- "^0"
- "^"

Still missing: all of the "^{…}" variants.
2012-05-11 11:30:45 -07:00
Ben Straub
023c6f69ed Simpler states and initial structure.
New tests for "foo^2" syntax, but they don't pass
yet. Support for chaining these, i.e.
"foo^2~3^{u}~1' is starting to shape up.
2012-05-11 11:30:45 -07:00
Ben Straub
ac250c56c7 First stab at implementation of rev-parse.
This version supports refspecs of these kinds:
- Full & partial SHAs
- Output from "git describe"
- "/refs/heads/master" (full ref names)
- "master" (partial ref names)
- "FETCH_HEAD" (named heads)
2012-05-11 11:30:45 -07:00
Scott J. Goldman
54bdc64a92 Fix rmdir() usage on Solaris
On Solaris, rmdir() throws EEXIST if the folder is not empty, so just add
one more case to check for that, alongside ENOTEMPTY.
2012-05-10 17:13:06 -07:00
Russell Belfer
dc13f1f7d7 Add cache busting to attribute cache
This makes the git attributes and git ignores cache check
stat information before using the file contents from the
cache.  For cached files from the index, it checks the SHA
of the file instead.  This should reduce the need to ever
call `git_attr_cache_flush()` in most situations.

This commit also fixes the `git_status_should_ignore` API
to use the libgit2 standard parameter ordering.
2012-05-10 11:12:43 -07:00
Scott J. Goldman
ec42eafd4a Hook up Windows compat fnmatch() for Solaris
Since Solaris does not support some of the same flags as glibc fnmatch(),
we just use the implementation we have for Windows.

Now that it's no longer a windows-specific thing, I moved it into compat/
instead of win32/
2012-05-10 09:52:49 -07:00
Russell Belfer
dc34da6e81 Improve repo initialization to be more like git
This adds a bunch of template files to the initialization for
hooks, info/exclude, and description.  This makes our initialized
repo look more like core gits.
2012-05-09 10:58:42 -07:00
Russell Belfer
2aa1e94d30 Fix 64-bit build warning 2012-05-09 10:30:34 -07:00
Russell Belfer
075d6e7dd7 Merge pull request #679 from nulltoken/fix/git__isspace
util: Fix git__isspace() implementation
2012-05-09 10:18:54 -07:00
Carlos Martín Nieto
11678b3718 fetch: filter tag annotation pseudo-refs while generating wants
These objects aren't considered as being advertised, so asking for
them will cause the remote end to close the connection. This makes the
checking in update_tips() unnecessary, because they don't get inserted
in the list.
2012-05-09 16:18:13 +02:00
Carlos Martín Nieto
0536afcaa9 remote: don't try to create tag annotations as refs/tags/v0.1.0^{}
Skip them for now. Eventually we might want to filter these out
earler.
2012-05-09 14:10:30 +02:00
nulltoken
9cd25d0003 util: Fix git__isspace() implementation
The characters <space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab> are part of the "space" definition.

cf. http://www.kernel.org/doc/man-pages/online/pages/man5/locale.5.html
2012-05-09 13:21:21 +02:00
Carlos Martín Nieto
a640d79e84 indexer: close the pack's fd before renaming it
Windows gets upset if we rename a file with an open descriptor.
2012-05-09 13:11:50 +02:00
Vicent Martí
0f49200c9a msvc: Do not use isspace
Locale-aware bullshit bitting my ass again yo
2012-05-09 04:37:02 +02:00
Vicent Martí
e65752bb32 Merge pull request #677 from arrbee/status-without-head
Add support for diffing index with no HEAD
2012-05-08 16:06:27 -07:00
Russell Belfer
7e000ab2ec Add support for diffing index with no HEAD
When a repo is first created, there is no HEAD yet and attempting
to diff files in the index was showing nothing because a tree
iterator could not be constructed.  This adds an "empty" iterator
and falls back on that when the head cannot be looked up.
2012-05-08 15:03:59 -07:00
Vicent Martí
fd5faae346 message: Cleanup 2012-05-08 23:55:37 +02:00
Vicent Martí
b1e2ba275a message: Proper OOM handling 2012-05-08 23:43:52 +02:00
Vicent Martí
c99bdacf71 Merge pull request #670 from nulltoken/ntk/topic/clean-commit_message
Clean commit and tag messages
2012-05-08 14:13:43 -07:00
Russell Belfer
364f51bdca Merge pull request #668 from nulltoken/topic/binary-blobs
Enhancing the blob diffing experience
2012-05-08 13:56:21 -07:00
Vicent Martí
1f796cd180 Merge pull request #676 from carlosmn/remotes
Add git_remote_add() and change signature for _new()
2012-05-08 13:42:11 -07:00
Russell Belfer
19579847f6 Clean up warnings and tests 2012-05-08 13:23:00 -07:00
Carlos Martín Nieto
baaa8a447e remotes: change git_remote_new's signature
Add a fetch refspec arguemnt and make the arguments (name, url,
refspec), as that order makes more sense.
2012-05-08 21:36:40 +02:00
Carlos Martín Nieto
a209a025c6 remote: add git_remote_add()
Helper function to create a remote with the default settings
2012-05-08 21:36:40 +02:00
Carlos Martín Nieto
3df9cc5922 config: don't use freed memory on error
Change the order and set a NULL so we don't try to access freed memory
in case of an error.
2012-05-08 21:35:51 +02:00
Russell Belfer
2c0cdc3a86 Merge pull request #674 from nulltoken/topic/GIT_ENOTFOUND
Improve the interop with bindings
2012-05-08 10:40:01 -07:00
Carlos Martín Nieto
65ca81a63e Minor error fixes
Clear the error in pkt when we notice that the remote is starting to
send the packfile.

Fix the format string for Windows networking errors.
2012-05-08 14:28:21 +02:00
nulltoken
722c08afec status: Prevent git_status_file() from returning ENOTFOUND when not applicable 2012-05-08 10:05:27 +02:00
nulltoken
464cf248fd repository: ensure git_repository_discover() returns ENOTFOUND when unable to find a repository given the constraints 2012-05-08 10:05:24 +02:00
nulltoken
9abb5bca5d compat: make p_realpath Windows implementation be a bit more POSIX compliant and fail if the provided path does not lead to an existing entry 2012-05-08 10:05:18 +02:00
nulltoken
46811561ae path: Make git_path_prettify() properly handle ENOTDIR errno value 2012-05-08 10:05:16 +02:00
nulltoken
cb0ce16bbe object: make git_object_lookup() return GIT_ENOTFOUND when searching for an existing object by specifying an incorrect type 2012-05-08 10:05:14 +02:00
nulltoken
9fb70f378a remote: make git_remote_load() return GIT_ENOTFOUND when the remote url cannot be retrieved from the config file 2012-05-08 10:05:12 +02:00
nulltoken
2fb9d6de95 remote: ensure the allocated remote is freed when an error occurs during its loading 2012-05-08 10:05:09 +02:00
Vicent Martí
8d89c8e972 Merge pull request #672 from scottjg/more-mingw32-fixes
More mingw32 compilation fixes.
2012-05-07 13:36:02 -07:00
Russell Belfer
cba285d32f Fix directory finding for attrs
The fix to support attrs on bare repos went a little too far
in trying to avoid using the working directory and ended up
not processing the input path quite correctly.
2012-05-07 13:32:30 -07:00
nulltoken
3191ae89c6 compat: make p_open able to accept optional mode when passing the O_CREAT flag
This has the nice side effect of making test_attr_repo__staging_properly_normalizes_line_endings_according_to_gitattributes_directives() test pass again on Windows. This test started to fail after commit 674a198 was applied.
2012-05-07 12:18:54 +02:00
nulltoken
9a29f8d56c diff: fix the diffing of two identical blobs 2012-05-07 12:18:33 +02:00
nulltoken
28ef7f9b28 diff: make git_diff_blobs() able to detect binary blobs 2012-05-07 12:18:32 +02:00
nulltoken
4f80676182 diff: fix the diffing of a concrete blob against a null one 2012-05-07 12:18:31 +02:00
nulltoken
245c5eaec5 diff: When diffing two blobs, ensure the delta callback parameter is filled with relevant information 2012-05-07 12:18:31 +02:00
nulltoken
8d0f46754f diff: remove unused parameter 2012-05-07 12:18:30 +02:00
nulltoken
458b94503d commit/tag: ensure the message is cleaned up
'git commit' and 'git tag -a' enforce some conventions, like cleaning up excess whitespace and making sure that the last line ends with a '\n'. This fix replicates this behavior.

Fix libgit2/libgit2sharp#117
2012-05-07 12:16:04 +02:00
Scott J. Goldman
901fbdad1b Define explicit _WIN32_WINNT version in makefile
Previously, it was defined in netops.c, but it's also needed in one of the
clar tests, so I figured we might as well just make it global for the
whole project.

Without it, the mingw32 linker won't resolve GetProcessId() (called from
the core/errors.c clar test) because of some conditionals in windows.h.
2012-05-07 00:05:02 -07:00
Carlos Martín Nieto
49ac5ac8fc transport git: don't use 'error' uninitialized 2012-05-06 13:17:39 +02:00
Vicent Martí
3972ca43d8 compat: Add stdarg.h include 2012-05-05 22:14:02 -07:00
Vicent Martí
cd58c15c58 Merge remote-tracking branch 'scottjg/fix-mingw32' into development
Conflicts:
	src/netops.c
	src/netops.h
	src/transports/http.c
	tests-clar/clar
2012-05-05 16:47:20 -07:00
Vicent Martí
4ef14af935 Merge pull request #664 from arrbee/attrs-from-index
Support git attrs from index (and bare repo)
2012-05-05 14:22:06 -07:00
Vicent Martí
f95e8cc07c notes: Cleanup error handling 2012-05-05 14:18:10 -07:00
Vicent Martí
d3a60dc244 Merge pull request #663 from schu/notes-honor-config
Honor core.notesRef config option
2012-05-05 14:14:58 -07:00
Scott J. Goldman
b47e0a7171 Fix missing prototype warning in utf-conv.c 2012-05-05 13:52:48 -07:00
Scott J. Goldman
b4b96d56bf Fix gitno_connect() error handling on Windows
gitno_connect() can return an error or socket, which is fine on most
platforms where sockets are file descriptors (signed int), but on Windows,
SOCKET is an unsigned type, which is problematic when we are trying to
test if the socket was actually a negative error code.

This fix seperates the error code and socket in gitno_connect(), and fixes
the error handling in do_connect() functions to compensate. It appears
that git_connect() and the git-transport do_connect() functions had bugs
in the non-windows cases too (leaking sockets, and not properly reporting
connection error, respectively) so I went ahead and fixed those too.
2012-05-05 13:33:46 -07:00
Russell Belfer
282283acc6 Fix valgrind issues
There are three changes here:
- correctly propogate error code from failed object lookups
- make zlib inflate use our allocators
- add OID to notfound error in ODB lookups
2012-05-04 16:46:46 -07:00
Vicent Martí
1adf8c6a9c compat: va_copy on Win32 systems 2012-05-04 13:52:38 -07:00
Russell Belfer
b709e95146 Fix memory leaks and use after free 2012-05-04 11:06:12 -07:00
Russell Belfer
f917481ee8 Support reading attributes from index
Depending on the operation, we need to consider gitattributes
in both the work dir and the index.  This adds a parameter to
all of the gitattributes related functions that allows user
control of attribute reading behavior (i.e. prefer workdir,
prefer index, only use index).

This fix also covers allowing us to check attributes (and
hence do diff and status) on bare repositories.

This was a somewhat larger change that I hoped because it had
to change the cache key used for gitattributes files.
2012-05-03 16:37:25 -07:00
Michael Schubert
630c5a4a54 notes: add git_note_default_ref()
Add git_note_default_ref to allow easy retrieval of the currently set
default notes reference.
2012-05-03 22:31:29 +02:00
Michael Schubert
caea5e5433 notes: honor core.notesRef
Setting core.notesRef allows to change the default notes reference used
by Git. Check if set before using GIT_NOTES_DEFAULT_REF. Fixes #649.
2012-05-03 22:31:29 +02:00
Vicent Martí
2277216613 errors: Use a git_buf for building error strings 2012-05-03 00:04:04 -07:00
Vicent Martí
baaf1c4710 buffer: Add git_buf_vprintf 2012-05-03 00:03:58 -07:00
Vicent Martí
3fbcac89c4 Remove old and unused error codes 2012-05-02 19:56:38 -07:00
Vicent Martí
946a6dc4e6 Update test suite 2012-05-02 16:14:30 -07:00
Vicent Martí
40879facad Merge branch 'new-error-handling' into development
Conflicts:
	.travis.yml
	include/git2/diff.h
	src/config_file.c
	src/diff.c
	src/diff_output.c
	src/mwindow.c
	src/path.c
	tests-clar/clar_helpers.c
	tests-clar/object/tree/frompath.c
	tests/t00-core.c
	tests/t03-objwrite.c
	tests/t08-tag.c
	tests/t10-refs.c
	tests/t12-repo.c
	tests/t18-status.c
	tests/test_helpers.c
	tests/test_main.c
2012-05-02 15:59:02 -07:00
Russell Belfer
3fd99be98a Convert from strnlen to git_text_is_binary
Since strnlen is not supported on all platforms and since we
now have the shiny new git_text_is_binary in the filtering
code, let's convert diff binary detection to use the new stuff.
2012-05-02 15:36:38 -07:00
Russell Belfer
8b2bcfbe68 Copy values to avoid strict aliasing warning
To make this code more resilient to future changes, we'll
explicitly translate the libgit2 structure to the libxdiff
structure.
2012-05-02 15:36:33 -07:00
Russell Belfer
16b83019af Fix usage of "new" for fieldname in public header
This should restore the ability to include libgit2 headers
in C++ projects.

Cherry picked 2de60205df from
development into new-error-handling.
2012-05-02 15:34:58 -07:00
Vicent Martí
b88021463f Merge remote-tracking branch 'carlosmn/remaining-errors' into new-error-handling
Conflicts:
	src/refspec.c
2012-05-01 19:16:14 -07:00
Michael Schubert
42ea35c061 remote: don't free transport on disconnect
Currently, git_remote_disconnect not only closes the connection but also
frees the underlying transport object, making it impossible to write
code like

	// fetch stuff
	git_remote_download()

	// close connection
	git_remote_disconnect()

	// call user provided callback for each ref
	git_remote_update_tips(remote, callback)

because remote->refs points to references owned by the transport object.
This means, we have an idling connection while running the callback for
each reference.

Instead, allow immediate disconnect and free the transport later in
git_remote_free().
2012-05-02 01:06:49 +02:00
Vicent Martí
ced9da5412 Merge pull request #654 from carlosmn/pkt-err
Recognize and report server-side error messages
2012-04-30 14:38:15 -07:00
Carlos Martín Nieto
39e6af6a7c net: recognize and report server-side error messages
When e.g. a repository isn't found, the server sends an error saying
so. Put that error message in our error buffer.
2012-04-30 18:24:14 +02:00
nulltoken
fa6420f73e buf: deploy git_buf_len() 2012-04-30 07:12:37 +02:00
nulltoken
1d2dd864ad diff: provide more context to the consumer of the callbacks
Update the callback to provide some information related to the file change being processed and the range of the hunk, when applicable.
2012-04-30 07:12:26 +02:00
nulltoken
da3c187d5e buf: add git_buf_len() accessor to expose the current length of the buffer content 2012-04-29 19:16:26 +02:00
Carlos Martín Nieto
fdc0c5f654 pkt: bring back GIT_ESHORTBUFFER
The recent 64-bit Windows fixes changed the return code in
git_pkt_parse_line() so it wouldn't signal a short buffer, breaking
the network code. Bring it back.
2012-04-29 01:21:53 +02:00
Michael Schubert
9738e2cd2c refs: fix unused-but-set warning 2012-04-27 23:30:08 +02:00
Russell Belfer
821f6bc740 Fix Win32 warnings 2012-04-26 13:04:54 -07:00
Russell Belfer
d58336dda8 Fix leading slash behavior in attrs/ignores
We were not following the git behavior for leading slashes
in path names when matching git ignores and git attribute
file patterns.  This should fix issue #638.
2012-04-26 10:51:45 -07:00
Carlos Martín Nieto
3aa351ea0f error handling: move the missing parts over to the new error handling 2012-04-26 15:38:42 +02:00
nulltoken
eb3d71a5bc diff: fix generation of the header of a removal patch 2012-04-25 15:37:17 -07:00
Russell Belfer
3fc5c65d1a Merge pull request #642 from arrbee/mem-pools
Memory pools and khash hashtables
2012-04-25 15:24:05 -07:00
Russell Belfer
c2b670436f Rename git_khash_str to git_strmap, etc.
This renamed `git_khash_str` to `git_strmap`, `git_hash_oid` to
`git_oidmap`, and deletes `git_hashtable` from the tree, plus
adds unit tests for `git_strmap`.
2012-04-25 15:20:28 -07:00
Vicent Martí
f50087c03b Merge pull request #641 from carlosmn/networking
More Networking updates
2012-04-25 14:29:45 -07:00
Russell Belfer
01fed0a8f9 Convert hashtable usage over to khash
This updates khash.h with some extra features (like error checking
on allocations, ability to use wrapped malloc, foreach calls, etc),
creates two high-level wrappers around khash: `git_khash_str` and
`git_khash_oid` for string-to-void-ptr and oid-to-void-ptr tables,
then converts all of the old usage of `git_hashtable` over to use
these new hashtables.

For `git_khash_str`, I've tried to create a set of macros that
yield an API not too unlike the old `git_hashtable` API.  Since
the oid hashtable is only used in one file, I haven't bother to
set up all those macros and just use the khash APIs directly for
now.
2012-04-25 11:18:08 -07:00
Russell Belfer
ada488bfe7 Import khash.h from attractivechaos/klib 2012-04-25 11:14:34 -07:00
Russell Belfer
c16c8b9a7e Adding stash to hashtable implementation
Adding a small stash of nodes with key conflicts has been
demonstrated to greatly increase the efficiency of a cuckoo
hashtable.  See:

  http://research.microsoft.com/pubs/73856/stash-full.9-30.pdf

for more details.
2012-04-25 11:14:34 -07:00
Russell Belfer
25f258e735 Moving power-of-two bit utilities into util.h 2012-04-25 11:14:34 -07:00
Russell Belfer
da3b391c32 Convert revwalk to use git_pool
This removes the custom paged allocator from revwalk and
replaces it with a `git_pool`.
2012-04-25 11:14:34 -07:00
Russell Belfer
19fa2bc111 Convert attrs and diffs to use string pools
This converts the git attr related code (including ignores) and
the git diff related code (and implicitly the status code) to use
`git_pools` for storing strings.  This reduces the number of small
blocks allocated dramatically.
2012-04-25 10:42:37 -07:00
Russell Belfer
2bc8fa0227 Implement git_pool paged memory allocator
This adds a `git_pool` object that can do simple paged memory
allocation with free for the entire pool at once.  Using this,
you can replace many small allocations with large blocks that
can then cheaply be doled out in small pieces.  This is best
used when you plan to free the small blocks all at once - for
example, if they represent the parsed state from a file or data
stream that are either all kept or all discarded.

There are two real patterns of usage for `git_pools`: either
for "string" allocation, where the item size is a single byte
and you end up just packing the allocations in together, or for
"fixed size" allocation where you are allocating a large object
(e.g. a `git_oid`) and you generally just allocation single
objects that can be tightly packed.  Of course, you can use it
for other things, but those two cases are the easiest.
2012-04-25 10:42:37 -07:00
Carlos Martín Nieto
a7d19b975a config: also allow escaping outside of a quoted string
This limitation was a misparsing of the documentation.
2012-04-25 15:47:53 +02:00
Carlos Martín Nieto
f184836bd2 remote: run a callback when updating the branch tips
This allows the caller to update an internal structure or update the
user output with the tips that were updated.

While in the area, only try to update the ref if the value is
different from its old one.
2012-04-25 13:25:45 +02:00
Carlos Martín Nieto
2e3a0055d1 revwalk: return GIT_EREVWALKER earlier if no references were pushed
In the case that walk->one is NULL, we know that we have no positive
references, so we already know that the revwalk is over.
2012-04-25 12:45:03 +02:00
Carlos Martín Nieto
dee5515a23 transports: buffer the git requests before sending them
Trying to send every single line immediately won't give us any speed
improvement and duplicates the code we need for other transports. Make
the git transport use the same buffer functions as HTTP.
2012-04-25 12:44:27 +02:00
Carlos Martín Nieto
7a520f5d8a fetch: use the streaming indexer when downloading a pack
This changes the git_remote_download() API, but the existing one is
silly, so you don't get to complain.

The new API allows to know how much data has been downloaded, how many
objects we expect in total and how many we've processed.
2012-04-25 12:39:11 +02:00
Vicent Martí
f9f2344bd4 Merge pull request #632 from arrbee/win64-cleanup
Code clean up, including fixing warnings on Windows 64-bit build
2012-04-23 17:28:11 -07:00
Vicent Martí
4795807ad5 Merge pull request #637 from nulltoken/issue/odb-refcount
Fix git_repository_set_odb() refcount issue
2012-04-23 17:25:11 -07:00
Carlos Martín Nieto
2218fd57a5 tree-cache: don't error out on a childless invalidated entry
The code used to assume that there had to be data after the newline in
a tree cache extension entry. This isn't true for a childless
invalidated entry if it's the last one, as there won't be any children
nor a hash to take up space.

Adapt the off-by-one comparison to also work in this case. Fixes #633.
2012-04-23 10:41:43 -07:00
Russell Belfer
26515e73a1 Rename to git_reference_name_to_oid 2012-04-23 10:06:31 -07:00
nulltoken
baf861a511 Fix git_repository_set_odb() refcount issue
git_repository_free() calls git_odb_free() if the owned odb is not null.

According to the doc, when setting a new odb through git_repository_set_odb() the caller has to take care of releasing the odb by himself.
2012-04-23 11:07:19 +02:00
Sven Strickroth
8c327228fd Check for _WIN32 instead of GIT_WIN32 or WIN32 to detect windows build environments
This fixes a possible compilation issue (when GIT_WIN32 was not set) which was introduced in revision 69a4bc1988.

Signed-off-by: Sven Strickroth <email@cs-ware.de>
2012-04-21 18:45:32 +02:00
Vicent Martí
69a4bc1988 Merge pull request #634 from csware/fix-win64-build
WIN32 is not always defined, use GIT_WIN32 instead
2012-04-20 11:24:17 -07:00
Sven Strickroth
eb6db16d82 GetFileAttributes does not work for utf-8 encoded paths
Signed-off-by: Sven Strickroth <email@cs-ware.de>
2012-04-20 20:12:48 +02:00
Sven Strickroth
b333fbf968 WIN32 is not always defined, use GIT_WIN32 instead
Signed-off-by: Sven Strickroth <email@cs-ware.de>
2012-04-20 18:51:10 +02:00
Carlos Martín Nieto
0586215662 tree-cache: don't error out on a childless invalidated entry
The code used to assume that there had to be data after the newline in
a tree cache extension entry. This isn't true for a childless
invalidated entry if it's the last one, as there won't be any children
nor a hash to take up space.

Adapt the off-by-one comparison to also work in this case. Fixes #633.
2012-04-20 02:23:14 +02:00
Vicent Martí
d59305544e Merge remote-tracking branch 'carlosmn/indexer-stream' into new-error-handling 2012-04-19 11:40:56 -07:00
Vicent Martí
54e4d0f25b Merge pull request #629 from nulltoken/issue/index-refcount
Index refcount issue
2012-04-18 17:34:52 -07:00
Russell Belfer
44ef8b1b30 Fix warnings on 64-bit windows builds
This fixes all the warnings on win64 except those in deps, which
come from the regex code.
2012-04-17 10:47:39 -07:00
Russell Belfer
f201d613a8 Add git_reference_lookup_oid and lookup_resolved
Adds a new public reference function `git_reference_lookup_oid`
that directly resolved a reference name to an OID without returning
the intermediate `git_reference` object (hence, no free needed).

Internally, this adds a `git_reference_lookup_resolved` function
that combines looking up and resolving a reference.  This allows
us to be more efficient with memory reallocation.

The existing `git_reference_lookup` and `git_reference_resolve`
are reimplmented on top of the new utility and a few places in the
code are changed to use one of the two new functions.
2012-04-17 10:44:50 -07:00
Russell Belfer
dbeca79698 Remove old status implementation
This removes the code for the old status implementation.
2012-04-17 10:35:11 -07:00
Carlos Martín Nieto
2c1075d65a config: parse quoted values
Variable values may be quoted to include newlines, literal quotes and
other characters. Add support for these and test it.
2012-04-16 10:25:52 +02:00
Carlos Martín Nieto
146f5c75d7 repo: plug a couple of leaks 2012-04-14 15:09:29 +02:00
nulltoken
c1aefb35dd Fix git_repository_set_index() refcount issue
git_repository_free() calls git_index_free() if the owned index is not null.

According to the doc, when setting a new index through git_repository_set_index() the caller has still to take care of releasing the index by itself.

In order to cope with this, this fix makes sure the index refcount is incremented when a new repository is being plugged a new index.
2012-04-14 15:05:38 +02:00
Russell Belfer
14a513e058 Add support for pathspec to diff and status
This adds preliminary support for pathspecs to diff and status.
The implementation is not very optimized (it still looks at
every single file and evaluated the the pathspec match against
them), but it works.
2012-04-13 15:00:29 -07:00
Carlos Martín Nieto
1c9c081a6a indexer: add git_indexer_stream_free() and _hash() 2012-04-13 22:19:45 +02:00
Carlos Martín Nieto
453ab98da0 indexer: Add git_indexer_stream_finalize()
Resolve any lingering deltas, write out the index file and rename the
packfile.
2012-04-13 22:19:45 +02:00
Carlos Martín Nieto
3f93e16cff indexer: start writing the stream indexer
This will allow us to index a packfile as soon as we receive it from
the network as well as storing it with its final name so we don't need
to pass temporary file names around.
2012-04-13 22:19:44 +02:00
Carlos Martín Nieto
fa679339c4 Add packfile_unpack_compressed() to the internal header 2012-04-13 22:16:48 +02:00
Carlos Martín Nieto
45d773efea pack: signal a short buffer when needed 2012-04-13 22:16:48 +02:00
Vicent Martí
d1f331564d Merge remote-tracking branch 'carlosmn/revwalk-merge-base' into new-error-handling 2012-04-13 20:41:06 +02:00
Vicent Martí
fcb2164ff1 Merge pull request #623 from arrbee/refactor-open
Update git_repository_open
2012-04-13 10:51:58 -07:00
Carlos Martín Nieto
4d53f3e214 filebuf: add option not to buffer the contents at all
The new indexer needs to be able to bypass any kind of buffering, as
it's trying to map data that it has just written to disk.
2012-04-13 09:50:41 +02:00
Carlos Martín Nieto
6a62543597 branch: simplify error handling for git_branch_move()
The cleanup needs to happen anyway, so set the error code and jump
there instead of copying the code.
2012-04-12 23:40:41 +02:00
Carlos Martín Nieto
a15156930b local transport: plug leak 2012-04-12 20:54:55 +02:00
Carlos Martín Nieto
6a8bcfa48e branch: plug leaks in git_branch_move() and _delete() 2012-04-12 20:47:46 +02:00
Carlos Martín Nieto
eb8117b841 error-handling: revwalk 2012-04-12 20:27:17 +02:00
Carlos Martín Nieto
bf787bd87c Move git_merge_base() to is own header and document it 2012-04-12 20:25:25 +02:00
Carlos Martín Nieto
f9e4bfa39b revwalk: use a priority queue for calculating merge bases
As parents are older than their children, we're appending to the
commit list most of the time, which makes an ordered linked list quite
inefficient.

While we're there, don't sort the results list in the main loop, as
we're sorting them afterwards and it creates extra work.
2012-04-12 20:25:25 +02:00
Carlos Martín Nieto
2c4ef1dd0d revwalk: use merge bases to speed up processing
There is no need walk down the parents of a merge base to mark them as
uninteresting because we'll never see them. Calculate the merge bases
in prepare_walk() so mark_uninteresting() can stop at a merge base
instead of walking all the way to the root.
2012-04-12 20:25:25 +02:00
Carlos Martín Nieto
de7ab85dc6 Implement git_merge_base()
It's implemented in revwalk.c so it has access to the revision
walker's commit cache and related functions. The algorithm is the one
used by git, modified so it fits better with the library's functions.
2012-04-12 20:25:24 +02:00
Carlos Martín Nieto
06b9d91590 revwalk: allow pushing/hiding a reference by name
The code was already there, so factor it out and let users push an OID
by giving it a reference name. Only refs to commits are
supported. Annotated tags will throw an error.
2012-04-12 20:25:24 +02:00
Carlos Martín Nieto
081d229106 revwalk: don't assume malloc succeeds 2012-04-12 20:25:24 +02:00
Russell Belfer
7784bcbbee Refactor git_repository_open with new options
Add a new command `git_repository_open_ext` with extended options
that control how searching for a repository will be done.  The
existing `git_repository_open` and `git_repository_discover` are
reimplemented on top of it.  We may want to change the default
behavior of `git_repository_open` but this commit does not do that.

Improve support for "gitdir" files where the work dir is separate
from the repo and support for the "separate-git-dir" config.  Also,
add support for opening repos created with `git-new-workdir` script
(although I have only confirmed that they can be opened, not that
all functions work correctly).

There are also a few minor changes that came up:

- Fix `git_path_prettify` to allow in-place prettifying.

- Fix `git_path_root` to support backslashes on Win32.  This fix
  should help many repo open/discover scenarios - it is the one
  function called when opening before prettifying the path.

- Tweak `git_config_get_string` to set the "out" pointer to NULL
  if the config value is not found.  Allows some other cleanup.

- Fix a couple places that should have been calling
  `git_repository_config__weakptr` and were not.

- Fix `cl_git_sandbox_init` clar helper to support bare repos.
2012-04-11 12:11:35 -07:00
Vicent Martí
64b402f856 status: Remove status_old
This is Git yo. You can fetch stuff from the history if you need it.
2012-04-11 19:19:12 +02:00
Carlos Martín Nieto
a62053a050 error-handling local transport 2012-04-11 19:16:10 +02:00
Carlos Martín Nieto
5eb8affb38 error-handling: fetch 2012-04-11 19:16:10 +02:00
Carlos Martín Nieto
bd6585a7f5 netops: show winsock error messages on Windows 2012-04-11 19:16:10 +02:00
Carlos Martín Nieto
56b7df108c error-handling: netops 2012-04-11 19:16:10 +02:00
Carlos Martín Nieto
25530fca3b error-handling: http 2012-04-11 19:16:10 +02:00
Carlos Martín Nieto
2b386acdb3 error-handling: git transport 2012-04-11 19:16:10 +02:00
Carlos Martín Nieto
84d250bfeb error-handling: protocol, pkt 2012-04-11 19:16:10 +02:00
Carlos Martín Nieto
4376f7f6f4 error-handling: remote, transport 2012-04-11 19:16:10 +02:00
nulltoken
d4d648b042 Fix compilation errors and warnings 2012-04-11 15:30:56 +02:00
Carlos Martín Nieto
1a2b87257d Typedefs don't have enum in front 2012-04-11 14:27:40 +02:00
Vicent Martí
0a20eee953 Merge pull request #619 from nulltoken/topic/branches
Basic branch management API
2012-04-11 03:43:30 -07:00
nulltoken
b78fb64d2f repository: make git_repository_set_workdir() prettify the path it is being passed 2012-04-11 12:40:21 +02:00
Vicent Martí
dcfdb958e2 Merge branch 'new-error-handling' of github.com:libgit2/libgit2 into new-error-handling 2012-04-11 12:38:45 +02:00
nulltoken
4615f0f71b branch: add git_branch_move() 2012-04-10 21:39:06 +02:00
nulltoken
555aa453ba fileops: Make git_futils_mkdir_r() able to skip non-empty directories 2012-04-10 21:39:05 +02:00
nulltoken
731df57080 Add basic branch management API: git_branch_create(), git_branch_delete(), git_branch_list() 2012-04-10 21:39:03 +02:00
nulltoken
79fd42301e transport/local: Fix peeling of nested tags 2012-04-10 21:39:01 +02:00
nulltoken
3f46f313cb tag: Add git_tag_peel() which recursively peel a tag until a non tag git_object is met 2012-04-10 21:38:49 +02:00
Carlos Martín Nieto
31e80290a1 mwindow: make sure the whole range is contained inside the same window
Looking through the open windows to check whether we can re-use an
open window should take into account whether both `offset` and `offset
+ extra` are contained within the same window. Failure to do so can
lead to invalid memory accesses. This closes #614.

While we're in the area remove an outdated assert.
2012-04-04 16:26:08 +02:00
Carlos Martín Nieto
8e8b6b01f5 Clean up valgrind warnings 2012-04-04 13:13:43 +02:00
Vicent Martí
73fe6a8e20 error-handling: Commit (WIP) 2012-04-02 20:41:48 +02:00
nulltoken
09719c500c reference: Fix creation of references with extended ASCII characters in their name 2012-04-01 14:33:32 +02:00
Russell Belfer
952f94c8ab Fix bug when join_n refers to original buffer
There was a bug in git_buf_join_n when the contents of the
original buffer were joined into itself and the realloc
moved the pointer to the original buffer.
2012-03-30 14:42:23 -07:00
Russell Belfer
95dfb031f7 Improve config handling for diff,submodules,attrs
This adds support for a bunch of core.* settings that affect
diff and status, plus fixes up some incorrect implementations
of those settings from before.  Also, this cleans up the
handling of config settings in the new submodules code and
in the old attrs/ignore code.
2012-03-30 14:40:50 -07:00
Russell Belfer
bfc9ca595a Added submodule API and use in status
When processing status for a newly checked out repo, it is
possible that there will be submodules that have not yet been
initialized.  The only way to distinguish these from untracked
directories is to have some knowledge of submodules.  This
commit adds a new submodule API which, given a name or path,
can determine if it appears to be a submodule and can give
information about the submodule.
2012-03-28 16:45:36 -07:00
Vicent Martí
181bbf1498 tree: Fix homing entry search 2012-03-28 19:12:13 +02:00
Russell Belfer
277e304149 Fix handling of submodules in trees 2012-03-26 11:22:27 -07:00
Russell Belfer
1db12b0053 Eliminate hairy COITERATE macro
I decided that the COITERATE macro was, in the end causing
more confusion that it would save and decided just to write
out the loops that I needed for parallel diff list iteration.
It is not that much code and this just feels less obfuscated.
2012-03-25 23:04:26 -07:00
Russell Belfer
875bfc5ffc Fix error in tree iterator when popping up trees
There was an error in the tree iterator where it would
delete two tree levels instead of just one when popping
up a tree level.  Unfortunately the test data for the
tree iterator did not have any deep trees with subtrees
in the middle of the tree items, so this problem went
unnoticed.  This contains the 1-line fix plus new test
data and tests that reveal the issue.
2012-03-25 21:26:48 -07:00
Russell Belfer
c8838ee92d Restore default status recursion behavior
This gives `git_status_foreach()` back its old behavior of
emulating the "--untracked=all" behavior of git.  You can
get any of the various --untracked options by passing flags
to `git_status_foreach_ext()` but the basic version will
keep the behavior it has always had.
2012-03-23 11:03:01 -07:00
Russell Belfer
4b136a94d9 Fix crash in new status and add recurse option
This fixes the bug that @nulltoken found (thank you!) where
if there were untracked directories alphabetically after the
last tracked item, the diff implementation would deref a NULL
pointer.

The fix involved the code which decides if it is necessary
to recurse into a directory in the working dir, so it was
easy to add a new option `GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS`
to control if the contents of untracked directories should be
included in status.
2012-03-23 09:26:09 -07:00
Russell Belfer
66142ae031 New status fixes
This adds support for roughly-right tracking of submodules
(although it does not recurse into submodules to detect
internal modifications a la core git), and it adds support
for including unmodified files in diff iteration if requested.
2012-03-22 10:44:36 -07:00
Russell Belfer
a48ea31d69 Reimplment git_status_foreach using git diff
This is an initial reimplementation of status using diff a la
the way that core git does it.
2012-03-21 12:33:09 -07:00
schu
7826d57759 diff_output: remove unused parameter
Signed-off-by: schu <schu-github@schulog.org>
2012-03-21 11:56:01 +01:00
Russell Belfer
a4c291ef12 Convert reflog to new errors
Cleaned up some other issues.
2012-03-20 21:57:38 -07:00
Russell Belfer
4aa7de1515 Convert indexer, notes, sha1_lookup, and signature
More files moved to new error handling style.
2012-03-19 17:49:46 -07:00
Russell Belfer
7c7ff7d11e Migrate index, oid, and utils to new errors
This includes a few cleanups that came up while converting
these files.

This commit introduces a could new git error classes, including
the catchall class: GITERR_INVALID which I'm using as the class
for invalid and out of range values which are detected at too low
a level of library to use a higher level classification.  For
example, an overflow error in parsing an integer or a bad letter
in parsing an OID string would generate an error in this class.
2012-03-19 16:10:11 -07:00
Russell Belfer
0d0fa7c368 Convert attr, ignore, mwindow, status to new errors
Also cleaned up some previously converted code that still had
little things to polish.
2012-03-16 15:56:01 -07:00
nulltoken
7b93079b5b Make git_path_root() cope with windows network paths
Fix libgit2/libgit2sharp#125
2012-03-16 15:16:52 +01:00
Russell Belfer
deafee7bd7 Continue error conversion
This converts blob.c, fileops.c, and all of the win32 files.
Also, various minor cleanups throughout the code.  Plus, in
testing the win32 build, I cleaned up a bunch (although not
all) of the warnings with the 64-bit build.
2012-03-14 17:36:15 -07:00
Russell Belfer
ab43ad2fd8 Convert attr and other files to new errors
This continues to add other files to the new error handling
style.  I think the only real concerns here are that there are
a couple of error return cases that I have converted to asserts,
but I think that it was the correct thing to do given the new
error style.
2012-03-14 11:07:14 -07:00
Russell Belfer
e3c4751070 Resolve comments from pull request
This converts the map validation function into a macro, tweaks
the GITERR_OS system error automatic appending, and adds a
tentative new error access API and some quick unit tests for
both the old and new error APIs.
2012-03-13 14:23:24 -07:00
Russell Belfer
1736799d2a Add map.c with shared p_mmap param validation
Forgot to add this file in the previous commit
2012-03-12 23:06:31 -07:00
Russell Belfer
e1de726c15 Migrate ODB files to new error handling
This migrates odb.c, odb_loose.c, odb_pack.c and pack.c to
the new style of error handling.  Also got the unix and win32
versions of map.c.  There are some minor changes to other
files but no others were completely converted.

This also contains an update to filebuf so that a zeroed out
filebuf will not think that the fd (== 0) is actually open
(and inadvertently call close() on fd 0 if cleaned up).

Lastly, this was built and tested on win32 and contains a
bunch of fixes for the win32 build which was pretty broken.
2012-03-12 22:55:40 -07:00
Carlos Martín Nieto
54fef6ebcb config: write out section headers with subsections correctly
write_section() mistakenly treated is input as the whole variable name
instead of simply the section (and possibly subsection) and would
confuse "section.subsection" as a section plus variable name and
produce a wrong section header.

Fix this and include a test for writing "section.subsection.var" and
reading it from the file.
2012-03-09 20:43:17 +01:00
Vicent Martí
dda708e78f error-handling: On-disk config file backend
Includes:

	- Proper error reporting when encountering syntax errors in a
	config file (file, line number, column).

	- Rewritten `config_write`, now with 99% less goto-spaghetti

	- Error state in `git_filebuf`: filebuf write functions no longer
	need to be checked for error returns. If any of the writes performed
	on a buffer fail, the last call to `git_filebuf_commit` or
	`git_filebuf_hash` will fail accordingly and set the appropiate error
	message. Baller!
2012-03-09 20:09:22 +01:00
Russell Belfer
6af24ce31f Merge pull request #590 from arrbee/new-error-handling
Migrating diff to new error handling
2012-03-07 10:55:18 -08:00
Russell Belfer
998f7b3dd7 Fix issues raised on pull request
This resolves the comments on pull request #590
2012-03-07 10:52:17 -08:00
Vicent Martí
e54d8d8972 error-handling: Config 2012-03-07 01:37:09 +01:00
Russell Belfer
ae9e29fde7 Migrating diff to new error handling
Ended up migrating a bunch of upstream functions as well
including vector, attr_file, and odb in order to get this
to work right.
2012-03-06 16:27:13 -08:00
Vicent Martí
cb8a79617b error-handling: Repository
This also includes droping `git_buf_lasterror` because it makes no sense
in the new system. Note that in most of the places were it has been
dropped, the code needs cleanup. I.e. GIT_ENOMEM is going away, so
instead it should return a generic `-1` and obviously not throw
anything.
2012-03-07 00:11:43 +01:00
Authmillenon
5621d8097d Rename git_oid_to_string to git_oid_tostr
To conform the naming scheme of git_oid_fromstr we should change the
name of git_oid_to_string to git_oid_tostr.
2012-03-06 17:51:04 +01:00
Vicent Martí
9d160ba855 diff: Fix rebase breackage 2012-03-06 01:37:56 +01:00
Vicent Martí
1a48112342 error-handling: References
Yes, this is error handling solely for `refs.c`, but some of the
abstractions leak all ofer the code base.
2012-03-06 00:43:10 +01:00
Carlos Martín Nieto
864ac49e31 Merge branch 'ssh-urls' into development 2012-03-05 19:32:41 +01:00
Carlos Martín Nieto
4f8efc97c1 Make git_remote_supported_url() public and shorten error string 2012-03-05 19:32:21 +01:00
Russell Belfer
c4c4bc1fd8 Convert from strnlen to git_text_is_binary
Since strnlen is not supported on all platforms and since we
now have the shiny new git_text_is_binary in the filtering
code, let's convert diff binary detection to use the new stuff.
2012-03-05 09:30:17 -08:00
Russell Belfer
28b486b2e2 Copy values to avoid strict aliasing warning
To make this code more resilient to future changes, we'll
explicitly translate the libgit2 structure to the libxdiff
structure.
2012-03-05 09:14:56 -08:00
Russell Belfer
2de60205df Fix usage of "new" for fieldname in public header
This should restore the ability to include libgit2 headers
in C++ projects.
2012-03-04 23:28:36 -08:00
Vicent Martí
45d387ac78 refs: Error handling rework. WIP 2012-03-03 02:28:50 +01:00
Vicent Martí
60bc2d20c4 error-handling: Add new routines
Obviously all the old throw routines are still in place, so we can
gradually port over.
2012-03-03 02:28:00 +01:00
Russell Belfer
529df4dfe5 Fixes for merge of filters branch 2012-03-02 15:57:06 -08:00
Russell Belfer
e1bcc19110 Revert GIT_STATUS constants to avoid issues
This reverts the changes to the GIT_STATUS constants and adds a
new enumeration to describe the type of change in a git_diff_delta.
I don't love this solution, but it should prevent strange errors
from occurring for now.  Eventually, I would like to unify the
various status constants, but it needs a larger plan and I just
wanted to eliminate this breakage quickly.
2012-03-02 15:51:55 -08:00
Russell Belfer
c19bc93cef Fixing memory leaks indicated by valgrind
This clears up the memory leaks that valgrind seems to find on
my machine.
2012-03-02 15:51:55 -08:00
Russell Belfer
da9abdd6a7 Fix a win32 warning message 2012-03-02 15:51:55 -08:00
Russell Belfer
854eccbb2d Clean up GIT_UNUSED macros on all platforms
It turns out that commit 31e9cfc4cbcaf1b38cdd3dbe3282a8f57e5366a5
did not fix the GIT_USUSED behavior on all platforms.  This commit
walks through and really cleans things up more thoroughly, getting
rid of the unnecessary stuff.

To remove the use of some GIT_UNUSED, I ended up adding a couple
of new iterators for hashtables that allow you to iterator just
over keys or just over values.

In making this change, I found a bug in the clar tests (where we
were doing *count++ but meant to do (*count)++ to increment the
value).  I fixed that but then found the test failing because it
was not really using an empty repo.  So, I took some of the code
that I wrote for iterator testing and moved it to clar_helpers.c,
then made use of that to make it easier to open fixtures on a
per test basis even within a single test file.
2012-03-02 15:51:55 -08:00
Russell Belfer
74fa4bfae3 Update diff to use iterators
This is a major reorganization of the diff code.  This changes
the diff functions to use the iterators for traversing the
content.  This allowed a lot of code to be simplified.  Also,
this moved the functions relating to outputting a diff into a
new file (diff_output.c).

This includes a number of other changes - adding utility
functions, extending iterators, etc. plus more tests for the
diff code.  This also takes the example diff.c program much
further in terms of emulating git-diff command line options.
2012-03-02 15:49:29 -08:00
Russell Belfer
e47329b6d8 First pass of diff index to workdir implementation
This is an initial version of git_diff_workdir_to_index.  It
also includes renaming some structures and some refactoring
of the existing code so that it could be shared better with
the new function.

This is not complete since it needs a rebase to get some
new odb functions from the upstream branch.
2012-03-02 15:49:29 -08:00
Russell Belfer
caf71ec081 Add tests and fix bugs for diff whitespace options
Once I added tests for the whitespace handling options of
diff, I realized that there were some bugs.  This fixes
those and adds the new tests into the test suite.
2012-03-02 15:49:29 -08:00
Russell Belfer
a2e895be82 Continue implementation of git-diff
* Implemented git_diff_index_to_tree
* Reworked git_diff_options structure to handle more options
* Made most of the options in git_diff_options actually work
* Reorganized code a bit to remove some redundancy
* Added option parsing to examples/diff.c to test most options
2012-03-02 15:49:29 -08:00
Russell Belfer
5a2f097fdc Fix minor WIN32 incompatibility
File mode flags are not all defined on WIN32, but since git
is so rigid in how it uses file modes, there is no reason not
to hard code a particular value.  Also, this is only used in
the git_diff_print_compact helper function, so it is really
really not important.
2012-03-02 15:49:29 -08:00
Russell Belfer
3a4375901a Clean up diff implementation for review
This fixes several bugs, updates tests and docs, eliminates the
FILE* assumption in favor of printing callbacks for the diff patch
formatter helpers, and adds a "diff" example function that can
perform a diff from the command line.
2012-03-02 15:49:28 -08:00
Russell Belfer
65b09b1ded Implement diff lists and formatters
This reworks the diff API to separate the steps of producing
a diff descriptions from formatting the diff.  This will allow
us to share diff output code with the various diff creation
scenarios and will allow us to implement rename detection as
an optional pass that can be run on a diff list.
2012-03-02 15:49:28 -08:00
Russell Belfer
cd33323b72 Initial implementation of git_diff_blob
This gets the basic plumbing in place for git_diff_blob.
There is a known issue where additional parameters like
the number of lines of context to display on the diff
are not working correctly (which leads one of the new
unit tests to fail).
2012-03-02 15:49:28 -08:00
Russell Belfer
8b75f7f3ea Eliminate xdiff compiler warnings
This cleans up the various GCC compiler warnings with the
xdiff code that was copied in.
2012-03-02 15:49:28 -08:00
Russell Belfer
2705576bfa Simplify GIT_UNUSED macros
Since casting to void works to eliminate errors with unused
parameters on all platforms, avoid the various special cases.
Over time, it will make sense to eliminate the GIT_UNUSED
macro completely and just have GIT_UNUSED_ARG.
2012-03-02 15:49:28 -08:00
Russell Belfer
3a5ad90a0d Import xdiff library from git
This is the initial import of the xdiff code (LGPL) from
core git as of rev f349b562086e2b7595d8a977d2734ab2ef9e71ef
2012-03-02 15:49:28 -08:00
Vicent Martí
e3d55b2add Merge pull request #575 from libgit2/filters
Filters, yo
2012-03-02 15:44:15 -08:00
Russell Belfer
ce49c7a8a9 Add filter tests and fix some bugs
This adds some initial unit tests for file filtering and fixes
some simple bugs in filter application.
2012-03-02 15:09:40 -08:00
Vicent Martí
97da3eaec8 config: Add missing file 2012-03-02 21:12:00 +01:00
Vicent Martí
f2c25d1893 config: Implement a proper cvar cache 2012-03-02 20:08:00 +01:00
Vicent Martí
c63793ee81 attr: Change the attribute check macros
The point of having `GIT_ATTR_TRUE` and `GIT_ATTR_FALSE` macros is to be
able to change the way that true and false values are stored inside of
the returned gitattributes value pointer.

However, if these macros are implemented as a simple rename for the
`git_attr__true` pointer, they will always be used with the `==`
operator, and hence we cannot really change the implementation to any
other way that doesn't imply using special pointer values and comparing
them!

We need to do the same thing that core Git does, which is using a
function macro. With `GIT_ATTR_TRUE(attr)`, we can change
internally the way that these values are stored to anything we want.

This commit does that, and rewrites a large chunk of the attributes test
suite to remove duplicated code for expected attributes, and to
properly test the function macro behavior instead of comparing
pointers.
2012-03-02 03:51:45 +01:00
Vicent Martí
47a899ffed filter: Beautiful refactoring
Comments soothe my soul.
2012-03-01 21:19:51 +01:00
Ryan Wilcox
7a54496629 introduced new function: git_remote_supported_url() <-- returns true if this version of libgit2 supports the correct transport mechanism for a URL or path 2012-03-01 08:31:50 -05:00
Ryan Wilcox
253d6df5fd fix up previous SSH path parsing commit based on @carlosmn feedback 2012-03-01 08:30:38 -05:00
Vicent Martí
788430c8e3 filter: Properly cache filter settings 2012-03-01 05:06:47 +01:00
Vicent Martí
c5266ebac5 filter: Precache the filter config options on load 2012-03-01 01:16:50 +01:00
Vicent Martí
c5e944820a config: Refactor & add git_config_get_mapped
Sane API for real-world usage.
2012-03-01 00:52:21 +01:00
Ryan Wilcox
58448910a0 implement support for username@host:path URLs in transport_find_fn() 2012-02-29 17:37:18 -05:00
Vicent Martí
27950fa3f4 filter: Add write-to CRLF filter 2012-02-29 01:35:47 +01:00
Vicent Martí
450b40cab3 filter: Load attributes for file 2012-02-28 01:13:32 +01:00
Carlos Martín Nieto
f7367993cb revwalk: add convenience function to push/hide HEAD
It's not unusual to want the walker to act on HEAD, so add a
convencience function for the case that the user doesn't already have
a resolved HEAD reference.
2012-02-27 22:26:37 +01:00
Carlos Martín Nieto
155aca2da7 revwalk: introduce pushing and hiding by glob
git_revwalk_{push,hide}_glob() lets you push the OIDs of references
that match the specified glob. This is the basics for what git.git
does with the rev-list options --branches, --tags, --remotes and
--glob.
2012-02-27 22:00:27 +01:00
Vicent Martí
eb8f90e523 buffer: Null terminate on rtrim 2012-02-27 17:22:51 +01:00
Vicent Martí
44b1ff4c12 filter: Apply filters before writing a file to the ODB
Initial implementation. The relevant code is in `blob.c`: the blob write
function has been split into smaller functions.

	- Directly write a file to the ODB in streaming mode

	- Directly write a symlink to the ODB in direct mode

	- Apply a filter, and write a file to the ODB in direct mode

When trying to write a file, we first call `git_filter__load_for_file`,
which populates a filters array with the required filters based on the
filename.

If no filters are resolved to the filename, we can write to the ODB in
streaming mode straight from disk. Otherwise, we load the whole file in
memory and use double-buffering to apply the filter chain. We finish
by writing the file as a whole to the ODB.
2012-02-27 05:30:07 +01:00
Vicent Martí
13224ea4aa buffer: Unify git_fbuffer and git_buf
This makes so much sense that I can't believe it hasn't been done
before. Kill the old `git_fbuffer` and read files straight into
`git_buf` objects.

Also: In order to fully support 4GB files in 32-bit systems, the
`git_buf` implementation has been changed from using `ssize_t` for
storage and storing negative values on allocation failure, to using
`size_t` and changing the buffer pointer to a magical pointer on
allocation failure.

Hopefully this won't break anything.
2012-02-27 05:30:07 +01:00
Carlos Martín Nieto
8171998f8d Add git_remote_list()
Loops through the configuration and generates a list of configured
remotes.
2012-02-26 19:15:36 +01:00
Carlos Martín Nieto
0a43d7cb19 config: correctly deal with setting a multivar with regex where there are no matches
We used to erroneously consider "^$" as a special case for appending a
value to a multivar. This was a misunderstanding and we should always
append a value if there are no existing values that match.

While we're in the area, replace all the variables in-memory in one
swoop and then replace them on disk so as to avoid matching a value
we've just introduced.
2012-02-25 19:00:06 +01:00
Carlos Martín Nieto
9554cd514c A remote exists with an URL alone
We used to consider it an error if a remote didn't have at least a
fetch refspec. This was too much checking, as a remote doesn't in fact
need to have anything other than an URL configured to be considered
a remote.
2012-02-24 12:14:26 +01:00
Paul Betts
1db9d2c3bb Ensure that commits don't fail if committing content that already exists
Making a commit that results in a blob that already exists in the ODB (i.e.
committing something, then making a revert commit) will result in us trying
to p_rename -> MoveFileExW a temp file into the existing ODB entry. Despite
the MOVEFILE_REPLACE_EXISTING flag is passed in, Win32 does not care and
fails it with STATUS_ACCESS_DENIED.

To fix this, we p_unlink the ODB entry before attempting to rename it. This
call will typically fail, but we don't care, we'll let the p_rename fail if
the file actually does exist and we couldn't delete it for some reason (ACLs,
etc).
2012-02-23 17:11:20 -08:00
Carlos Martín Nieto
82ccb87ef6 tree: break out on write error
If write_tree() returs an error, we used to set the error message and
continued looping. Exit the loop so we return the error.
2012-02-23 23:00:45 +01:00
Russell Belfer
290f240ee0 Fix readdir usage across platforms
This fixes the missing readdir_r from win32 and fixes other
platforms to always use the reentrant readdir_r form for reading
directory contents.
2012-02-23 11:16:47 -08:00
Russell Belfer
1ec1de6d43 Fix warnings about type conversion on win32 2012-02-23 11:15:45 -08:00
schu
0126954007 Fix -Wuninitialized warning
Signed-off-by: schu <schu-github@schulog.org>
2012-02-23 16:51:07 +01:00
Vicent Martí
36d72a5125 Merge pull request #570 from arrbee/uniform-iterators
Uniform iterators for trees, index, and workdir
2012-02-22 16:06:33 -08:00
Russell Belfer
0534641dfe Fix iterators based on pull request feedback
This update addresses all of the feedback in pull request #570.

The biggest change was to create actual linked list stacks for
storing the tree and workdir iterator state.  This cleaned up
the code a ton.  Additionally, all of the static functions had
their 'git_' prefix removed, and a lot of other unnecessary
changes were removed from the original patch.
2012-02-22 15:15:35 -08:00
Russell Belfer
da337c8064 Iterator improvements from diff implementation
This makes two changes to iterator behavior: first, advance
can optionally do the work of returning the new current value.
This is such a common pattern that it really cleans up usage.

Second, for workdir iterators, this removes automatically
iterating into directories.  That seemed like a good idea,
but when an entirely new directory hierarchy is introduced
into the workdir, there is no reason to iterate into it if
there are no corresponding entries in the tree/index that it
is being compared to.

This second change actually wasn't a lot of code because not
descending into directories was already the behavior for
ignored directories.  This just extends that to all directories.
2012-02-22 11:22:33 -08:00
Vicent Martí
8d36b253e2 Merge pull request #565 from carlosmn/multimap
Add config multivar support
2012-02-22 11:12:20 -08:00
Jay Freeman (saurik)
b60deb0235 Export parse_tag_buffer as git_tag__parse_buffer. 2012-02-22 04:45:30 +00:00
Russell Belfer
b6c93aef42 Uniform iterators for trees, index, and workdir
This create a new git_iterator type of object that provides a
uniform interface for iterating over the index, an arbitrary
tree, or the working directory of a repository.

As part of this, git ignore support was extended to support
push and pop of directory-based ignore files as the working
directory is being traversed (so the array of ignores does
not have to be recreated at each directory during traveral).

There are a number of other small utility functions in buffer,
path, vector, and fileops that are included in this patch
that made the iterator implementation cleaner.
2012-02-21 14:46:24 -08:00
Carlos Martín Nieto
9c94a356cc Fix check for writing remote's fetch and push configurations
Fix copy-paste error
2012-02-21 12:15:23 +01:00
Carlos Martín Nieto
f0f3a18af6 Move git_remote_load() to git_buf 2012-02-20 19:48:41 +01:00
Carlos Martín Nieto
89e5ed98dc Add git_remote_save() 2012-02-20 19:48:41 +01:00
Carlos Martín Nieto
bcb8c007f1 Add git_remote_set_{fetch,push}spec()
Allow setting the fetch and push refspecs, which is useful for
creating new refspecs.
2012-02-20 18:42:05 +01:00
Carlos Martín Nieto
3005855f7e Implement setting multivars 2012-02-17 19:50:30 +01:00
Carlos Martín Nieto
5e0dc4af01 Support getting multivars 2012-02-17 19:43:43 +01:00
Carlos Martín Nieto
0774d94d31 Store multivars in the multimap 2012-02-17 19:43:43 +01:00
Carlos Martín Nieto
fefd4551a5 First round of config multimap changes
Move the configuration to use a multimap instead of a list. This
commit doesn't provide any functional changes but changes the support
structures.
2012-02-17 19:43:43 +01:00
schu
0691966a73 notes: fix assert
Hopefully fix issue "Don't sleep and code" - #558.

Signed-off-by: schu <schu-github@schulog.org>
2012-02-16 12:01:09 +01:00
Vicent Martí
6117895fef Merge pull request #558 from schu/notes-api
Notes API
2012-02-15 11:38:40 -08:00
schu
bf477ed4a8 Add git notes API
This commit adds basic git notes support to libgit2, namely:

* git_note_read
* git_note_message
* git_note_oid
* git_note_create
* git_note_remove

In the long run, we probably want to provide some convenience callback
mechanism for merging and moving (filter-branch) notes.

Signed-off-by: schu <schu-github@schulog.org>
2012-02-15 20:32:14 +01:00
Vicent Martí
0c3bae6268 zlib: Remove custom git2/zlib.h header
This is legacy compat stuff for when `deflateBound` is not defined, but
we're not embedding zlib and that function is always available. Kill
that with fire.
2012-02-15 16:56:56 +01:00
schu
905919e63b util: add git__ishex
git__ishex allows to check if a string is a hexadecimal representation.

Signed-off-by: schu <schu-github@schulog.org>
2012-02-15 13:07:50 +01:00
schu
b4b79ac3db commit: actually allow yet to be born update_ref
git_commit_create is supposed to update the given reference
"update_ref", but segfaulted in case of a yet to be born
reference. Fix it.

Signed-off-by: schu <schu-github@schulog.org>
2012-02-15 13:07:41 +01:00
schu
5e0de32818 Update Copyright header
Signed-off-by: schu <schu-github@schulog.org>
2012-02-13 17:11:09 +01:00
schu
15f52ae1d6 config_file: fix clang sizeof-pointer-memaccess 2012-02-13 13:30:04 +01:00
Vicent Martí
6d39c0dd6f Merge pull request #554 from carlosmn/revwalk-reset
revwalk: unmark commits as uninteresting on reset
2012-02-11 06:44:54 -08:00
Vicent Martí
f19e3ca288 odb: Proper symlink hashing 2012-02-10 20:16:42 +01:00
Vicent Martí
18e5b8547d odb: Add internal git_odb__hashfd 2012-02-10 19:47:02 +01:00
Carlos Martín Nieto
97313ce2a3 revwalk: unmark commits as uninteresting on reset
Not doing so hides commits we want to get at during a second walk.
2012-02-07 11:33:02 +01:00
Vicent Martí
199b7d940d Merge pull request #551 from schu/treebuilder-entries
treebuilder: remove needless variable entry_count
2012-02-05 07:42:06 -08:00
schu
b3408e3e66 treebuilder: remove needless variable entry_count
Signed-off-by: schu <schu-github@schulog.org>
2012-02-05 14:59:45 +01:00
nulltoken
99abb79d53 repository: ensure that the path to the .git directory ends with a forward slash when opening a repository through a working directory path
This fixes an issue which was detected while using one of the libgit2 bindings [0]. The lack of the trailing forward slash led the name of references returned by git_reference_listall() to be prefixed with a forward slash.

  [0]: https://github.com/libgit2/libgit2sharp/pull/108
2012-02-03 12:46:50 +01:00
Ehsan Akhgari
31ffc141c3 Fix the build on Emscripten
struct timeval is used in this file, which requires <sys/time.h> to be
included.
2012-02-02 00:14:59 -05:00
Russell Belfer
e8c96ed2a7 Add unit tests for recent bug fixes
Add unit tests to confirm ignore directory pattern matches and
to confirm that ignore and attribute files are loaded properly
into the attribute file cache.
2012-02-01 12:30:35 -08:00
Russell Belfer
62a1f713de Fix memory leak in attr file cache
Actually look for the file by the same cache key that we
store it under.  Rocket science!
2012-02-01 11:54:42 -08:00
Vicent Martí
4ea79a9d6e status: Document submodule TODOs 2012-02-01 17:42:26 +01:00
Russell Belfer
e4eb94a255 Fix issue with ignoring whole directories
Now that is_dir is calculated correctly for attr/ignore paths,
it is possible to use it so that ignoring "dir/" will properly
match the directory name and ignore the entire directory.
2012-01-31 14:02:52 -08:00
Russell Belfer
adc9bdb3b1 Fix attr path is_dir check
When building an attr path object, the code that checks if the
file is a directory was evaluating the file as a relative path
to the current working directory, instead of using the repo root.
This lead to inconsistent behavior.
2012-01-31 13:59:32 -08:00
Russell Belfer
5d3cd4e309 Convert status assert to skip file
When status encounters a submodule, right now it is asserting.
This changes it to just skip the file that it can't deal with.
2012-01-31 13:09:39 -08:00
Carlos Martín Nieto
279afd2a51 refspec: a ref name includes the refs/ prefix
git_refspec_transform_r assumed that the reference name passed would
be only a branch or tag name. This is not the case, and we need to
take into consideration what's in the refspec's source to know how
much of the prefix to ignore.
2012-01-31 17:29:53 +01:00
Vicent Martí
e4b4da1406 cache: Simplify locking mechanics
The object cache is mostly IO-bound, so it makes no sense to have a lock
per node.
2012-01-27 18:28:02 -08:00
Vicent Martí
7a6f51de6d win32: Use the Windows Atomic API on MinGW too 2012-01-26 18:03:14 -08:00
Vicent Martí
a53420e4b0 msvc: Move ssize_t typedef to MSVC-only
This is a MSVC-only issue. All other compilers we support work properly.
2012-01-26 17:53:46 -08:00
nulltoken
5663e61a06 repository: add minimal reinitialization of repository
This currently only ensures that the version of the repository format isn't greater than zero.
2012-01-25 23:05:06 +01:00
Carlos Martín Nieto
a9fe8ae0ee config: don't use 'section "subsection"' internal form on config_set
This had been left over from a time when I believed what the git
documentation had to say about case-sensitivity. The rest of the code
doesn't recognize this form and we hadn't noticed because most tests
don't try to get a recently-set variable but free and reload the
configuration, causing the right format to be used.
2012-01-23 22:14:04 +01:00
Russell Belfer
63ab73bec0 Merge branch 'fix-subdir-attr-paths' into development
This resolves issue #535 and issue #533.
2012-01-20 11:13:17 -08:00
Carlos Martín Nieto
9269ccce14 diff-index: fix leak
The buffer wasn't getting freed if the last difference was a deletion.
2012-01-19 23:47:15 +01:00
Carlos Martín Nieto
860de00459 http: use PRIuZ
MSVC doesn't think %zd is a valid specifier.
2012-01-19 23:36:27 +01:00
Carlos Martín Nieto
20c50b9e16 refs: don't leak the packref when deleting/renaming
When we remove the ref from the hashtable, we need to free the
packref.
2012-01-19 19:09:47 +01:00
Carlos Martín Nieto
3f2bf4d659 hashtable: add remove2 to retrieve the value that was removed 2012-01-19 19:06:15 +01:00
Carlos Martín Nieto
d0ec3fb8f0 indexer: save the pack index with the right name
Truncate at the slash; otherwise we get ppack-*.idx filenames.
2012-01-19 17:07:49 +01:00
Carlos Martín Nieto
585a2eb75a remote: don't try to free the ref on error
On error, the pointer could be pointing anywhere.
2012-01-19 17:05:16 +01:00
nulltoken
c3ec2ec262 transport: prevent git_remote_download() from segfaulting when being passed a lightweight remote built with git_remote_new() 2012-01-19 00:09:47 +01:00
Russell Belfer
1744fafec0 Move path related functions from fileops to path
This takes all of the functions that look up simple data about
paths (such as `git_futils_isdir`) and moves them over to path.h
(becoming `git_path_isdir`).  This leaves fileops.h just with
functions that actually manipulate the filesystem or look at
the file contents in some way.

As part of this, the dir.h header which is really just for win32
support was moved into win32 (with some minor changes).
2012-01-17 15:49:47 -08:00
nulltoken
0b44c06599 repository: add the invalid repository path to the error message 2012-01-17 19:50:25 +01:00
nulltoken
86360ffdf7 transport: prevent the transport determination mechanism from segfaulting when being passed an url starting with an unknown prefix 2012-01-17 19:49:58 +01:00
nulltoken
fdc8a7dbea Fix MSVC compilation warning 2012-01-17 14:06:35 +01:00
Russell Belfer
83bfbdf593 Remove poor git__removechar function
Going back over this, the git__removechar function was not
needed (only invoked once) and is actually mislabeled.  As
implemented, it really only made sense for removing backslash
characters, since two of the "removed" characters in a row
would include the second one -- i.e. it really implements
stripping backslash-escaped strings where a backslash allows
internal whitespace in a word.
2012-01-16 18:00:18 -08:00
Russell Belfer
a51cd8e6f6 Fix handling of relative paths for attrs
Per issue #533, the handling of relative paths in attribute
and ignore files was not right.  Fixed this by pre-joining
the relative path of the attribute/ignore file onto the match
string when a full path match is required.

Unfortunately, fixing this required a bit more code than I
would have liked because I had to juggle things around so that
the fnmatch parser would have sufficient information to prepend
the relative path when it was needed.
2012-01-16 16:58:27 -08:00
Russell Belfer
6e03b12f57 Merge pull request #531 from arrbee/gitignore
Initial implementation of gitignore support

git_status_foreach() and git_status_file() will now be
gitignore aware.
2012-01-16 15:34:35 -08:00
Russell Belfer
cfbc880d8a Patch cleanup for merge
After reviewing the gitignore support with Vicent, we came up
with a list of minor cleanups to prepare for merge, including:

* checking git_repository_config error returns
* renaming git_ignore_is_ignored and moving to status.h
* fixing next_line skipping to include \r skips
* commenting on where ignores are and are not included
2012-01-16 15:16:44 -08:00
Carlos Martín Nieto
d9e5430e5a Windows: store all 64 bits of the size in the stat structure
We force stat to be a stat64 structure, so we can and should put all
64 bits of the size in st_size.
2012-01-16 11:46:49 +01:00
Vicent Martí
1af56d7d7e Fix #534: 64-bit issues in Windows
off_t is always 32 bits in Windows, which is beyond stupid, but we just
don't care anymore because we're using `git_off_t` which is assured to
be 64 bits on all platforms, regardless of compilation mode. Just
ensure that no casts to `off_t` are performed.

Also, the check for `off_t` overflows has been dropped, once again,
because the size of our offsets is always 64 bits on all platforms.

Fixes #534
2012-01-15 15:48:36 -08:00
Carlos Martín Nieto
c1c399cf27 config: handle EOF properly
In the main loop we peek to see what kind of line the next one is. If
there are multiple newlines before the end of the file, the eof marker
won't be set after we read the last line with data and we'll try to
peek again. This peek will return LF (as it pretends that we have a
newline at EOF so other function don't need any special handling).

Fix cfg_getchar so it doesn't try to read past the last character in
the file and config_parse so it considers LF as EOF on peek (as we're
ignoring spaces) and sets the reader's EOF flag to exit the parsing
loop.
2012-01-13 19:33:54 +01:00
Russell Belfer
1dbcc9fc4e Fix several memory issues
This contains fixes for several issues discovered by MSVC and
by valgrind, including some bad data access, some memory
leakage (in where certain files were not being successfully
added to the cache), and some code simplification.
2012-01-11 23:21:46 -08:00
Russell Belfer
0cfcff5daa Convert git_path_walk_up to regular function
This gets rid of the crazy macro version of git_path_walk_up
and makes it into a normal function that takes a callback
parameter.  This turned out not to be too messy.
2012-01-11 20:41:55 -08:00
Russell Belfer
15debaf5da Fix bug in dir_for_path
The last checkin accidentally broke dir_for_path by propogating
the dirname return code even when there was no error.
2012-01-11 17:28:25 -08:00
Russell Belfer
6a67a812c2 Allow ignores (and attribs) for nonexistent files
This fixes issue 532 that attributes (and gitignores) could not
be checked for files that don't exist.  It should be possible to
query such things regardless of the existence of the file.
2012-01-11 16:01:48 -08:00
Russell Belfer
df743c7d3a Initial implementation of gitignore support
Adds support for .gitignore files to git_status_foreach() and
git_status_file().  This includes refactoring the gitattributes
code to share logic where possible.  The GIT_STATUS_IGNORED flag
will now be passed in for files that are ignored (provided they
are not already in the index or the head of repo).
2012-01-11 14:39:51 -08:00
Russell Belfer
7e443f6960 Restore portability to git_path_prettify.
It turns out that passing NULL for the second parameter of realpath(3)
is not as portable as one might like.  Notably, Mac OS 10.5 and earlier
does not support it.  So this moves us back to a large buffer to get
the realpath info.
2012-01-09 15:46:06 -08:00
Vicent Martí
1d17507496 Merge pull request #528 from arrbee/valgrind-fixes-2
Valgrind fixes in smaller pieces
2012-01-05 17:46:06 -08:00
Russell Belfer
fa3cb0dae0 Fix memory leak in git_index_remove.
Missed freeing the entry.
2012-01-05 15:15:43 -08:00
Russell Belfer
2d8405025d Throw first error in chain, not rethrow.
This is the first time this error is throw, so use git__throw instead
of git__rethrow.
2012-01-05 15:03:42 -08:00
Jeff King
671bbdd372 reflog_write: don't access free()'d memory
We get the oid of a reference, free the reference, then
convert the oid to a string. We need to convert the oid
before freeing the memory.
2012-01-05 17:31:13 -05:00
Vicent Martí
f2114d0a35 Merge remote-tracking branch 'nulltoken/topix/path_fromurl' into development
Conflicts:
	tests-clay/clay.h
	tests-clay/clay_main.c
2012-01-04 22:43:11 +01:00
nulltoken
f46e622636 Fix Windows specific off-by-one error
The value returned by MultiByteToWideChar includes the NULL termination character.
2012-01-04 21:15:12 +01:00
nulltoken
acb159e191 Fix MSVC compilation warnings 2012-01-04 18:17:55 +01:00
Vincent Lee
c6a437eaec Add missing semicolon 2012-01-03 19:44:13 +09:00
Vicent Martí
7a704309ae Merge remote-tracking branch 'drizzd/diff-index-tests' into development
Conflicts:
	tests-clay/clay.h
	tests-clay/clay_main.c
2012-01-02 09:58:39 +01:00
Vicent Martí
9191a6d246 Merge remote-tracking branch 'arrbee/git-attributes' into development
Conflicts:
	tests-clay/clay_main.c
2012-01-02 09:56:48 +01:00
Vicent Martí
9dd4c3e806 config: Rename the delete callback name
`delete` is a reserved keyword in C++.
2011-12-31 05:58:26 +01:00
Russell Belfer
bd370b14fe Improved gitattributes macro implementation
This updates to implementation of gitattribute macros to be much more
similar to core git (albeit not 100%) and to handle expansion of
macros within macros, etc.  It also cleans up the refcounting usage
with macros to be much cleaner.

Also, this adds a new vector function `git_vector_insert_sorted()`
which allows you to maintain a sorted list as you go.  In order to
write that function, this changes the function `git__bsearch()` to
take a somewhat different set of parameters, although the core
functionality is still the same.
2011-12-30 15:00:14 -08:00
Clemens Buchacher
1f783edf17 do not use full path in diff-index
Currently, diff_index passes the full relative path from the
repository root to the callback. In case of an addition, it passes
the tree entry instead of the index entry.

This change fixes the path used for addition, and it passes only
the basename of the path. This mimics the current behavior of
git_tree_diff.
2011-12-30 20:14:05 +01:00
Clemens Buchacher
e459253815 allow opening index in bare repo
The git.git implementation allows this, and there is no reason not
to.
2011-12-30 20:14:05 +01:00
Clemens Buchacher
599f2849ba add git_index_read_tree 2011-12-30 20:14:05 +01:00
Clemens Buchacher
a26a156349 move entry_is_tree to tree.h 2011-12-30 20:14:01 +01:00
Russell Belfer
c6d2a2c094 Fixed up memory leaks 2011-12-29 21:32:37 -08:00
Russell Belfer
73b51450a3 Add support for macros and cache flush API.
Add support for git attribute macro definitions.  Also, add
support for cache flush API to clear the attribute file content
cache when needed.

Additionally, improved the handling of global and system files,
making common utility functions in fileops and converting config
and attr to both use the common functions.

Adds a bunch more tests and fixed some memory leaks.  Note that
adding macros required me to use refcounted attribute assignment
definitions, which complicated, but probably improved memory usage.
2011-12-29 00:01:10 -08:00
nulltoken
e2580375dc transport: make local transport accept a file Uri containing percent-encoded characters
This makes libgit2 compliant with the following scenario

$ git ls-remote file:///d:/temp/dwm%20tinou
732d790b702db4b8985f5104fc44642654f6a6b6        HEAD
732d790b702db4b8985f5104fc44642654f6a6b6        refs/heads/master
732d790b702db4b8985f5104fc44642654f6a6b6        refs/remotes/origin/HEAD
732d790b702db4b8985f5104fc44642654f6a6b6        refs/remotes/origin/master

$ mv "/d/temp/dwm tinou" /d/temp/dwm+tinou

$ git ls-remote file:///d:/temp/dwm%20tinou
fatal: 'd:/temp/dwm tinou' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

$ git ls-remote file:///d:/temp/dwm+tinou
732d790b702db4b8985f5104fc44642654f6a6b6        HEAD
732d790b702db4b8985f5104fc44642654f6a6b6        refs/heads/master
732d790b702db4b8985f5104fc44642654f6a6b6        refs/remotes/origin/HEAD
732d790b702db4b8985f5104fc44642654f6a6b6        refs/remotes/origin/master
2011-12-28 20:40:08 +01:00
nulltoken
2017a15d6c path: add git_path_fromurl() 2011-12-28 20:35:09 +01:00
nulltoken
459e2dcd7d path: add git__percent_decode() 2011-12-28 20:31:11 +01:00
nulltoken
eb8de7476b util: add git__fromhex() 2011-12-28 20:25:29 +01:00
Vicent Martí
d16e4b2b88 remotes: Remove unused variables 2011-12-25 00:25:04 +01:00
Vicent Martí
fa51565625 refs: Fix double free
Includes relevant Clay test
2011-12-25 00:22:20 +01:00
nulltoken
db1f7e596c remote: add test to retrieve the advertised references from a local repository and fix related implementation 2011-12-21 21:30:12 +01:00
Russell Belfer
ee1f0b1aed Add APIs for git attributes
This adds APIs for querying git attributes.  In addition to
the new API in include/git2/attr.h, most of the action is in
src/attr_file.[hc] which contains utilities for dealing with
a single attributes file, and src/attr.[hc] which contains
the implementation of the APIs that merge all applicable
attributes files.
2011-12-20 16:32:58 -08:00
schu
e95849c14f config_file: honor error
Return an error if we can't write an updated version of the config file
after config_delete.

Along with that, fix an uninitialized warning.

Signed-off-by: schu <schu-github@schulog.org>
2011-12-19 16:07:21 +01:00
Russell Belfer
86e356ee51 Restore missing lstat in index_entry_init
In an effort to remove duplicate code, I accidentally left
the stat structure uninitialized in this function.  This
patch restores that data gathering.
2011-12-18 12:08:50 -08:00
Carlos Martín Nieto
80a665aaca config: really delete variables
Instead of just setting the value to NULL, which gives unwanted
results when asking for that variable after deleting it, delete the
variable from the list and re-write the file.
2011-12-16 02:28:39 +01:00
Carlos Martín Nieto
7b2b4adfb1 Revert "config: Return ENOTFOUND when a variable was deleted"
This would make us think that config variables like

    [core]
        something

is missing.
2011-12-16 01:39:28 +01:00
Vicent Marti
2ea14da648 config: Return ENOTFOUND when a variable was deleted 2011-12-15 18:14:41 +01:00
Russell Belfer
b5daae68a4 Allow git_buf_joinpath to accept self-joins
It was not safe for git_buf_joinpath to be used with a pointer
into the buf itself because a reallocation could invalidate
the input parameter that pointed into the buffer.  This patch
makes it safe to self join, at least for the leading input to
the join, which is the common "append" case for self joins.

Also added unit tests to explicitly cover this case.

This should actually fix #511
2011-12-14 14:31:06 -08:00
Russell Belfer
d6ccedddd2 Check error on path manipulations.
This commit fixes #511.
2011-12-14 14:31:06 -08:00
nulltoken
489c36663e posix_w32: prevent segfaulting on Windows when building a temporary filename 2011-12-14 20:03:11 +01:00
Vicent Marti
bf6d2717ab buffer: inline git_buf_cstr 2011-12-14 03:27:53 +01:00
Vicent Marti
7af26f8f58 Fix tree-diff with the new path API 2011-12-14 03:24:16 +01:00
Vicent Marti
40e73d6f88 Merge remote-tracking branch 'arrbee/git-buf-for-paths' into development
Conflicts:
	tests-clay/clay_main.c
2011-12-09 01:38:46 +01:00
Russell Belfer
97769280ba Use git_buf for path storage instead of stack-based buffers
This converts virtually all of the places that allocate GIT_PATH_MAX
buffers on the stack for manipulating paths to use git_buf objects
instead.  The patch is pretty careful not to touch the public API
for libgit2, so there are a few places that still use GIT_PATH_MAX.

This extends and changes some details of the git_buf implementation
to add a couple of extra functions and to make error handling easier.

This includes serious alterations to all the path.c functions, and
several of the fileops.c ones, too.  Also, there are a number of new
functions that parallel existing ones except that use a git_buf
instead of a stack-based buffer (such as git_config_find_global_r
that exists alongsize git_config_find_global).

This also modifies the win32 version of p_realpath to allocate whatever
buffer size is needed to accommodate the realpath instead of hardcoding
a GIT_PATH_MAX limit, but that change needs to be tested still.
2011-12-07 23:08:15 -08:00
Vicent Marti
e923868766 tree: recursive diff-index
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
Signed-off-by: Vicent Marti <tanoku@gmail.com>

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Author:    Carlos Martín Nieto <carlos@cmartin.tk>
#
# On branch development
# Your branch is ahead of 'origin/development' by 11 commits.
#
# Changes to be committed:
#   (use "git reset HEAD^1 <file>..." to unstage)
#
#	modified:   include/git2/tree.h
#	modified:   src/tree.c
#	modified:   tests-clay/clay_main.c
#	modified:   tests-clay/object/tree/diff.c
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	0001-remote-Cleanup-the-remotes-code.patch
#	466.patch
#	466.patch.1
#	488.patch
#	Makefile
#	libgit2.0.15.0.dylib
#	libgit2.0.dylib
#	libgit2.dylib
#	libgit2_clay
#	libgit2_test
#	tests-clay/object/tree/
2011-12-03 18:06:34 +01:00
Carlos Martín Nieto
a1fdea2855 tree: implement tree diffing
For each difference in the trees, the callback gets called with the
relevant information so the user can fill in their own data
structures.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
2011-12-03 17:47:06 +01:00
Russell Belfer
969d588d9a Optimized of git_buf_join.
This streamlines git_buf_join and removes the join-append behavior,
opting instead for a very compact join-replace of the git_buf contents.
The unit tests had to be updated to remove the join-append tests and
have a bunch more exhaustive tests added.
2011-11-30 13:10:47 -08:00
Russell Belfer
309113c984 Make initial value of git_buf ptr always be a valid empty string.
Taking a page from core git's strbuf, this introduces git_buf_initbuf
which is an empty string that is used to initialize the git_buf ptr
value even for new buffers.  Now the git_buf ptr will always point to
a valid NUL-terminated string.

This change required jumping through a few hoops for git_buf_grow
and git_buf_free to distinguish between a actual allocated buffer
and the global initial value.  Also, this moves the allocation
related functions to be next to each other near the top of buffer.c.
2011-11-29 23:45:17 -08:00
Russell Belfer
c63728cd73 Make git_buf functions always maintain a valid cstr.
At a tiny cost of 1 extra byte per allocation, this makes
git_buf_cstr into basically a noop, which simplifies error
checking when trying to convert things to use dynamic allocation.

This patch also adds a new function (git_buf_copy_cstr) for copying
the cstr data directly into an external buffer.
2011-11-29 16:39:49 -08:00
schu
fe9a0e09fe transports: fix -Wunused-but-set-variable warning
Signed-off-by: schu <schu-github@schulog.org>
2011-11-29 11:02:42 +01:00
Vicent Martí
798dd36c08 Merge pull request #499 from arrbee/extend-git-buf
Extend git_buf with new utility functions and unit tests.
2011-11-29 01:39:52 -08:00
Russell Belfer
679b69c49d Resolve remaining feedback
* replace some ints with size_ts
* update NULL checks in various places
2011-11-28 13:05:25 -08:00
Carlos Martín Nieto
89886d0bbb Plug a bunch of leaks 2011-11-28 21:08:29 +01:00
Vicent Marti
a5123ea80b repository: Do not double-increment refcounts 2011-11-28 20:00:42 +01:00
Russell Belfer
3aa294fd45 Add two string git_buf_join and tweak input error checking.
This commit addresses two of the comments:
* renamed existing n-input git_buf_join to git_buf_join_n
* added new git_buf_join that always takes two inputs
* moved some parameter error checking to asserts
* extended unit tests to cover new version of git_buf_join
2011-11-28 10:42:57 -08:00
Vicent Marti
b233714360 remote: Fix connected test 2011-11-28 18:46:25 +01:00
Vicent Marti
d88d4311c7 remote: Cleanup the remotes code
- Hide the remaining transports code
- Drop `git_headarray`, switch to using a callback to list refs. Makes
the code cleaner.
2011-11-28 08:40:40 +01:00
Russell Belfer
8c74d22ebf Extend git_buf with new utility functions and unit tests.
Add new functions to git_buf for:
* initializing a buffer from a string
* joining one or more strings onto a buffer with separators
* swapping two buffers in place
* extracting data from a git_buf (leaving it empty)

Also, make git_buf_free leave a git_buf back in its initted state,
and slightly tweak buffer allocation sizes and thresholds.

Finally, port unit tests to clay and extend with lots of new tests
for the various git_buf functions.
2011-11-27 21:56:44 -08:00
Vicent Marti
c94785a9f3 repository: Use git_config when initializing
Thanks @carlosmn!
2011-11-26 08:48:01 +01:00
Vicent Marti
b028a898a1 util: Remove unused macro 2011-11-26 08:48:01 +01:00
Vicent Marti
03da4480f6 refcount: Fix off-by one error 2011-11-26 08:48:01 +01:00
Vicent Marti
45e79e3701 Rename all _close methods
There's no difference between `_free` and `_close` semantics: keep
everything with the same name to avoid confusions.
2011-11-26 08:48:00 +01:00
Vicent Marti
9462c47143 repository: Change ownership semantics
The ownership semantics have been changed all over the library to be
consistent. There are no more "borrowed" or duplicated references.

Main changes:

	- `git_repository_open2` and `3` have been dropped.

	- Added setters and getters to hotswap all the repository owned
	objects:

		`git_repository_index`
		`git_repository_set_index`
		`git_repository_odb`
		`git_repository_set_odb`
		`git_repository_config`
		`git_repository_set_config`
		`git_repository_workdir`
		`git_repository_set_workdir`

	Now working directories/index files/ODBs and so on can be
	hot-swapped after creating a repository and between operations.

	- All these objects now have proper ownership semantics with
	refcounting: they all require freeing after they are no longer
	needed (the repository always keeps its internal reference).

	- Repository open and initialization has been updated to keep in
	mind the configuration files. Bare repositories are now always
	detected, and a default config file is created on init.

	- All the tests affected by these changes have been dropped from the
	old test suite and ported to the new one.
2011-11-26 08:37:08 +01:00
Vicent Martí
880b6f0c22 Merge pull request #497 from carlosmn/config
Don't fail when opening a new config file
2011-11-25 21:31:35 -08:00
Vicent Martí
e42ea1f488 Merge pull request #491 from schu/refs-cleanup
reference_rename() cleanup
2011-11-25 21:30:08 -08:00
Carlos Martín Nieto
4e90a0a4a0 config: allow to open and write to a new file 2011-11-26 01:54:12 +01:00
Vicent Marti
2869f404fd transport: Add git_transport_valid_url 2011-11-22 15:49:23 +01:00