lib/worktree.c


Log

Author Commit Date CI Message
Stefan Sperling 0a22ca1a 2020-09-23T22:31:00 make 'got histedit' collapse folded add+delete operations into a no-op If a merged commit wants to delete a locally added file, and this locally added file matches the content which was deleted in the commit being merged, we can go ahead with the deletion because there is no risk of data loss. fixes the histedit problem reported by jrick on freenode
Stefan Sperling 50b0790e 2020-09-11T17:04:57 add per-worktree got.conf(5) file in the .got directory; ok millert
Christian Weisgerber 0823ffc2 2020-09-10T20:44:40 use modern POSIX timestamp fields in struct stat ok stsp
Stefan Sperling 766841c2 2020-08-13T19:12:57 add -s option to 'got remove' which deletes files in a particular status This makes it easy to deal with files that were deleted from disk by external tooling which modified the work tree. Such files are left in missing (!) status and can now be marked for deletion in bulk via 'got rm -s\! -R .' For consistency, modified (M) files can now be removed with 'got rm -s M' which implies 'got rm -f'. Prompted by feedback from krw@
Stefan Sperling f2b0a8b0 2020-07-31T12:54:34 fix committing file additions from a work tree with a path prefix New files were added under the wrong tree in the repository if the work tree has a path prefix. Fix this problem and catch it in the existing commit_with_path_prefix regression test.
Stefan Sperling 69d57f3d 2020-07-31T11:19:29 fix spurious 'got cherrypick' error with a path prefix and an empty tree If the work tree's path prefix does not exist in the first of the two trees, then 'got cherrypick' failed with "no such entry found in tree". But this is a legitimate situation, as shown in the new test added here. The first tree could be the empty tree, for example, which should result in 'got cherrypick' adding all files from the second tree instead of complaining about a non-existent path-prefix directory in the first tree.
Stefan Sperling b66cd6f3 2020-07-31T10:33:34 display more context info in "no such entry found in tree" error messages
Stefan Sperling b2118c49 2020-07-28T20:17:19 Add a 'got info' command which displays work tree meta-data. Remove the alias 'got in' for 'got init'. The 'in' alias was too close to either 'init' or 'info'. ok tracey, millert
Stefan Sperling 283102fc 2020-07-23T14:22:41 remove the symlink conflict header feature; it causes noise for little benefit
Stefan Sperling f9eec9d5 2020-07-23T14:22:40 rename get_symlink_status() to get_symlink_modification_status() for clarity
Stefan Sperling f179e66d 2020-07-23T14:22:40 use a shortcut in get_file_status() for detecting symlinks appearing on disk
Stefan Sperling fda8017d 2020-07-23T14:22:40 move deeply indented code from unstage_path() to a new unstage_hunks() helper
Stefan Sperling 36bf999c 2020-07-23T14:22:40 make 'got unstage -p' work with symlinks
Stefan Sperling dfe9fba0 2020-07-23T14:22:40 remove merge_blob() fallback from merge_symlink(); let callers handle this
Stefan Sperling 75f0a0fb 2020-07-23T14:22:39 stop reinstalling symlinks after commit; 'got update' can handle that
Stefan Sperling 35213c7c 2020-07-23T14:22:39 forbid bad symlinks; add -S option to 'got commit' and 'got stage' to allow them
Stefan Sperling 3c1ec782 2020-07-23T14:22:38 put checks for bad symlink target paths into a dedicated function
Stefan Sperling ea7786be 2020-07-23T14:22:38 make 'got unstage' work with symlinks
Stefan Sperling b7422a2f 2020-07-23T14:22:38 stop using realpath(3) to resolve a symlink target in install_symlink() We should not resolve a symlink target path recursively when installing a symlink in the work tree. We want to handle this symlink's target, not the end result of following a chain of symlinks in case such links already exist.
Stefan Sperling 369fd7e5 2020-07-23T14:22:38 add support for symlinks to 'got revert -p'
Stefan Sperling fa3cef63 2020-07-23T14:22:37 make 'got stage -p' work with symlinks
Stefan Sperling b448fd00 2020-07-23T14:22:37 fix wrong function name in an error message
Stefan Sperling 0aeb8099 2020-07-23T14:22:37 set a staged file type and handle it separately from the on-disk file type
Stefan Sperling c631b115 2020-07-23T14:22:36 make staging of symlinks work
Stefan Sperling 6131ab45 2020-07-23T14:22:36 remove pointless error checking in got_fileindex_entry_filetype_set()
Stefan Sperling 3b9f0f87 2020-07-23T14:22:35 handle additional symlink conflicts and report skipping of unversioned files
Stefan Sperling c90c8ce3 2020-07-23T14:22:35 preserve unversioned files when merging added symlinks
Stefan Sperling 65b05cec 2020-07-23T14:22:35 add an output argument to create_fileindex_entry() Avoids a pointless search of the file index in the case the caller needs to use the newly created file entry.
Stefan Sperling 6e1eade5 2020-07-23T14:22:35 fix 'got revert' progress output for symlinks
Stefan Sperling 2e1fa222 2020-07-23T14:22:34 give bad symlinks a dedicated file type in the file index
Stefan Sperling b88d214a 2020-07-23T14:22:34 use default file permissions when installing "bad" symlinks
Stefan Sperling 960094b4 2020-07-23T14:22:34 resolve an XXX remark in merge_file_cb()
Stefan Sperling d219f183 2020-07-23T14:22:34 test_cherrypick_symlink_conflicts forgot to run 'got add' on a file; fix this
Stefan Sperling 993e2a1b 2020-07-23T14:21:31 handle symlink deletion and symlink conflicts during 'got update'
Stefan Sperling 56d815a9 2020-07-23T14:21:31 We must null-terminate the result of readlink(3) in merge_symlink().
Stefan Sperling 11cc08c1 2020-07-23T14:21:31 handle symlink conflicts by installing a file that contains conflict markers
Stefan Sperling 526a746f 2020-07-23T14:21:31 handle newly added symlinks during 'got cherrypick'
Stefan Sperling 5a1fbc73 2020-07-23T14:21:30 make it possible to fix "bad" symlinks with ln -sfh + got commit + got update
Stefan Sperling bd6aa359 2020-07-23T14:21:30 convert bad symlinks to regular files during 'got commit'
Stefan Sperling 3d9a4ec4 2020-07-23T14:21:30 add symlink support to 'got commit'
Stefan Sperling af57b12a 2020-07-23T14:21:30 add symlink support to 'got cherrypick'; test non-conflict cases only for now
Stefan Sperling 7d61d891 2020-07-23T14:21:29 fix checkout of symlinks when a relative work tree path is given
Stefan Sperling 906c123b 2020-07-23T14:21:29 do not allow symlinks pointing into the .got directory; noticed by semarie
Stefan Sperling b15bc87b 2020-07-23T14:21:29 fix memory leak in install_symlink() error path; spotted by semarie
Stefan Sperling ef68ca6f 2020-07-23T14:21:29 add missing dirname(3) error check; found by semarie
Stefan Sperling a919d5c4 2020-07-23T14:21:27 make 'got rm' work on symlinks; test case written by tracey
Stefan Sperling 00bb5ea0 2020-07-23T14:21:27 make 'got add' work on symlinks and let 'got status' display them
Stefan Sperling f35fa46a 2020-07-23T14:21:27 add symlink support to 'got update'
Stefan Sperling 0ab20ee9 2020-07-23T14:21:27 fix handling of symlinks to a nonexistent target
Stefan Sperling 8ba819a3 2020-07-23T14:21:27 let 'got checkout' create symlinks in a work tree
Stefan Sperling 3665fce0 2020-07-13T12:58:54 display affected file path in ERR_FILE_OBSTRUCTED error messages
Stefan Sperling b737c85a 2020-06-26T10:10:52 fix endless loop introduced in 3143d852; programming is hard!
Stefan Sperling 3143d852 2020-06-25T06:53:54 fix ignores when a path is passed to 'got status' Problem reported by semarie, who also provided initial regression test code. ok semarie
Stefan Sperling 054041d0 2020-06-24T17:15:00 replace the update_blob_fileindex_entry() helper function This makes it easier to tell in which code paths we are expecting to handle a potential 'ie' NULL pointer and avoids a pointless search of the file index.
Stefan Sperling 5a58a424 2020-06-23T16:10:01 plug a memory leak in delete_blob()
Stefan Sperling 5036ab18 2020-04-18T18:40:00 make 'got update' skip conflicted files ok millert@
Stefan Sperling 678ade17 2020-03-22T15:44:34 don't error out if rebase sees no merged paths; elide the commit instead
Stefan Sperling ba580f68 2020-03-22T15:08:33 prevent 'got commit' from comitting empty sub-directories; found by tracey
Stefan Sperling 3969253a 2020-03-07T19:01:44 remove implicit entry update from got_fileindex_entry_alloc(); just alloc
Tracey Emery 15341bfd 2020-03-05T14:39:37 trim directories in got remove -R This is a racy solution that needs to be properly implemented in the future. ok stsp
Stefan Sperling de05890f 2020-03-05T10:53:53 fix histedit 'rebase commit ID mismatch' error when splitting a commit Commit IDs on histedit's temporary branch can change arbitrarily because the user may create new commits on this branch while editing past commits. So there is no point in trying to verify these IDs like we do during rebase. Add a test case which demonstrates the problem.
Stefan Sperling 63f810e6 2020-02-29T07:54:55 when "bad path" errors occur, always show the path in question
Tracey Emery 3c24af98 2020-02-07T21:06:03 fix segfault in got backout which include deleted files
Stefan Sperling 6201aef3 2020-02-02T09:20:56 ignore EROFS during checkout for repositories on read-only filesystems
Stefan Sperling a46b9f33 2020-01-28T12:09:03 fix a bug where 'got revert -R' failed on added subtrees The command could fail with "got: no such entry found in tree". This problem is reproduced by the regression test added in this commit. This happened because file index entries were processed in the wrong order by diff_fileindex_dir(). To fix this, keep removed entries in the RB tree and skip them when the file index is written out, rather than removing entries from the RB tree immediately causing side-effects for RB_NEXT and friends.
Stefan Sperling 867630bb 2020-01-17T11:54:27 Sleep for one nanosecond after syncing the file index to disk Ensures that files modified after got exits have a different timestamp from the one which was recorded in the file index. Previously, 'got status' did not always detect such files as modified. Problem reported by Steven McDonald.
Stefan Sperling bb51a5b4 2020-01-13T10:28:58 add -E option to 'got checkout' allowing use of a non-empty work tree path needed by and ok kn@
Stefan Sperling 5aa81393 2020-01-06T19:38:23 add copyright year for files already touched in 2020
Stefan Sperling e51d7b55 2020-01-04T08:35:17 prevent rebase with an out-of-date work tree
Stefan Sperling 7f47418f 2019-12-20T15:54:59 make 'got checkout' and 'got update' work with read-only repositories but warn users about the garbage collection problem
Stefan Sperling fdcb7daf 2019-12-15T11:15:48 always unlink merged temporary files if an error occurs
Stefan Sperling 2ad902c0 2019-12-15T11:03:52 use fchmod() instead of chmod() to tweak permissions of a merged temp file
Stefan Sperling 32d2fb48 2019-12-15T10:53:14 add missing error checks to an openat() call
Stefan Sperling 60522982 2019-12-15T10:35:13 fix wrong function names in errno error messages
Stefan Sperling 886cec17 2019-12-15T10:33:27 close races with concurrent filesystem modification when reading ignore files
Tracey Emery 70e3e7f5 2019-12-13T20:05:57 add -k option to 'got remove' to keep files on disk ok stsp
Stefan Sperling ab0d4361 2019-12-13T12:00:10 fix leak in an error path of get_file_status()
Stefan Sperling 882ef1b9 2019-12-13T11:19:26 fix fstatat() and openat() error checking in get_file_status()
Stefan Sperling 3d35a492 2019-12-13T11:10:25 avoid opening the file in get_file_status() if possible
Stefan Sperling 82223ffc 2019-12-13T11:09:40 fix wrong function name in errno error message
Stefan Sperling 12463d8b 2019-12-13T11:52:18 address some of the file descriptor vs. path races in status callbacks
Stefan Sperling 7f91a133 2019-12-13T11:05:04 open files during status crawl in a race-free way, too
Stefan Sperling 6fc93f37 2019-12-13T10:36:41 prevent the status crawl from racing with paths changing in the filesystem
Stefan Sperling f4d199c9 2019-12-13T10:02:48 oops, fix previous
Stefan Sperling 43ff8261 2019-12-13T10:01:49 check for fclose() failure in get_file_status()
Stefan Sperling 1338848f 2019-12-13T09:38:52 open the file just once in get_file_status()
Tracey Emery f2a9dc41 2019-12-13T00:29:28 add -R option to 'got remove' for recursive deletion ok stsp
Stefan Sperling dbb83fbd 2019-12-13T00:27:57 there's no need to store a directory path in struct schedule_addition_args ok tracey
Tracey Emery 022fae89 2019-12-06T16:18:26 Introduce -I to cmd_add to disregard ignores when adding recursively. Expand add.sh tests. Update TODO.
Stefan Sperling 56e0773d 2019-11-28T02:32:58 convert tree entries from SIMPLEQ to an array
Stefan Sperling 3fd4eb5a 2019-11-23T10:13:53 fold a function call onto a single line
Stefan Sperling 4e68cba3 2019-11-23T10:11:54 add -R option to 'got add' for recursive addition (patch by Tracey Emery)
Stefan Sperling 6dd1ece6 2019-11-10T11:32:03 when an object id string is bad, include the bad string in the error message
Stefan Sperling 7b5dc508 2019-10-28T10:31:50 fix staging of multiple files with -p ok semarie
Stefan Sperling 8b692cd0 2019-10-21T09:04:57 remove lock files, as intended, when reintegrate gets aborted
Stefan Sperling f69721c3 2019-10-21T09:04:57 show base commit hash and omit filenames in conflict markers
Stefan Sperling 46f68b20 2019-10-19T11:06:56 show file mode differences when diffing trees
Stefan Sperling 523b8417 2019-10-19T11:06:55 handle xbit-only changes during 'got update'
Stefan Sperling 1ebedb77 2019-10-19T11:06:55 teach 'got commit' to tweak the executable bit of a file
Stefan Sperling 2822a352 2019-10-15T11:38:27 add 'got integrate' command