src/checkout.c


Log

Author Commit Date CI Message
Russell Belfer ad9a921b 2012-11-08T17:05:07 Rework checkout with new strategy options This is a major reworking of checkout strategy options. The checkout code is now sensitive to the contents of the HEAD tree and the new options allow you to update the working tree so that it will match the index content only when it previously matched the contents of the HEAD. This allows you to, for example, to distinguish between removing files that are in the HEAD but not in the index, vs just removing all untracked files. Because of various corner cases that arise, etc., this required some additional capabilities in rmdir and other utility functions. This includes the beginnings of an implementation of code to read a partial tree into the index based on a pathspec, but that is not enabled because of the possibility of creating conflicting index entries.
Russell Belfer 32def5af 2012-10-24T17:37:07 Fix checkout behavior when its hands are tied So, @nulltoken created a failing test case for checkout that proved to be particularly daunting. If checkout is given only a very limited strategy mask (e.g. just GIT_CHECKOUT_CREATE_MISSING) then it is possible for typechange/rename modifications to leave it unable to complete the request. That's okay, but the existing code did not have enough information not to generate an error (at least for tree/blob conflicts). This led me to a significant reorganization of the code to handle the failing case, but it has three benefits: 1. The test case is handled correctly (I think) 2. The new code should actually be much faster than the old code since I decided to make checkout aware of diff list internals. 3. The progress value accuracy is hugely increased since I added a fourth pass which calculates exactly what work needs to be done before doing anything.
Russell Belfer 331e7de9 2012-10-24T17:32:50 Extensions to rmdir and mkdir utilities * Rework GIT_DIRREMOVAL values to GIT_RMDIR flags, allowing combinations of flags * Add GIT_RMDIR_EMPTY_PARENTS flag to remove parent dirs that are left empty after removal * Add GIT_MKDIR_VERIFY_DIR to give an error if item is a file, not a dir (previously an EEXISTS error was ignored, even for files) and enable this flag for git_futils_mkpath2file call * Improve accuracy of error messages from git_futils_mkdir
Ben Straub a9db123b 2012-10-31T10:14:13 Checkout: remove duplicate 100% progress report
Ben Straub 2dae54a9 2012-10-19T20:24:15 Improve clone sample's formatting
Ben Straub 9c05c17b 2012-10-19T20:05:18 Checkout progress now reports completed/total steps
Ben Straub 63afb005 2012-10-19T19:33:23 Remove third stage from checkout progress reporting Also, now only reporting checkout progress for files that are actually being added or removed.
Ben Straub 45b60d7b 2012-10-18T15:17:12 Correct progress reporting from checkout
Ben Straub 30a46ab1 2012-10-18T14:04:14 Adjust for rebase
nulltoken 0ae81fc4 2012-10-17T15:30:22 index: remove read_tree() progress indicator git_index_read_tree() was exposing a parameter to provide the user with a progress indicator. Unfortunately, due to the recursive nature of the tree walk, the maximum number of items to process was unknown. Thus, the indicator was only counting processed entries, without providing any information how the number of remaining items.
Ben Straub 1f7c7418 2012-10-17T10:15:07 Remove dead code
Ben Straub 80642656 2012-10-16T20:23:10 Convert checkout_* to use progress callback
Ben Straub 2c8bbb27 2012-10-16T20:16:21 Convert checkout_index to use progress callback
nulltoken 8b05bea8 2012-10-19T17:07:39 errors: deploy GIT_EORPHANEDHEAD usage
Russell Belfer 52a61bb8 2012-10-17T14:10:23 Fix minor bugs Fixed no-submodule speedup of new checkout code. Fixed missing final update to progress (which may go away, I realize). Fixed unused structure in header and incorrect comment.
Russell Belfer e48bb71b 2012-10-17T10:44:38 Skip submodule checkout pass if no submodules Skip the third pass of checkout (where submodules are checked out) if the earlier passes found no submodules to be checked out.
Russell Belfer 0d64bef9 2012-10-05T15:56:57 Add complex checkout test and then fix checkout This started as a complex new test for checkout going through the "typechanges" test repository, but that revealed numerous issues with checkout, including: * complete failure with submodules * failure to create blobs with exec bits * problems when replacing a tree with a blob because the tree "example/" sorts after the blob "example" so the delete was being processed after the single file blob was created This fixes most of those problems and includes a number of other minor changes that made it easier to do that, including improving the TYPECHANGE support in diff/status, etc.
Russell Belfer 95f5f1e6 2012-10-02T13:57:15 Cleanup TYPECHANGE support This is just some cleanup code, rearranging some of the checkout code where TYPECHANGE support was added and adding some comments to the diff header regarding the constants.
Russell Belfer fbec2fb9 2012-09-28T14:32:33 Fix checkout to know about TYPECHANGE diffs
Russell Belfer fade21db 2012-09-28T13:39:34 Improve error propogation in checkout
Russell Belfer bae957b9 2012-09-25T16:31:46 Add const to all shared pointers in diff API There are a lot of places where the diff API gives the user access to internal data structures and many of these were being exposed through non-const pointers. This replaces them all with const pointers for any object that the user can access but is still owned internally to the git_diff_list or git_diff_patch objects. This will probably break some bindings... Sorry!
Michael Schubert d75074f4 2012-09-22T12:29:16 Fix -Wmaybe-uninitialized warning
nulltoken 9e592583 2012-09-19T12:23:47 checkout: add notification callback for skipped files
nulltoken 9ac8b113 2012-09-20T14:06:49 Fix MSVC amd64 compilation warnings
nulltoken 28abf3db 2012-09-20T11:41:49 checkout: prefer mode_t type usage over int
nulltoken 39783719 2012-09-17T20:27:28 checkout: Mimic git_diff_options storage of paths
nulltoken 5e4cb4f4 2012-09-17T10:38:57 checkout : reduce memory usage when not filtering
nulltoken 5af61863 2012-09-14T11:15:49 checkout: drop git_checkout_reference()
nulltoken c214fa1c 2012-09-06T15:15:46 checkout: segregate checkout strategies
nulltoken e93af304 2012-08-24T10:40:17 checkout: introduce git_checkout_index()
nulltoken 3aa443a9 2012-08-20T16:56:45 checkout: introduce git_checkout_tree()
nulltoken 35d2e449 2012-08-20T11:26:02 checkout: cleanup misplaced declaration
Russell Belfer 97a17e4e 2012-08-24T12:19:22 Fix valgrind warnings and spurious error messages Just clean up valgrind warnings about uninitialized memory and also clear out errno in some cases where it results in a false error message being generated at a later point.
nulltoken 9d7ac675 2012-08-21T11:45:16 tree entry: rename git_tree_entry_attributes() into git_tree_entry_filemode()
Ben Straub 5f4d2f9f 2012-07-31T19:49:19 Checkout: fix problem with detached HEAD.
Ben Straub 8e4aae1a 2012-07-31T10:44:42 Checkout: handle file modes properly. Global file mode override now works properly with the file mode stored in the tree node.
Ben Straub 7e02c7c5 2012-07-31T08:45:42 Checkout: save index on checkout.
Ben Straub 4bf51156 2012-07-30T14:52:46 Enable stats on git_index_read_tree. Replace with the contents of git_index_read_tree_with_stats() and improve documentation comments.
Ben Straub f1587b97 2012-07-30T14:37:40 Checkout: use git_index_read_tree_with_stats. New variant of git_index_read_tree that fills in the 'total' field of a git_indexer_stats struct as it's walking the tree.
Ben Straub b31667fb 2012-07-27T20:29:06 Checkout: add head- and ref-centric checkouts. Renamed git_checkout_index to what it really was, and removed duplicate code from clone.c. Added git_checkout_ref, which updates HEAD and hands off to git_checkout_head. Added tests for the options the caller can pass to git_checkout_*.
Ben Straub b494cdbd 2012-07-27T11:50:32 Checkout: handle deeply-nested submodules better. Now creating intermediate directories where the submodule is deep, like "src/deps/foosubmodule".
Ben Straub 6eb240b0 2012-07-26T19:09:37 Checkout: use caller's flags for open()
Ben Straub 095ccc01 2012-07-26T16:31:49 Checkout: implementation of most options
Ben Straub b401bace 2012-07-26T13:12:21 Restructure for better checkout options * Removed the #define for defaults * Promoted progress structure to top-level API call argument
Ben Straub ef9905c9 2012-07-26T12:58:44 checkout: introduce git_checkout_opts Refactor checkout into several more-sensible entry points, which consolidates common options into a single structure that may be passed around.
Ben Straub dc03369c 2012-07-21T20:12:28 checkout: create submodule dirs
Ben Straub 8651c10f 2012-07-17T19:57:37 Checkout: obey core.symlinks.
Ben Straub 1d68fcd0 2012-07-16T16:16:11 Checkout: handle symlinks. Includes unfinished win32 implementation.
Ben Straub 9587895f 2012-07-16T12:06:23 Migrate code to git_filter_blob_contents. Also removes the unnecessary check for filter length, since git_filters_apply does the right thing when there are none, and it's more efficient than this.
Ben Straub 41ad70d0 2012-07-16T11:32:24 Use git_blob__getbuf.
Ben Straub dc1b0909 2012-07-13T16:44:13 Create filtered_blob_contents out of parts on hand.
Ben Straub 81167385 2012-07-11T15:33:19 Fix compile and workings on msvc. Signed-off-by: Ben Straub <bstraub@github.com>
Ben Straub 822d9dd5 2012-07-11T09:50:12 Remove duplicate of git_repository_head_tree.
Ben Straub 8fb5e403 2012-07-10T08:58:40 Plug leak.
Ben Straub aed794d0 2012-07-09T20:32:26 Checkout: only walk tree once while checking out.
Ben Straub 4a26ee4f 2012-07-09T20:09:28 Checkout: reindent, fix uninit. variable.
Ben Straub 0e874b12 2012-07-06T10:22:45 Apply filters on checkout.
Ben Straub 24b0d3d5 2012-06-25T16:02:16 Checkout: read blob objects to file. Properly handling file modes. Still needs line- ending transformations.
Ben Straub ec532d5e 2012-06-21T14:54:12 Checkout: initial tree walkers.
Ben Straub 14741d62 2012-06-21T11:13:19 Clone: new home for git_checkout_force.