Commits


replace date, strftime %G-%m-%d with %F Use the more predictable %F, aka %Y-%m-%d, instead of %G-%m-%d. %G follows the definition of ISO-8601 week-based year, which is weird. In particular, 2024 is one of such years with weird behaviour: $ date -jf %Y-%m-%d +"%F %G-%m-%d" 2024-12-30 2024-12-30 2025-12-30 Diff from Lucas Gabriel Vuotto (thanks!); stsp agrees


make 'got status' display interrupted rebase, histedit, and merge operations When an operation is interrupted add a trailing message to status output which displays the operation and branches involved. This information will be useful when diagnosing problem reports and it helps new users with contextualizing multi-operation work tree state. ok op@


simplify usage of the 'mesg' histedit script command The 'mesg' script command now requires a commit ID as its argument, rather than being tied to a preceding 'pick' or 'edit' command. The old model was too confusing for new users, in particular for people used to Git's rebase -i squash semantics. The 'mesg' command is now semantically equivalent to the 'pick' command and additionally opens the log message in an editor. The new syntax is simpler to use but also requires that we drop support for one-line log messages inside the histedit script, with a commit ID taking its place in the argument space. We don't believe this feature was used much, and that a simplified usage model is more beneficial overall. Patch by Lorenz (xha) ok jamsek


replace "(cd path && git cmd)" with "git -C path cmd" This matches the existing use of "got -r path cmd" and "git_commit path args".


allow modified files to be deleted during merges if content exists in the repo This makes histedit folding work when a file is modified by commit A and then deleted in commit B, with A being folded into B. Problem reported by naddy@


regress/cmdline: fix handling of unexpected success Diff from James Cook, thanks!


when aborting rebase/histedit/merge, unlink files added by merged changes Otherwise we leave unversioned files behind in the work tree which may interfere with new attempts to rebase or merge the changes again. Problem found by + ok naddy@


extent regress test to check content after histedit fold operation


support histedit fold operations which delete a file and then add it again problem found by naddy@ ok op@


add xfail test for histedit folding of delete followed by add If a file is deleted, then in modified form added again, folding should restore the file with its new contents. ok stsp


regress: replace "sed -i" with ed(1) for portable in-place editing "sed -i" is fundamentally unportable. GNU and OpenBSD sed(1) treat the extension for the backup file as an optional argument and use "sed -i" for no backup file. FreeBSD sed(1) treats the extension as an obligatory argument and uses "sed -i ''" for no backup file. There is no single syntax that works for both. ok stsp op


got: add 'got histedit -d' flag to drop all commits Like -f, except drop all commits. Discussed with op and stsp on irc. ok stsp@


use VISUAL instead of EDITOR in histedit_mesg_filemode_change VISUAL is preferred and relying on EDITOR may cause test failures in some environments. pointed out by op and jamsek


simplify file content comparison in a regress test; suggested by op@


fix histedit -m on a commit which only changes filemode bits The commit was being miscategorized as a no-op change and dropped. Now the commit is retained and its log message is updated as expected. ok op, jamsek


regress: consistently use ed -s didn't know about -s when writing those tests; saves some output redirection. ok jamsek


respect umask when creating or changing files and directories This behaviour is already documented in got-worktree(5) but wasn't actually implemented. ok stsp@


reset committer during rebase and histedit ok op@


regress: add missing return in error path


histedit: make sure mesg is only used after pick or edit It doesn't really make sense to use mesg after a fold or drop, or after another mesg. it currently "works" as intended, but the behaviour is confusing and not useful, better abort the operation as it's probably not what the user intended. Suggested by and ok stsp@


use test(1) -eq and -ne to compare integers, and reduce quoting This brings the rest of the regression test scripts in line with patch.sh.


FreeBSD's ed(1) does not accept "0i"; use the equivalent "1i" instead


add test for merge result when lines are inserted at the top of a file Based on a patch by Omar Polo


ignore unversioned files while aborting rebase, histedit, merge or operations ok jrick


add histedit -e option which runs the 'edit' script command for every commit ok jrick