- 18 May, 2012 5 commits
-
-
Conflicts: .travis.yml
Vicent Marti committed -
Welcome to yet another libgit2 release, this one being the biggest we've shipped so far. Highlights on this release include diff, branches, notes and submodules support. The new diff API is shiny and powerful. Check it out. Apologies, one more time, to all the early adopters for the breaking API changes. We've been iterating on the error handling for the library until we reached its current state, which we believe it's significantly more usable both for normal users and for developers of bindings to other languages. Also, we've renamed a few legacy calls to ensure that the whole external API uses a consistent naming scheme. As always, check the API docs for the full list of new API calls and backwards-incompatible changes. http://libgit2.github.com/libgit2/ Changelog of new features follows: Attributes: - Added function macros to check attribute values instead of having to manually compare them - Added support for choosing the attribute loading order (workdir files vs index) and to skip the systems' default `.gitattributes` - Fixed issues when fetching attribute data on bare repositories Blob: - Added support for creating blobs from any file on disk (not restricted to the repository's working directory) - Aded support for smudge filters when writing blobs to the ODB - So far only CRLF normalization is available Branches: - Added a high-level branch API: - git_branch_create - git_branch_delete - git_branch_list - git_branch_move Commit: - Commit messages are now filtered to match Git rules (stripping comments and adding proper whitespacing rules) Config: - Added support for setting and getting multivars - Added `git_config_get_mapped` to map the value of a config variable based on its defaults Diff: - Added full diff API: - tree to tree - index to tree - workdir to index - workdir to tree - blob to blob - Added helper functions to print the diffs as valid patchfiles Error handling: - New design for the error handling API, taking into consideration the requirements of dynamic languages Indexer: - Added streaming packfile indexer Merge: - Added support for finding the merge base between two commits Notes: - Full git-notes support: - git_note_read - git_note_message/git_note_oid - git_note_create - git_note_remove - git_note_free - git_note_foreach References: - Added `git_reference_name_to_oid` helper to resolve a reference to its final OID - Added `git_reference_cmp` to compare two references with a stable order Remotes: - Added support for writing and saving remotes - `git_remote_add` - `git_remote_save` - Setters for all the attributes of a remote - Switched remote download to the new streaming packfile indexer - Fixed fetch on HTTP and Git under Windows - Added `git_remote_supported_url` helper to check if a protocol can be accessed by the library - Added `git_remote_list` Repository: - Made `git_repository_open` smarter when finding the `.git` folder. - Added `git_repository_open_ext` with extra options when opening a repository Revwalk: - Added support for pushing/hiding several references through a glob - Added helper to push/hide the current HEAD to the walker - Added helper to push/hide a single reference to the walker Status: - Greatly improved Status implementation using the new `diff` code as a backend Submodules: - Added a partial submodules API to get information about a submodule and list all the submodules in a repository - git_submodule_foreach - git_submodule_lookup Tag: - Added `git_tag_peel` helper to peel a tag to its pointed object - Tag messages are now filtered to match Git rules (stripping comments and adding proper whitespacing rules) Tree: - Killed the old `git_tree_diff` API, which is replaced by the new diff code. Signed-off-by: Vicent Marti <tanoku@gmail.com>
Vicent Marti committed -
Break everything before the release
Vicent Martí committed -
fetch: set dummy function for local fetch
Vicent Martí committed -
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>
Michael Schubert committed
-
- 17 May, 2012 18 commits
-
-
branch: retrieve symbolic references when listing the branches
Vicent Martí committed -
Vicent Martí committed
-
Vicent Martí committed
-
Vicent Martí committed
-
Vicent Martí committed
-
Vicent Martí committed
-
Vicent Martí committed
-
Consistency is good.
Vicent Martí committed -
nulltoken committed
-
Profiling with scottg
Vicent Martí committed -
Russell Belfer committed
-
Fix workdir iterators on empty directories
Vicent Martí committed -
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.
Russell Belfer committed -
This fixes a warning left by the earlier optimization and addresses one of the other hotspots identified by GProf.
Russell Belfer committed -
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.
Russell Belfer committed -
This fixes the examples so they will build and adds a PROFILE option to the CMakeFile that enabled gprof info on non-Windows
Russell Belfer committed -
Fix status for files under ignored dirs
Vicent Martí committed -
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.
Russell Belfer committed
-
- 16 May, 2012 8 commits
-
-
notes: make git_note_foreach() callback signature easier to cope with from a binding perspective
Vicent Martí committed -
nulltoken committed
-
Vicent Martí committed
-
Vicent Martí committed
-
These are deprecated and replaced with the diffing code in git2/diff.h
Vicent Martí committed -
really reset walker with git_revwalk_reset
Vicent Martí committed -
Update git_status_file and add ranged iterators
Vicent Martí committed -
A few indexer consistency checks
Vicent Martí committed
-
- 15 May, 2012 6 commits
-
-
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.
Russell Belfer committed -
Error out in finalize if there is junk after the packfile hash or we couldn't process all the objects.
Carlos Martín Nieto committed -
Russell Belfer committed
-
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.
Russell Belfer committed -
Carlos Martín Nieto committed
-
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.
Nico von Geyso committed
-
- 14 May, 2012 3 commits
-
-
Fix compilation warnings
Vicent Martí committed -
nulltoken committed
-
Add git_note_foreach()
Vicent Martí committed
-