Commit Briefs
fix option processing for 'got merge'
Don't make -C imply -c (a break statement was missing). Detect -an and -cn conflicts. Simplify by removing unneeded check for conflicting -aC (since -C requires -c, we can rely on the -ac conflict being detected). Update the man page to say -cC is allowed.
reword user-facing error message which mentions "fast-forward"
For user-facing messages it is better to avoid technical jargon like this and instead spell out what the fast-forward situation implies: that one branch is already based on another. ok jamsek
Implement fast-forward merges.
Split part of got_worktree_merge_prepare into a new function, got_worktree_merge_write_refs, since that part doesn't make sense in the fast-forward case. ok stsp@
make 'got tree /' succeed in a work tree
Previously, this command would trigger an error: got: /: bad path
dropping unnecessary strlen()s
ok jamsek, stsp
avoid strlen in for(;;)
ok jamsek, stsp
got, tog: correctly skip HEAD in build_refs_str()
s[strlen(s)] == '\0' is banally always true, the intent was to not skip refs that starts with "HEAD". style nit / ok stsp@
make 'got merge -c' fail even if new changes only affect unrelated paths
Otherwise, 'got merge -c' can silently revert already committed changes. Also fix GOT_ERR_MERGE_COMMIT_OUT_OF_DATE by giving it a value distinct from GOT_ERR_MERGE_STAGED_PATHS. Patch by James Cook
make "got merge" refuse to run if a merge is in progress and the -a or
-c option wasn't passed. Patch by James Cook.
simplify ancestry checks in checkout, update, rebase, and merge
No behaviour change as the end result of the rewritten checks should be the same as before. We are just doing less work where possible. Patch by James Cook
got: flush stdout before printing the error in main()
Since standard error is unbuffered, it could happen that the error string is printed immediately while the output from the subcommand is stuck in a buffer and written later. So flush() standard output before printing the error message. Problem reported by naddy@, ok stsp@
consistently close the struct repository on every cmd_*()
Spotted while looking for leaks using Otto' malloc() new leaks detection. Harmless in practice since we just forgot to call got_repo_close() when terminating in some cmd_*() functions, but still a leak. ok stsp@
fix crash in got log due to NULL-deref in got_object_blob_close
Reported by Mikhail (thanks!), ok jamsek
Close the message template file before calling edit_logmsg().
Fixes a race condition on NFS where the file's modify time may change while the file is being edited, causing the editor to complain. OK stsp
portable: configure: split out dependencies
Rather than assume all dependencies are required for all programs, split them out. This will make packaging easier, as well as splitting the code to use subprojects. Note that due to the use of config.h semantics, in most cases the got_compat.h header file is now at the top of the .c file it is included in, so that it can handle the system header inclusion properly.
histedit_parse_list: avoid needless free(line)
getline(3) allows to safely re-use the storage. While here rename `size' to `linesize', `len' to `linelen', and properly initialize `linesize' to zero; suggested by tb@ ok tb@
fall back to vi(1) instead of ed(1) if neither EDITOR nor VISUAL are set
ed users are reading files with their minds rather then their eyes, and might therefore be missing important visual clues we write into files before the user gets to edit them. Use of vi(1) ensures that such clues will not be missed.
portable: rework SHA detection
Simply the SHA detection by not predicating on libcrypto, but instead checking individual header files.
portable: remove sha1.h; found portably
Remove sha1.h as this is found portably across systems.
include sha2.h too where sha1.h is included
In preparation for wide sha256 support; stsp@ agrees. Change done mechanically with find . -iname \*.[cy] -exec sam {} + X ,x/<sha1\.h>/i/\n#include <sha2.h>
fix 'got merge' so it parses gitconfig for author
cmd_merge is the only subcommand that may create commits that doesn't parse the git config files, thusly failing for users without GOT_AUTHOR defined. Problem reported by James Cook who also provided an initial test case, thanks! ok jamsek