summaryrefslogtreecommitdiff
path: root/src/checkout.c
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #3619 from ethomson/win32_forbiddenCarlos Martín Nieto2016-02-181-1/+1
|\ | | | | win32: allow us to read indexes with forbidden paths on win32
| * index: allow read of index w/ illegal entriesEdward Thomson2016-02-171-1/+1
| | | | | | | | | | | | | | | | | | Allow `git_index_read` to handle reading existing indexes with illegal entries. Allow the low-level `git_index_add` to add properly formed `git_index_entry`s even if they contain paths that would be illegal for the current filesystem (eg, `AUX`). Continue to disallow `git_index_add_bypath` from adding entries that are illegal universally illegal (eg, `.git`, `foo/../bar`).
* | Horrible fix for #3173.Arthur Schreiber2016-02-111-2/+3
| |
* | checkout: fix resource leakPatrick Steinhardt2016-02-091-1/+3
|/
* checkout: only consider nsecs when built that wayEdward Thomson2015-11-231-2/+1
| | | | | | | | When examining the working directory and determining whether it's up-to-date, only consider the nanoseconds in the index entry when built with `GIT_USE_NSEC`. This prevents us from believing that the working directory is always dirty when the index was originally written with a git client that uinderstands nsecs (like git 2.x).
* pool: Simplify implementationVicent Marti2015-10-281-2/+5
|
* diff: don't feed large files to xdiffEdward Thomson2015-10-051-1/+2
|
* git_futils_mkdir_*: make a relative-to-base mkdirEdward Thomson2015-09-171-1/+1
| | | | | | | | | | | | Untangle git_futils_mkdir from git_futils_mkdir_ext - the latter assumes that we own everything beneath the base, as if it were being called with a base of the repository or working directory, and is tailored towards checkout and ensuring that there is no bogosity beneath the base that must be cleaned up. This is (at best) slow and (at worst) unsafe in the larger context of a filesystem where we do not own things and cannot do things like unlink symlinks that are in our way.
* checkout: overwrite files with differing modesEdward Thomson2015-09-161-9/+6
| | | | | | | | | | | When a file exists on disk and we're checking out a file that differs in executableness, remove the old file. This allows us to recreate the new file with p_open, which will take the new mode into account and handle setting the umask properly. Remove any notion of chmod'ing existing files, since it is now handled by the aforementioned removal and was incorrect, as it did not take umask into account.
* checkout: use pathlist-based iteratorsEdward Thomson2015-08-301-1/+7
|
* iterator: use an options struct instead of argsEdward Thomson2015-08-281-10/+16
|
* Fix #3094 - improve use of portable size_t/ssize_t format specifiers.Matthew Plough2015-07-121-2/+2
| | | | The header src/cc-compat.h defines portable format specifiers PRIuZ, PRIdZ, and PRIxZ. The original report highlighted the need to use these specifiers in examples/network/fetch.c. For this commit, I checked all C source and header files not in deps/ and transitioned to the appropriate format specifier where appropriate.
* Rename FALLBACK to UNSPECIFIEDcmn/rename-unspecifiedCarlos Martín Nieto2015-06-251-1/+1
| | | | | Fallback describes the mechanism, while unspecified explains what the user is thinking.
* submodule: add an ignore option to statusCarlos Martín Nieto2015-06-221-1/+1
| | | | | | | | | | | | | This lets us specify in the status call which ignore rules we want to use (optionally falling back to whatever the submodule has in its configuration). This removes one of the reasons for having `_set_ignore()` set the value in-memory. We re-use the `IGNORE_RESET` value for this as it is no longer relevant but has a similar purpose to `IGNORE_FALLBACK`. Similarly, we remove `IGNORE_DEFAULT` which does not have use outside of initializers and move that to fall back to the configuration as well.
* submodule: don't let status change an existing instanceCarlos Martín Nieto2015-06-221-1/+1
| | | | | | As submodules are becomes more like values, we should not let a status check to update its properties. Instead of taking a submodule, have status take a repo and submodule name.
* submodule: remove the per-repo cacheCarlos Martín Nieto2015-06-221-7/+1
| | | | | | | | | | | | | Having this cache and giving them out goes against our multithreading guarantees and it makes it impossible to use submodules in a multi-threaded environment, as any thread can ask for a refresh which may reallocate some string in the submodule struct which we've accessed in a different one via a getter. This makes the submodules behave more like remotes, where each object is created upon request and not shared except explicitly by the user. This means that some tests won't pass yet, as they assume they can affect the submodule objects in the cache and that will affect later operations.
* diff: preserve original mode in the indexEdward Thomson2015-06-201-1/+1
| | | | | | | When updating the index during a diff, preserve the original mode, which prevents us from dropping the mode to what we have interpreted as on our system (eg, what the working directory claims it to be, which may be a lie on some systems.)
* checkout: allow workdir to contain checkout targetethomson/racy-diffcmn/racy-diffEdward Thomson2015-06-161-3/+14
| | | | | | When checking out some file 'foo' that has been modified in the working directory, allow the checkout to proceed (do not conflict) if 'foo' is identical to the target of the checkout.
* Rename GIT_EMERGECONFLICT to GIT_ECONFLICTEdward Thomson2015-05-291-3/+3
| | | | | | | | | | We do not error on "merge conflicts"; on the contrary, merge conflicts are a normal part of merging. We only error on "checkout conflicts", where a change exists in the index or the working directory that would otherwise be overwritten by performing the checkout. This *may* happen during merge (after the production of the new index that we're going to checkout) but it could happen during any checkout.
* checkout: allow baseline to be specified as indexEdward Thomson2015-05-111-5/+14
| | | | | | Allow the baseline to be specified as an index, so that users need not write their index to a tree just to checkout with that as the baseline.
* checkout: break case-changes into delete/addEdward Thomson2015-05-041-1/+2
| | | | | | | When checking out with a case-insensitive working directory, we want to change the case of items in the working directory to reflect changes that occured in the checkout target. Diff now has an option to break case-changing renames into delete/add.
* checkout: remove blocking dir when FORCEdEdward Thomson2015-05-041-3/+26
|
* Revert "Always checkout with case sensitive iterator"Edward Thomson2015-05-041-1/+1
| | | | This reverts commit 40d791545abfb3cb71553a27dc64129e1a9bec28.
* Fix some build warningsLeo Yang2015-04-281-1/+1
| | | | | | | | | | | | In checkout.c and filter.c we were casting a sub struct to a parent struct which breaks the strict aliasing rules in C. However we can use .parent or .base to access the parent struct to avoid the build warnings. In remote.c the local variable error was not initialized or updated in some cases. For unintialized error a build warning will be generated. So always keep error variable up-to-date.
* Merge pull request #3010 from ethomson/checkout_invalid_path_errCarlos Martín Nieto2015-03-241-1/+1
|\ | | | | checkout: report correct invalid path
| * checkout: report correct invalid pathEdward Thomson2015-03-231-1/+1
| |
* | config: borrow refcounted referencescmn/config-borrow-entryCarlos Martín Nieto2015-03-031-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This changes the get_entry() method to return a refcounted version of the config entry, which you have to free when you're done. This allows us to avoid freeing the memory in which the entry is stored on a refresh, which may happen at any time for a live config. For this reason, get_string() has been forbidden on live configs and a new function get_string_buf() has been added, which stores the string in a git_buf which the user then owns. The functions which parse the string value takea advantage of the borrowing to parse safely and then release the entry.
* | checkout: remove `GIT_CHECKOUT_SAFE_CREATE` as a strategyEdward Thomson2015-02-271-9/+8
| |
* | checkout: upgrade to `SAFE_CREATE` when no index fileEdward Thomson2015-02-271-0/+7
|/ | | | | | When the repository does not contain an index, emulate git's behavior and upgrade to `SAFE_CREATE`. This allows us to check out repositories created with `git clone --no-checkout`.
* filter: take `temp_buf` in `git_filter_options`Edward Thomson2015-02-191-3/+2
|
* filter: add `git_filter_list__load_ext`Edward Thomson2015-02-191-6/+12
| | | | | Refactor `git_filter_list__load_with_attr_reader` into `git_filter_list__load_ext`, which takes a `git_filter_options`.
* git_filter_opt_t -> git_filter_flag_tEdward Thomson2015-02-191-2/+2
| | | | | For consistency with the rest of the library, where an opt is an options *structure*.
* checkout: let the stream writer close the fdEdward Thomson2015-02-181-2/+1
|
* git_writestream: from git_filter_streamEdward Thomson2015-02-181-5/+5
|
* checkout: maintain temporary buffer for filtersEdward Thomson2015-02-171-0/+3
| | | | | Let the filters use the checkout data's temporary buffer, instead of having to allocate new buffers each time.
* checkout: stream the blob into the filtersEdward Thomson2015-02-171-39/+82
| | | | Use the new streaming filter API during checkout.
* Remove extra semicolon outside of a functionStefan Widgren2015-02-151-1/+1
| | | | | Without this change, compiling with gcc and pedantic generates warning: ISO C does not allow extra ‘;’ outside of a function.
* checkout: introduce GIT_CHECKOUT_DONT_WRITE_INDEXEdward Thomson2015-02-141-1/+4
|
* checkout: hold seen dir paths in a mapEdward Thomson2015-02-041-38/+39
|
* attrcache: don't re-read attrs during checkoutEdward Thomson2015-02-031-3/+10
| | | | | | | | | | | During checkout, assume that the .gitattributes files aren't modified during the checkout. Instead, create an "attribute session" during checkout. Assume that attribute data read in the same checkout "session" hasn't been modified since the checkout started. (But allow subsequent checkouts to invalidate the cache.) Further, cache nonexistent git_attr_file data even when .gitattributes files are not found to prevent re-scanning for nonexistent files.
* checkout: free last created directoryEdward Thomson2015-01-231-0/+1
|
* checkout: remove files before writing new onesEdward Thomson2015-01-201-8/+48
| | | | | | | On case insensitive filesystems, we may have files in the working directory that case fold to a name we want to write. Remove those files (by default) so that we will not end up with a filename that has the unexpected case.
* checkout: drop newline in error messageEdward Thomson2015-01-201-1/+1
|
* checkout: don't recreate previous directoryEdward Thomson2015-01-201-3/+19
| | | | | Don't bother trying to recreate the previously created directory during checkout, for a modest reduction in the number of stats.
* git_path_join_unrooted: return base lenEdward Thomson2015-01-201-1/+1
| | | | | | | The documentation for `git_path_join_unrooted` states that the base length will be returned, so that consumers like checkout know where to start creating directories instead of always creating directories at the directory root.
* checkout: introduce git_checkout_perfdataEdward Thomson2015-01-201-34/+77
| | | | | Checkout can now provide performance data about the number of (some) syscalls performed using an optional callback.
* Always checkout with case sensitive iteratorEdward Thomson2014-12-231-1/+1
| | | | | | | | | On a case-insensitive filesystem, we need to deal with case-changing renames (eg, foo -> FOO) by removing the old and adding the new, exactly as if we were on a case-sensitive filesystem. Update the `checkout::tree::can_cancel_checkout_from_notify` test, now that notifications are always sent case sensitively.
* checkout: disallow bad paths on win32Edward Thomson2014-12-161-1/+27
| | | | | | | | | | | | | | | Disallow: 1. paths with trailing dot 2. paths with trailing space 3. paths with trailing colon 4. paths that are 8.3 short names of .git folders ("GIT~1") 5. paths that are reserved path names (COM1, LPT1, etc). 6. paths with reserved DOS characters (colons, asterisks, etc) These paths would (without \\?\ syntax) be elided to other paths - for example, ".git." would be written as ".git". As a result, writing these paths literally (using \\?\ syntax) makes them hard to operate with from the shell, Windows Explorer or other tools. Disallow these.
* Fixed a couple Clang warningsPierre-Olivier Latour2014-11-101-0/+4
|
* iterator: submodules are determined by an index or treecmn/submodule-and-dirCarlos Martín Nieto2014-11-071-3/+9
| | | | | | | | | | | | We cannot know from looking at .gitmodules whether a directory is a submodule or not. We need the index or tree we are comparing against to tell us. Otherwise we have to assume the entry in .gitmodules is stale or otherwise invalid. Thus we pass the index of the repository into the workdir iterator, even if we do not want to compare against it. This follows what git does, which even for `git diff <tree>`, it will consider staged submodules as such.