Log

Author Commit Date CI Message
Russell Belfer 49f70f2c 2013-05-23T15:48:06 Fill out diff rename test coverage This extends the rename tests to make sure that every rename scenario in the inner loop of git_diff_find_similar is actually exercised. Also, fixes an incorrect assert that was in one of the clauses that was not previously being exercised.
Russell Belfer f38cea97 2013-05-23T15:21:43 Move core.abbrev lookup out of diff print loop This moves the GIT_CVAR_ABBREV lookup out of the loop. Also, this fixes git_diff_print_raw to actually use that constant instead of hardcoding 7 characters.
Russell Belfer 67db583d 2013-05-23T15:06:07 More diff rename tests; better split swap handling This adds a couple more tests of different rename scenarios. Also, this fixes a problem with the case where you have two "split" deltas and the left half of one matches the right half of the other. That case was already being handled, but in the wrong order in a way that could result in bad output. Also, if the swap also happened to put the other two halves into the correct place (i.e. two files exchanged places with each other), then the second delta was left with the SPLIT flag set when it really should be cleared.
Russell Belfer c68b09dc 2013-05-23T11:52:34 Fix dereference of freed delta I was accidentally using a value that I had just freed. This moves the clearing of the delta internal flags into a better place.
Russell Belfer a21cbb12 2013-05-22T10:37:12 Significant rename detection rewrite This flips rename detection around so instead of creating a forward mapping from deltas to possible rename targets, instead it creates a reverse mapping, looking at possible targets and trying to find a source that they could have been renamed or copied from. This is important because each output can only have a single source, but a given source could map to multiple outputs (in the form of COPIED records). Additionally, this makes a couple of tweaks to the public rename detection APIs, mostly renaming a couple of options that control the behavior to make more sense and to be more like core Git. I walked through the tests looking at the exact results and updated the expectations based on what I saw. The new code is different from the old because it cannot give some nonsense results (like A was renamed to both B and C) which were part of the outputs previously.
Russell Belfer 4742148d 2013-05-20T13:41:39 Add more diff rename detection tests This adds a bunch more rename detection tests including checks vs the working directory, the new exact match options, some more whitespace variants, etc. This also adds a git_futils_writebuffer helper function and uses it in checkout. This is mainly added because I wanted an easy way to write out a git_buf to disk inside my test code.
Russell Belfer 9be5be47 2013-05-20T13:37:21 More git_diff_find_similar improvements - Add new GIT_DIFF_FIND_EXACT_MATCH_ONLY flag to do similarity matching without using the similarity metric (i.e. only compare the SHA). - Clean up the similarity measurement code to more rigorously distinguish between files that are not similar and files that are not comparable (previously, a 0 could either mean that the files could not be compared or that they were totally different) - When splitting a MODIFIED file into a DELETE/ADD pair, actually make a DELETED/UNTRACKED pair if the right side of the diff is from the working directory. This prevents an odd mix of ADDED and UNTRACKED files on workdir diffs.
Russell Belfer 5c8f37a3 2013-05-17T17:33:03 Extend diff example Add --raw output format and (some) options to invoke rename/copy detection on the diff.
Russell Belfer d958e37a 2013-05-17T17:21:45 Fix issues with git_diff_find_similar There are a number of bugs in the rename code that only were obvious when I started testing it against large old repos with more complex patterns. (The code to do that testing is not ready to merge with libgit2, but I do plan to add more thorough tests.) This contains a significant number of changes and also tweaks the public API slightly to make emulating core git easier. Most notably, this separates the GIT_DIFF_FIND_AND_BREAK_REWRITES flag into FIND_REWRITES (which adds a self-similarity score to every modified file) and BREAK_REWRITES (which splits the modified deltas into add/remove pairs in the diff list). When you do a raw output of core git, rewrites show up as M090 or such, not at A and D output, so I wanted to be able to emulate that. Publicly, this also changes the flags to be uint16_t since we don't need values out of that range. Internally, this contains significant changes from a number of small bug fixes (like using the wrong side of the diff to decide if the object could be found in the ODB vs the workdir) to larger issues about which files can and should be compared and how the various edge cases of similarity scores should be treated. Honestly, I don't think this is the last update that will have to be made to this code, but I think this moves us closer to correct behavior and I tried to document the code so it would be easier to follow..
Russell Belfer 0293450e 2013-05-17T16:57:49 Fix delta compare to use correct pathname The delta cmp function needs to choose the correct path for ordering when a delta is ADDED, RENAMED, or COPIED.
Russell Belfer aadfa85b 2013-05-17T16:41:15 Add git_diff_print_raw printing helper Makes it easier to emulate the --raw option
Russell Belfer 660d59ca 2013-05-17T16:40:00 Add git_oid_nfmt - a flexible OID formatter I frequently want to the the first N digits of an OID formatted as a string and I'd like it to be efficient. This function makes that easy and I could rewrite the OID formatters in terms of it.
Vicent Martí c2d282cf 2013-05-16T11:10:42 Merge pull request #1590 from arrbee/examples-like-git Add cat-file to examples (with some public API improvements)
Vicent Martí 18e37db9 2013-05-16T11:10:13 Merge pull request #1591 from arrbee/reorder-reuc-read-for-safety Ensure reuc vector is always valid
Russell Belfer 57908bb3 2013-05-16T11:03:55 Ensure reuc vector is always valid In theory, if there was a problem reading the REUC data, the read_reuc() routine could have left uninitialized and invalid data in the git_index vector. This moves the line that inserts a new entry into the vector down to the bottom of the routine so we know all the content is already valid. Also, per @linquize, this uses calloc to ensure no uninitialized data.
Russell Belfer 4a782c82 2013-05-16T11:02:30 Merge pull request #1574 from linquize/calloc Use calloc() for safety
Russell Belfer 8d784001 2013-05-16T10:43:10 Make examples/diff.c compile vs threadsafe library
Russell Belfer 58206c9a 2013-05-16T10:38:27 Add cat-file example and increase const use in API This adds an example implementation that emulates git cat-file. It is a convenient and relatively simple example of getting data out of a repository. Implementing this also revealed that there are a number of APIs that are still not using const pointers to objects that really ought to be. The main cause of this is that `git_vector_bsearch` may need to call `git_vector_sort` before doing the search, so a const pointer to the vector is not allowed. However, for tree objects, with a little care, we can ensure that the vector of tree entries is always sorted and allow lookups to take a const pointer. Also, the missing const in commit objects just looks like an oversight.
Linquize 7026ad89 2013-05-16T21:08:55 calloc() to initialize memory
Vicent Martí 12f831fa 2013-05-16T04:41:05 Merge pull request #1586 from jamill/fetch_fix Fetch should not fail when remote HEAD reference is not present locally
Vicent Martí 54e489c2 2013-05-15T16:35:47 Merge pull request #1579 from arrbee/index-entry-dup-and-free Index entry dup and free
Russell Belfer 89251b28 2013-05-15T16:25:11 Update index.h docs Move the git_index_entry to the very top, since it provides the main structure that needs to be understood by the reader, then move the bitmasks for the flags and the flags_extended under that since they are details for looking at particular fields of the structure.
Russell Belfer 96c01991 2013-05-15T09:24:51 Remove entry dup/free functions and fix comments This removes the functions to duplicate and free copies of a git_index_entry and updates the comments to explain that you should just use the public definition of the struct as needed.
Russell Belfer 797dfb28 2013-05-13T16:09:33 Add APIs to dup and free git_index_entrys This adds git_index_entry_dup to make a copy of an existing entry and git_index_entry_free to release the memory of the copy. It also updates the documentation for git_index_get_bypath and git_index_get_byindex to make it clear that the returned structure should *not* be modified.
Russell Belfer 487884a9 2013-05-13T16:07:29 Improve docs for git_index_entry flag masks The constants for extracting data from git_index_entry flags and flags_extended are not named in a way that makes it easy to know where to use each one. This improves the docs for the flags (and slightly reorganizes them), so it should be more obvious.
Vicent Martí 71596200 2013-05-15T15:47:46 Merge pull request #1588 from arrbee/fixes-for-checkout-and-diff Bug fixes for checkout and diff
Vicent Martí 6957f73c 2013-05-15T15:47:20 Merge pull request #1578 from nulltoken/fix/whitespaces Fix trailing whitespaces
Russell Belfer 72b3dd4a 2013-05-15T15:23:33 Use GIT_IDXENTRY_STAGE macro Since I added the GIT_IDXENTRY_STAGE macro to extract the stage from a git_index_entry, we probably don't need an internal inline function to do the same thing.
Russell Belfer 09fae31d 2013-05-15T14:58:26 Improve robustness of diff rename detection Under some strange circumstances, diffs can end up listing files that we can't actually open successfully. Instead of aborting the git_diff_find_similar, this makes it so that those files just won't be considered as valid rename/copy targets instead.
Russell Belfer dcb0f7c0 2013-05-15T14:54:02 Fix checkout of submodules with no .gitmodules It is possible for there to be a submodule in a repository with no .gitmodules file (for example, if the user forgot to commit the .gitmodules file). In this case, core Git will just create an empty directory as a placeholder for the submodule but otherwise ignore it. We were generating an error and stopping the checkout. This makes our behavior match that of core git.
Russell Belfer 55d3a390 2013-05-15T14:52:12 Remove old symlinks before updating Unlike blob updates, symlink updates cannot be done "in place" writing over an old symlink. This means that in checkout when we realize that we can safely update a symlink, we still need to remove the old one before writing the new.
Russell Belfer 79ef3be4 2013-05-15T14:50:05 Fix diff crash when last item is untracked dir When the last item in a diff was an untracked directory that only contained ignored items, the loop to scan the contents would run off the end of the iterator and dereference a NULL pointer. This includes a test that reproduces the problem and a fix.
nulltoken 1fed6b07 2013-05-13T21:57:37 Fix trailing whitespaces
Jameson Miller 6fe02c11 2013-05-15T14:44:35 Fetch should not fail when remote HEAD reference is not present locally
Vicent Marti f0ab7372 2013-05-15T17:51:57 signature: Lenient when dupping, strict when creating
Vicent Martí 86c6f74a 2013-05-15T08:31:37 Merge pull request #1583 from linquize/whitespace Unify whitespaces to tabs
Linquize 0cb16fe9 2013-05-15T20:26:55 Unify whitespaces to tabs
Russell Belfer bc2020d6 2013-05-14T16:39:19 Extend valgrind suppressions on Mac
Russell Belfer 00384321 2013-05-14T16:24:16 Merge pull request #1580 from carlosmn/cmake-describe CMake: vendor strings
Russell Belfer 33539b10 2013-05-14T15:05:52 Merge pull request #1582 from dmgctrl/checkout_symlink_fix Create directory for symlink before creating symlink
Russell Belfer 103a2c77 2013-05-14T15:04:16 Merge pull request #1581 from nulltoken/fix/leaks Fix some memory leaks
Carlos Martín Nieto 3bbc87d6 2013-05-14T23:09:26 CMake: allow appending a string to the library filename This helps us install multiple versions of the library side-by-side.
Brad Morgan fbcab44b 2013-05-14T16:03:09 Create directory for symlink before creating symlink
nulltoken b4d33e46 2013-05-14T21:54:26 Fix some memory leaks
Carlos Martín Nieto 000e6896 2013-05-12T15:35:02 CMake: don't try to use bundled zlib when the system's path is in the cache The code surrounding zlib bundling did not take into consideration that ZLIB_LIBRARY gets cached, and assumed that FIND(ZLIB) would always set ZLIB_FOUND, which does not hold true, as this variable signifies that we have found the package and had to look at the system, as its location was not cached. Only use the bundled sources if the external zlib is neither newly-found nor cached.
Carlos Martín Nieto 62221033 2013-05-11T07:48:31 Merge pull request #1575 from arrbee/ref-iterator-early-exit Fix refdb iteration early termination bug
Russell Belfer 99d32707 2013-05-11T06:42:25 Fix refdb iteration early termination bug There was a problem found in the Rugged test suite where the refdb_fs_backend__next function could exit too early in some very specific hashing patterns for packed refs. This ports the Rugged test to libgit2 and then fixes the bug.
Vicent Martí 7b5bc8f4 2013-05-11T05:15:00 Merge pull request #1569 from linquize/msvc-sdl Fix broken build when MSVC SDL checks is enabled
Linquize e583334c 2013-05-10T21:42:22 Fix broken build when MSVC SDL checks is enabled
Edward Thomson b6cc559a 2013-05-11T02:42:49 Merge pull request #1385 from carlosmn/refs-iter Introduce a refs iterator
Carlos Martín Nieto c58cac12 2013-05-04T18:06:14 Introduce a glob-filtering iterator If the backend doesn't provide support for it, the matching is done in refdb on top of a normal iterator.
Carlos Martín Nieto 9bd89d96 2013-05-04T16:49:39 Move a couple more functions to use iterators
Carlos Martín Nieto 2b562c3a 2013-05-04T16:32:58 refs: remove the OID/SYMBOLIC filtering Nobody should ever be using anything other than ALL at this level, so remove the option altogether. As part of this, git_reference_foreach_glob is now implemented in the frontend using an iterator. Backends will later regain the ability of doing the glob filtering in the backend.
Carlos Martín Nieto 95727245 2013-05-04T16:03:17 refs: implement _foreach with the iterator
Carlos Martín Nieto 932af0e9 2013-05-04T15:57:44 Add iterator support to the testdb backend
Carlos Martín Nieto fb592a96 2013-05-04T15:54:57 Remove outdated test Selecting wether to list loose or packed references is not something we want to support anymore, so remove a test for this.
Carlos Martín Nieto 51fc5e89 2013-05-04T15:16:55 Make sure the ref iterator works in an repo without physical presence
Carlos Martín Nieto 69a3c766 2013-05-04T15:03:32 refdb_fs: don't crash when the repo doesn't have a path
Carlos Martín Nieto 4def7035 2013-03-02T19:31:03 refs: introduce an iterator This allows us to get a list of reference names in a loop instead of callbacks.
Vicent Martí 4a65aead 2013-05-10T10:49:22 Merge pull request #1571 from arrbee/what-if-ignorecase-lies Improve ignore handling in git_status_file
Vicent Martí c3a51711 2013-05-10T10:47:08 Merge pull request #1572 from arrbee/diff-patch-with-rename Fix diff output for renames and copies
Ben Straub 94d24ac9 2013-05-10T10:33:25 Merge pull request #1573 from nulltoken/fix/leaks Fix some memory leaks
nulltoken 24988894 2013-05-10T12:02:17 Fix some memory leaks
Russell Belfer e9ba61f3 2013-05-10T09:32:42 Fix diff output for renames and copies If you use rename detection, the renamed and copied files would not show any text diffs because the function that decides if data should be loaded didn't know which sides of the diff to load for those cases. This adds a test that looks at the patch generated for diff entries that are COPIED or RENAMED.
Russell Belfer 1f9e41ee 2013-05-10T07:50:53 Improve ignore handling in git_status_file The git_status_file API was doing a hack to deal with files that are inside ignored directories. The status scan was not reporting any file in this case, so git_status_file would attempt a final "stat()" call, and return IGNORED if the file actually existed. On case-insensitive filesystems where core.ignorecase is set incorrectly, this magic check can "succeed" and report a file as ignored when it should actually return ENOTFOUND. Now that we have the GIT_STATUS_OPT_RECURSE_IGNORED_DIRS, we can use that flag to make sure that git_status_file() will look into ignored directories and eliminate the hack completely, so we give the correct error.
Michael Schubert ae59321f 2013-05-10T14:31:58 clone: fix -Wmaybe-uninitialized warning
Vicent Martí aca2d26a 2013-05-09T09:08:44 Merge pull request #1566 from ethomson/ref_zero calloc refs instead of malloc'ing them
Edward Thomson 617bb175 2013-05-09T17:44:44 calloc refs instead of malloc'ing them
Vicent Martí 9ca4ff41 2013-05-09T06:48:16 Merge pull request #1563 from arrbee/doc-fix-repo-message Fix git_repository_message docs
Russell Belfer 3d1c9f61 2013-05-09T06:45:06 Fix git_repository_message docs This clarifies the docs for git_repository_message and also adds to the tests to explicitly check NUL termination of data when the output buffer is smaller than the message size. There is a minor behavior change so that a non-NULL output buffer will always be NUL terminated (at length zero) if an error occurs.
Vicent Martí 503dd0f3 2013-05-09T05:43:25 Merge pull request #1560 from carlosmn/ref-dwim Expose git_reference_dwim
Vicent Martí ddc5c054 2013-05-09T05:42:37 Merge pull request #1561 from arrbee/fix-windows-diff-eofnl Fix windows diff eofnl error
Russell Belfer eb05b114 2013-05-07T22:45:01 Fix dumb type in time comparison
Vicent Martí af795759 2013-05-07T15:09:11 Merge pull request #1552 from carlosmn/config-helpers Config helpers for global/xdg config files
Carlos Martín Nieto 98d633cc 2013-05-07T23:28:21 Expose git_reference_dwim Extract this function out of the rev-parse code to be able to DWIM a reference instead of its target.
Carlos Martín Nieto 5d831887 2013-05-07T00:10:02 config: convenience function to open global/xdg The rules for which one to open is a bit silly, so let's make it easier for our users.
Carlos Martín Nieto a4b75dcf 2013-05-06T21:51:25 repo: unconditionally create a global config backend When a repository is initialised, we need to probe to see if there is a global config to load. If this is not the case, the user isn't able to write to the global config without creating the backend and adding it themselves, which is inconvenient and overly complex. Unconditionally create and add a backend for the global config file regardless of whether it exists as a convenience for users. To enable this, we allow creating backends to files that do not exist yet, changing the semantics somewhat, and making some tests invalid.
Vicent Martí d6465e1a 2013-05-07T10:14:28 Merge pull request #1557 from carlosmn/tagopt remote: correctly interpret tagopt '--tags'
Russell Belfer 0f938c6b 2013-05-07T09:59:53 Fix win32 type warnings
Carlos Martín Nieto 505b5d0c 2013-05-07T16:01:22 remote: correctly interpret tagopt '--tags' When tagopt is set to '--tags', we should only take the default tags refspec into account and ignore any configured ones. Bring the code into compliance.
Vicent Martí 33665410 2013-05-07T08:00:44 Merge pull request #1556 from arrbee/diff-patch-fixes Diff patch bug fixes
Russell Belfer c2f602f8 2013-05-07T07:15:39 Fix line numbering for patches with eofnl When a patch contained an eofnl change (i.e. the last line either gained or lost a newline), the oldno and newno line number values for the lines in the last hunk of the patch were not useful. This makes them behave in a more expected manner.
Russell Belfer d63eec69 2013-05-07T04:44:08 Improve diff function docs
Russell Belfer fd96f98e 2013-05-07T04:36:42 More tests for files with no newline at end
Russell Belfer e35e2684 2013-05-07T04:32:17 Add GIT_DIFF_LINE_CONTEXT_EOFNL This adds a new line origin constant for the special line that is used when both files end without a newline. In the course of writing the tests for this, I was having problems with modifying a file but not having diff notice because it was the same size and modified less than one second from the start of the test, so I decided to start working on nanosecond timestamp support. This commit doesn't contain the nanosecond support, but it contains the reorganization of maybe_modified and the hooks so that if the nanosecond data were being read by stat() (or rather being copied by git_index_entry__init_from_stat), then the nsec would be taken into account. This new stuff could probably use some more tests, although there is some amount of it here.
Carlos Martín Nieto 1c92f109 2013-05-07T01:32:10 Merge pull request #1551 from nvloff/set_upstream_local_branch fix git_branch_set_upstream for local branches
Russell Belfer 51e297dd 2013-05-07T00:31:40 Merge pull request #1554 from sba1/sort-amiga-fix Fixed qsort_r() problem when targeting AmigaOS.
Sebastian Bauer 7f8cf6fe 2013-05-07T09:15:12 Fixed qsort_r() problem when targeting AmigaOS. We fall back to the libgit2-provided insert sort as done for other platforms.
Russell Belfer 590991a7 2013-05-06T23:25:06 Merge pull request #1553 from jdavid/git_commit_owner Add git_commit_owner to the public interface
J. David Ibáñez 6e865996 2013-05-07T07:33:35 Add git_commit_owner to the public interface Just like git_tree_owner, etc.
Nikolai Vladimirov 3d42e9a3 2013-05-06T20:32:20 git_branch_set_upstream with local branches Currently git_branch_set_upstream when passed a local branch creates invalid configuration, for ex. if we setup branch 'tracking_master' to track local 'master' libgit2 generates the following config ``` [branch "track_master"] remote = . merge = .refs/heads/track_master ``` The merge value is invalid and calling git_branch_upstream on 'tracking_master' results in invalid reference error. It should do: ``` [branch "track_master"] remote = . merge = refs/heads/master ```
Vicent Martí 3405f787 2013-05-06T06:51:21 Merge pull request #1547 from ethomson/win32_stat p_stat() should follow symlinks on windows
Vicent Martí 03c28d92 2013-05-06T06:45:53 Merge pull request #1526 from arrbee/cleanup-error-return-without-msg Make sure error messages are set for most error returns
Vicent Martí d5e5bbd7 2013-05-06T06:45:40 Merge pull request #1524 from jamill/clone_tagopts By default do not set tagopt when cloning
Vicent Martí 450a78bf 2013-05-06T06:33:02 Merge pull request #1545 from ethomson/checkout_dirs_in_use allow checkout to proceed when a dir to be removed is in use (win32)
Russell Belfer 0ed3fa8a 2013-05-06T05:53:13 Merge pull request #1550 from nvloff/fix_typo_in_branch_h branch.h: fix typo in docs
Nikolai Vladimirov 72662202 2013-05-06T15:31:26 branch.h: fix typo in docs
Russell Belfer 3e96e339 2013-05-05T08:01:18 Merge pull request #1549 from nulltoken/fix/from_oids Strict/lax commit API
nulltoken 467cbec7 2013-05-05T16:48:34 commit: make create_from_oids() accept plain oid
nulltoken ce72e399 2013-05-05T16:45:38 commit: guard create() against not owned trees