Commit Briefs

2959f41846 Omar Polo

gotwebd: add the magic ".git" handling

like gotd, assume an implicit ".git" if the repo doesn't exist. Merge gotweb_init_repo_dir() and gotweb_load_got_path() since the former only sets repo_dir->name, and we don't realistically know the name until we've opened the directory. While here, unbreak the git worktree handling too. Realistically, moving forward, we should issue a redirect to the canonical URL or at least set the correct metadata in the document to avoid having multiple URLs for the same content. ok stsp; tiny change to repo_dir->name handling done after the ok.


99ed25deb7 Omar Polo

regress: allow to customize GOT_TEST_HTTP_PORT


60ac05357c Stefan Sperling

redo "got-fetch-http: fix GET request URL", without breaking tests

My previous fix for ~user in SSH URLs broke ~user in HTTP URLs, as used on sourcehut. Sanitize the amount of leading and embedded slashes in URLs to make things work in all cases. The root cause of the test problem with naddy's previous diff was likely in the http-server script itself, where a request like GET //repo//info/refs?service=git-upload-pack somehow ended up as GET $testroot///info/refs. We work around this here by avoiding the double slashes.


fe55fe41eb Christian Weisgerber

got-fetch-http: backout GET request URL fix

It broke the clone regression test.


1db91dc77e Christian Weisgerber

got-fetch-http: fix GET request URL

Add a leading '/' and do not produce a double "//" after the path. ok op


ebd4d9a026 Stefan Sperling

backout got stage -R option addition

The stage command is usually used in a recursive manner, like 'got commit'. Forcing users to specify -R all the time is deemed too inconvenient in practice. discussed on IRC with Lorenz (xha), Omar, and Lucas


93b39c2f4a Stefan Sperling

fix an fd leak in gotd's notify process

This leak resulted in the gotd notify process spinning on CPU in an imsg_read() -> EAGAIN loop once it ran out of file descriptors.


1c8e2cfac8 James Cook

fix previous: "ssh" accidentally named "git"


7877535096 James Cook

update protocol lists

Document http and https protocols in got.conf(5). Copied from got(1) except reworded the part that referred to got.conf(5). Change "send directive" to "send block" in got(1), since got.conf(5) says there's "one configuration directive per line". Adjust table widths: longest protocol name is now "https".


770f8d29ee Omar Polo

got-notify-http: fix I/O with TLS (again)

We try to handle early replies from the server, so we call tls_read() at each "tick" of the event loop. For the TLS case, however, bufio_read() will set bio->wantev, and if we rely only on it we can deadlock trying to read data from the server without having sent all the request. Found out the hard way while trying to send several notifications in one go. ok stsp


9a8d748919 Stefan Sperling

revert part of previous commit; the parent process is not ephemeral

pointed out by op@


1bd35332a5 Stefan Sperling

prevent gotd notification process from exiting due to EPIPE

Ephermeral processes on the other end of a pipe might decide to exit which results in EPIPE when writing. This is not a fatal error but is somewhat expected during normal operation (at least until we improve the inter-process communication about notifications).




8aebbd0a70 Omar Polo

got-notify-http: make unexpected EOF more useful


a0769bb1e6 Stefan Sperling

fix got-fetch-http when chunked encoding is not used

We would end up raising a spurious error when the server had no more data to send and would abort the clone operation, while everything was fine in fact. Problem reported by vazub via IRC, thanks!



283939fb82 Omar Polo

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


2c1b178025 Omar Polo

got-notify-email: sort/remove includes

we don't need getopt.h; getopt() is in unistd.h. also sort the headers while here. ok stsp@


54b37e9869 Stefan Sperling

make 'got fetch' work with URLs which refer to $HOME via a tilde ~

'got clone' already happens to support such URLs via scp-style syntax: user@127.0.0.1:~/test.git While the clone operation succeded, subsequent fetch operations would raise an error: '/~/test.git' does not appear to be a git repository Make such URLs work when they are read back from got.conf, and also on the clone command line in canonical form: ssh://user@127.0.0.1/~/test.git Not adding a test case because I don't see an easy way to add test coverage for this without spilling test data into home directories or modifying ~/.ssh/ssh_config. Problem found by Jesper Wallin.


b93f334d74 Stefan Sperling

bump version number


6dd1428a45 Stefan Sperling

CHANGES for 0.98 (tags/0.98)


0d99dd8ddd Stefan Sperling

sync dist file list


27aa2674c9 Stefan Sperling

extend test_patch_empty_file() test coverage

Check what happens when patches attempt to edit or delete empty files.


04a87797cb Omar Polo

got patch: fix applying on empty files

if we've reached EOF without finding a match is fine if and only if the target file is empty, so add this exception. reported by naddy, ok stsp