summaryrefslogtreecommitdiff
path: root/src/revwalk.h
Commit message (Collapse)AuthorAgeFilesLines
* No need to find merge base.Anurag Gupta2014-03-311-2/+1
|
* Callback to hide commits in revision walker.Anurag Gupta2014-03-241-0/+4
|
* revwalk: don't try to find merge bases when there can be noneCarlos Martín Nieto2014-03-201-1/+2
| | | | | | | | | | | | | | | | | | | As a way to speed up the cases where we need to hide some commits, we find out what the merge bases are so we know to stop marking commits as uninteresting and avoid walking down a potentially very large amount of commits which we will never see. There are however two oversights in current code. The merge-base finding algorithm fails to recognize that if it is only given one commit, there can be no merge base. It instead walks down the whole ancestor chain needlessly. Make it return an empty list immediately in this situation. The revwalk does not know whether the user has asked to hide any commits at all. In situation where the user pushes multiple commits but doesn't hide any, the above fix wouldn't do the trick. Keep track of whether the user wants to hide any commits and only run the merge-base finding algorithm when it's needed.
* revwalk: allow simplifying by first-parentCarlos Martín Nieto2013-09-091-1/+2
| | | | | When enabled, only the first parent of each commit will be queued, enabling a simple way of using first-parent simplification.
* update copyrightsEdward Thomson2013-01-081-1/+1
|
* Fix function name and add real error checkRussell Belfer2012-11-291-1/+1
| | | | | | | `revwalk.h:commit_lookup()` -> `git_revwalk__commit_lookup()` and make `git_commit_list_parse()` do real error checking that the item in the list is an actual commit object. Also fixed an apparent typo in a test name.
* Move merge functions to merge.cBen Straub2012-11-271-0/+44
| | | | | In so doing, promote commit_list to git_commit_list, with its own internal API header.
* Fix headers for the new Revision WalkerVicent Marti2011-03-161-11/+0
| | | | | | The "oid.h" header is now included instead of "object.h". The old "revwalk.h" header has been removed; it was empty.
* Rewrite the Revision WalkerVicent Marti2011-03-141-56/+0
| | | | | | | | | | | | | | | | | | | | | The new revision walker uses an internal Commit object storage system, custom memory allocator and much improved topological and time sorting algorithms. It's about 20x times faster than the previous implementation when browsing big repositories. The following external API calls have changed: `git_revwalk_next` returns an OID instead of a full commit object. The initial call to `git_revwalk_next` is no longer blocking when iterating through a repo with a time-sorting mode. Iterating with Topological or inverted modes still makes the initial call blocking to preprocess the commit list, but this block should be mostly unnoticeable on most repositories (topological preprocessing times at 0.3s on the git.git repo). `git_revwalk_push` and `git_revwalk_hide` now take an OID instead of a full commit object.
* Change the library include fileVicent Marti2010-12-061-2/+2
| | | | | | | | | | | | Libgit2 is now officially include as #include "<git2.h>" or indidividual files may be included as #include <git2/index.h> Signed-off-by: Vicent Marti <tanoku@gmail.com>
* Redesigned the walking/object lookup interfaceVicent Marti2010-08-121-8/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The old 'git_revpool' object has been removed and split into two distinct objects with separate functionality, in order to have separate methods for object management and object walking. * A new object 'git_repository' does the high-level management of a repository's objects (commits, trees, tags, etc) on top of a 'git_odb'. Eventually, it will also manage other repository attributes (e.g. tag resolution, references, etc). See: src/git/repository.h * A new external method 'git_repository_lookup(repo, oid, type)' has been added to the 'git_repository' API. All object lookups (git_XXX_lookup()) are now wrappers to this method, and duplicated code has been removed. The method does automatic type checking and returns a generic 'git_revpool_object' that can be cast to any specific object. See: src/git/repository.h * The external methods for object parsing of repository objects (git_XXX_parse()) have been removed. Loading objects from the repository is now managed through the 'lookup' functions. These objects are loaded with minimal information, and the relevant parsing is done automatically when the user requests any of the parsed attributes through accessor methods. An attribute has been added to 'git_repository' in order to force the parsing of all the repository objects immediately after lookup. See: src/git/commit.h See: src/git/tag.h See: src/git/tree.h * The previous walking functionality of the revpool is now found in 'git_revwalk', which does the actual revision walking on a repository; the attributes when walking through commits in a database have been decoupled from the actual commit objects. This increases performance when accessing commits during the walk and allows to have several 'git_revwalk' instances working at the same time on top of the same repository, without having to load commits in memory several times. See: src/git/revwalk.h * The old 'git_revpool_table' has been renamed to 'git_hashtable' and now works as a generic hashtable with support for any kind of object and custom hash functions. See: src/hashtable.h * All the relevant unit tests have been updated, renamed and grouped accordingly. Signed-off-by: Vicent Marti <tanoku@gmail.com>
* Changed revpool's object table to support arbitrary objectsVicent Marti2010-07-151-1/+3
| | | | | | | | | | | | git_revpool_object now has a type identifier for each object type in a revpool (commits, trees, blobs, etc). Trees can now be stored in the revision pool. git_revpool_tableit now supports filtering objects by their type when iterating through the object table. Signed-off-by: Vicent Marti <tanoku@gmail.com>
* msvc: Fix an "conversion, loss of data" compiler warningRamsay Jones2010-06-021-1/+1
| | | | | | | | | | | | | | | | | In particular, the compiler issues the following warning: src/revwalk.c(61) : warning C4244: '=' : conversion from \ 'unsigned int' to 'unsigned char', possible loss of data In order to suppress the warning, we change the type of the sorting "enum" field of the git_revpool structure to be consistent with the sort_mode parameter of the gitrp_sorting() function. Note that if the size of the git_revpool structure is an issue, then we could change the type of the sort_mode parameter instead. Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk> Signed-off-by: Andreas Ericsson <ae@op5.se>
* Added new error codes. Improved error handling.Vicent Marti2010-06-021-1/+1
| | | | | Signed-off-by: Vicent Marti <tanoku@gmail.com> Signed-off-by: Andreas Ericsson <ae@op5.se>
* Fixed brace placement and converted spaces to tabs.Vicent Marti2010-06-021-6/+6
| | | | | Signed-off-by: Vicent Marti <tanoku@gmail.com> Signed-off-by: Andreas Ericsson <ae@op5.se>
* Add external API for revision sorting.Vicent Marti2010-06-021-5/+3
| | | | | | | | | The GIT_RPSORT_XXX flags have been moved to the external API, and a new method 'gitrp_sorting(...)' has been added to safely change the sorting method of a revision pool. Signed-off-by: Vicent Marti <tanoku@gmail.com> Signed-off-by: Andreas Ericsson <ae@op5.se>
* Add commit caching on the commit table.Vicent Marti2010-06-021-2/+11
| | | | | | | Properly initialize the pending commits list. Signed-off-by: Vicent Marti <tanoku@gmail.com> Signed-off-by: Andreas Ericsson <ae@op5.se>
* Changed 'git_commit_list' from a linked list to a doubly-linked list.Vicent Marti2010-06-021-2/+2
| | | | | | | Changed 'git_commit' to use bit fields instead of flags. Signed-off-by: Vicent Marti <tanoku@gmail.com> Signed-off-by: Andreas Ericsson <ae@op5.se>
* Add arbritrary ordering revision walking.Vicent Marti2010-06-021-1/+0
| | | | | | | | The 'gitrp_next()' method now correctly does a revision walking of all the pushed revisions in arbritary ordering. Signed-off-by: Vicent Marti <tanoku@gmail.com> Signed-off-by: Andreas Ericsson <ae@op5.se>
* Split git_commit_lookup into separate functions.Vicent Marti2010-06-021-0/+1
| | | | | | | | | | | git_commit_lookup() now creates commit references without loading them from the ODB. git_commit_parse() creates a commit reference, loads it and parses it from the ODB. Signed-off-by: Vicent Marti <tanoku@gmail.com> Signed-off-by: Andreas Ericsson <ae@op5.se>
* Add commit parents to parsed commits and commit lists to the revpool.Vicent Marti2010-06-021-0/+5
| | | | | | | | | | | | | | | | | | Basic support for iterating the revpool. The following functions of the revwalk API have been partially implemented: void gitrp_reset(git_revpool *pool); void gitrp_push(git_revpool *pool, git_commit *commit); void gitrp_prepare_walk(git_revpool *pool); git_commit *gitrp_next(git_revpool *pool); Parsed commits' parents are now also parsed and stored in a "git_commit_list" structure (linked list). Signed-off-by: Vicent Marti <tanoku@gmail.com> Signed-off-by: Andreas Ericsson <ae@op5.se>
* Remove unnecessary import of stdlib.h from revwalk.hShawn O. Pearce2008-12-301-1/+0
| | | | | | OS headers are best imported from a more central location anyway. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Rename git_revpool_* functions gitrp_*Andreas Ericsson2008-11-221-0/+12
Otherwise their prototypes don't match their declarations. Detected by 'sparse', which is obviously good to run before each commit. Signed-off-by: Andreas Ericsson <ae@op5.se> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>