src


Log

Author Commit Date CI Message
Russell Belfer 3fc5c65d 2012-04-25T15:24:05 Merge pull request #642 from arrbee/mem-pools Memory pools and khash hashtables
Russell Belfer c2b67043 2012-04-25T15:20:28 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`.
Vicent Martí f50087c0 2012-04-25T14:29:45 Merge pull request #641 from carlosmn/networking More Networking updates
Russell Belfer 01fed0a8 2012-04-25T10:36:01 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.
Russell Belfer 25f258e7 2012-04-23T09:21:15 Moving power-of-two bit utilities into util.h
Russell Belfer da3b391c 2012-04-18T10:57:08 Convert revwalk to use git_pool This removes the custom paged allocator from revwalk and replaces it with a `git_pool`.
Russell Belfer ada488bf 2012-04-24T11:02:40 Import khash.h from attractivechaos/klib
Russell Belfer c16c8b9a 2012-04-23T09:23:58 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.
Russell Belfer 19fa2bc1 2012-04-17T15:12:50 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.
Russell Belfer 2bc8fa02 2012-04-17T10:14:24 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.
Carlos Martín Nieto a7d19b97 2012-04-25T15:47:53 config: also allow escaping outside of a quoted string This limitation was a misparsing of the documentation.
Carlos Martín Nieto f184836b 2012-04-25T12:13:20 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.
Carlos Martín Nieto 2e3a0055 2012-04-16T11:58:46 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.
Carlos Martín Nieto dee5515a 2012-04-14T18:34:50 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.
Carlos Martín Nieto 7a520f5d 2012-04-13T23:19:38 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.
Vicent Martí f9f2344b 2012-04-23T17:28:11 Merge pull request #632 from arrbee/win64-cleanup Code clean up, including fixing warnings on Windows 64-bit build
Vicent Martí 4795807a 2012-04-23T17:25:11 Merge pull request #637 from nulltoken/issue/odb-refcount Fix git_repository_set_odb() refcount issue
Russell Belfer 26515e73 2012-04-23T10:06:31 Rename to git_reference_name_to_oid
nulltoken baf861a5 2012-04-23T11:07:19 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.
Carlos Martín Nieto 05862156 2012-04-20T02:23:14 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.
Vicent Martí d5930554 2012-04-19T11:40:56 Merge remote-tracking branch 'carlosmn/indexer-stream' into new-error-handling
Vicent Martí 54e4d0f2 2012-04-18T17:34:52 Merge pull request #629 from nulltoken/issue/index-refcount Index refcount issue
Russell Belfer 44ef8b1b 2012-04-13T13:00:10 Fix warnings on 64-bit windows builds This fixes all the warnings on win64 except those in deps, which come from the regex code.
Russell Belfer f201d613 2012-04-13T10:33:14 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.
Russell Belfer dbeca796 2012-04-13T10:43:47 Remove old status implementation This removes the code for the old status implementation.
Carlos Martín Nieto 2c1075d6 2012-03-16T12:52:49 config: parse quoted values Variable values may be quoted to include newlines, literal quotes and other characters. Add support for these and test it.
Carlos Martín Nieto 146f5c75 2012-04-14T15:09:29 repo: plug a couple of leaks
nulltoken c1aefb35 2012-04-14T14:13:17 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.
Russell Belfer 14a513e0 2012-04-13T15:00:29 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.
Carlos Martín Nieto 1c9c081a 2012-04-13T19:25:06 indexer: add git_indexer_stream_free() and _hash()
Carlos Martín Nieto 453ab98d 2012-04-11T12:55:34 indexer: Add git_indexer_stream_finalize() Resolve any lingering deltas, write out the index file and rename the packfile.
Carlos Martín Nieto 3f93e16c 2012-03-29T17:49:57 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.
Carlos Martín Nieto fa679339 2012-04-13T09:58:54 Add packfile_unpack_compressed() to the internal header
Carlos Martín Nieto 45d773ef 2012-04-05T23:36:14 pack: signal a short buffer when needed
Vicent Martí d1f33156 2012-04-13T20:41:06 Merge remote-tracking branch 'carlosmn/revwalk-merge-base' into new-error-handling
Vicent Martí fcb2164f 2012-04-13T10:51:58 Merge pull request #623 from arrbee/refactor-open Update git_repository_open
Carlos Martín Nieto 4d53f3e2 2012-04-05T23:37:38 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.
Carlos Martín Nieto 6a625435 2012-04-12T23:40:41 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.
Carlos Martín Nieto a1515693 2012-04-12T20:52:26 local transport: plug leak
Carlos Martín Nieto 6a8bcfa4 2012-04-12T20:47:46 branch: plug leaks in git_branch_move() and _delete()
Carlos Martín Nieto eb8117b8 2012-04-12T20:25:07 error-handling: revwalk
Carlos Martín Nieto bf787bd8 2012-04-08T18:56:50 Move git_merge_base() to is own header and document it
Carlos Martín Nieto f9e4bfa3 2012-03-04T03:00:35 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.
Carlos Martín Nieto 2c4ef1dd 2012-03-03T16:43:24 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.
Carlos Martín Nieto de7ab85d 2012-03-03T03:31:51 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.
Carlos Martín Nieto 06b9d915 2012-02-28T02:19:57 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.
Carlos Martín Nieto 081d2291 2012-03-03T04:46:21 revwalk: don't assume malloc succeeds
Russell Belfer 7784bcbb 2012-04-11T11:52:59 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.
Vicent Martí 64b402f8 2012-04-11T19:19:12 status: Remove status_old This is Git yo. You can fetch stuff from the history if you need it.
Carlos Martín Nieto a62053a0 2012-04-01T00:45:02 error-handling local transport
Carlos Martín Nieto 5eb8affb 2012-03-30T18:37:19 error-handling: fetch
Carlos Martín Nieto bd6585a7 2012-03-16T15:15:21 netops: show winsock error messages on Windows
Carlos Martín Nieto 56b7df10 2012-03-07T07:01:20 error-handling: netops
Carlos Martín Nieto 25530fca 2012-03-06T11:26:10 error-handling: http
Carlos Martín Nieto 2b386acd 2012-03-06T10:47:18 error-handling: git transport
Carlos Martín Nieto 84d250bf 2012-03-06T10:23:02 error-handling: protocol, pkt
Carlos Martín Nieto 4376f7f6 2012-03-06T08:12:35 error-handling: remote, transport
nulltoken d4d648b0 2012-04-11T15:25:34 Fix compilation errors and warnings
Carlos Martín Nieto 1a2b8725 2012-04-11T14:27:40 Typedefs don't have enum in front
Vicent Martí 0a20eee9 2012-04-11T03:43:30 Merge pull request #619 from nulltoken/topic/branches Basic branch management API
nulltoken b78fb64d 2012-04-10T14:03:47 repository: make git_repository_set_workdir() prettify the path it is being passed
Vicent Martí dcfdb958 2012-04-11T12:38:45 Merge branch 'new-error-handling' of github.com:libgit2/libgit2 into new-error-handling
nulltoken 4615f0f7 2012-04-09T03:22:14 branch: add git_branch_move()
nulltoken 555aa453 2012-04-09T02:28:31 fileops: Make git_futils_mkdir_r() able to skip non-empty directories
nulltoken 731df570 2012-04-04T15:57:19 Add basic branch management API: git_branch_create(), git_branch_delete(), git_branch_list()
nulltoken 79fd4230 2012-04-06T15:23:18 transport/local: Fix peeling of nested tags
nulltoken 3f46f313 2012-04-06T14:34:26 tag: Add git_tag_peel() which recursively peel a tag until a non tag git_object is met
Carlos Martín Nieto 8e8b6b01 2012-04-04T13:13:43 Clean up valgrind warnings
Vicent Martí 73fe6a8e 2012-03-28T18:59:12 error-handling: Commit (WIP)
nulltoken 09719c50 2012-03-14T12:13:03 reference: Fix creation of references with extended ASCII characters in their name
Russell Belfer 952f94c8 2012-03-30T14:42:23 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.
Russell Belfer 95dfb031 2012-03-30T14:40:50 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.
Russell Belfer bfc9ca59 2012-03-28T16:45:36 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.
Russell Belfer 277e3041 2012-03-26T11:22:27 Fix handling of submodules in trees
Russell Belfer 1db12b00 2012-03-25T23:04:26 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.
Russell Belfer 875bfc5f 2012-03-25T21:26:48 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.
Russell Belfer c8838ee9 2012-03-23T11:03:01 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.
Russell Belfer 4b136a94 2012-03-23T09:26:09 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.
Russell Belfer 66142ae0 2012-03-22T10:44:36 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.
Russell Belfer a48ea31d 2012-03-21T12:33:09 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.
Russell Belfer a4c291ef 2012-03-20T21:57:38 Convert reflog to new errors Cleaned up some other issues.
Russell Belfer 4aa7de15 2012-03-19T17:49:46 Convert indexer, notes, sha1_lookup, and signature More files moved to new error handling style.
Russell Belfer 7c7ff7d1 2012-03-19T16:10:11 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.
Russell Belfer 0d0fa7c3 2012-03-16T15:56:01 Convert attr, ignore, mwindow, status to new errors Also cleaned up some previously converted code that still had little things to polish.
nulltoken 7b93079b 2012-03-16T15:16:52 Make git_path_root() cope with windows network paths Fix libgit2/libgit2sharp#125
Russell Belfer deafee7b 2012-03-14T17:36:15 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.
Russell Belfer ab43ad2f 2012-03-14T11:07:14 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.
Russell Belfer e3c47510 2012-03-13T14:23:24 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.
Russell Belfer 1736799d 2012-03-12T23:06:31 Add map.c with shared p_mmap param validation Forgot to add this file in the previous commit
Russell Belfer e1de726c 2012-03-12T22:55:40 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.
Vicent Martí dda708e7 2012-03-09T19:55:50 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!
Russell Belfer 6af24ce3 2012-03-07T10:55:18 Merge pull request #590 from arrbee/new-error-handling Migrating diff to new error handling
Russell Belfer 998f7b3d 2012-03-07T10:52:17 Fix issues raised on pull request This resolves the comments on pull request #590
Vicent Martí e54d8d89 2012-03-07T01:37:09 error-handling: Config
Russell Belfer ae9e29fd 2012-03-06T16:14:31 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.
Vicent Martí cb8a7961 2012-03-07T00:02:55 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.
Vicent Martí 9d160ba8 2012-03-06T01:37:56 diff: Fix rebase breackage
Vicent Martí 1a481123 2012-02-17T00:13:34 error-handling: References Yes, this is error handling solely for `refs.c`, but some of the abstractions leak all ofer the code base.
Vicent Martí 45d387ac 2012-02-15T16:54:17 refs: Error handling rework. WIP
Vicent Martí 60bc2d20 2012-02-14T21:23:11 error-handling: Add new routines Obviously all the old throw routines are still in place, so we can gradually port over.