Commit Briefs
portable: linux: use default git libexec
Define a standard path to where git stores its libexec helpers. This is always going to be hit-and-miss hard-coded like this, but will suffice for now. Tested on ubuntu 22.04
portable: getprocname: program_invocation_short_name
This is needed for gitwrapper which will fail if its program name cannot be detected properly.
portable: gotd/gitwrapper: update for libs
Bring gotd and gitwrapper closer to how libraries are detected.
portable: gotd: listen
Include listen.c; make it portable.
portable: enable gotctl (via --enable-gotd)
This builds gotctl, for the moment via --enable-gotd
portable: build gotsh when --enable-gotd passed
When building gotd, also build gotsh.
portable: enable compiling gotd
This enables gotd -- for now, this is opt-in at compile-time, via: ./configure --enable-gotd
sync files from diff.git dc306c6bd88271ab911e205539974da98be82d17
This restores the traditional diff -p behaviour in Got.
prevent overlapping repo and work tree in 'got checkout'
Some people are eager to try to make Got work just like Git by overlaying the repository and work tree. This causes problems with unveil conflicts at run-time. Fail as early as possible during 'got checkout' when users attempt this. cosmetic tweaks + ok op@
add a test case which removes a missing locally-added file
Based on a patch by gonzalo@ ok op@
fix deletion of missing locally-added files
If a locally added file in A status gets deleted from disk it will move into missing ! status. If the user then decides to delete the file we must remove the file index entry immediately rather than flagging the file for removal during the next commit operation. The file was never committed and lacks a base-blob and base-commit, so it cannot be removed during the next commit. As a result the commit operation was reporting a bogus "out of date" error. Found while diagnosing a related bug reported by gonzalo@ ok op@
prevent a double-free in got_worktree_commit
If creating the /tmp display diff for a commitable item failed we would free the commitable item while it was already on the path list. Later on when the path list was freed in got_worktree_commit() a double-free would be detected and the program would be aborted. Found by gonzalo@ ok op@
make gotd flush pending messages before disconnecting the client upon success
This prevents gotd from closing the client connection before ref-update status reports have been sent. Seen while testing gotd on Linux, though I see no obvious reason why this race would not trigger on OpenBSD.
tog: don't show the base commit marker in limit view
The limit commit queue is invariably filled with different commits to the queue containing all commits, so the index of the work tree's base commit in the real queue corresponds to a different commit in the limit queue. As such, the marker is drawn on an incorrect commit. Rather than fix this to draw the marker on the correct commit if it happens to be in the limit queue, don't draw the marker at all in limit view. As pointed out by Mikhail on the list, this information is not wanted in the limit view. Patch and report by Mikhail.
gotsh: do not set POLLOUT flag when there is no data to send
Prevent an endless polling loop on Linux where POLLOUT and POLLHUP can both be reported via pollfd revents.
don't include sys/cdefs.h
"thou shalt not include sys/cdefs.h because it is not standardized", and in this case is not really needed either.
document that the log -d option implies log -P
We did consider making -d and -P options conflict but doing so would not be very helpful. Instead, document -d as a superset of -P. ok op, jamsek
gotwebd: fix branches modification time with show_repo_age off
If show_repo_age is set to off, got_get_repo_age() returns without setting the timestamp. got_get_repo_age() is also used by the branch listing to show how old they are however, and we end up rendering the stack garbage. Instead, respect `show_repo_age off' one layer above, and always return a timestamp in got_get_repo_age(). While here, initialize the timestamp to zero so it's set also in case of failures. Issue reported on IRC by xs, thanks!