Commit Briefs

Thomas Adam

remove unneded wbuf->fd = -1

There's no need to set the fd to -1 on ibufs created with imsg_create(3), and it was probably never needed.


Thomas Adam

convert to use imsg_get_fd()

While here also fix a fd leak in got-read-pack. We were dup'ing imsg.fd without closing imsg.fd later; instead just use imsg_get_fd() to extract the file descriptor. Tested by falsifian and Kyle Ackerman, thanks! 'go ahead' stsp@


Thomas Adam

make gotsh handle poll timeouts when checking for gotd closing the pack pipe

This will hopefully fix issues seen on servers where gotsh exits early for no good reason.


Thomas Adam

portable: mismerge in serve_write()


Thomas Adam

portable: gotd/gitwrapper: update for libs

Bring gotd and gitwrapper closer to how libraries are detected.


Thomas Adam

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.


Thomas Adam

make gotd avoid a "failed to push some refs" error from no-op 'git push'

gotsh was sending errors such as "unexpected end of file" and "unexpected flush-pkt" to the client when the client disconnected immediately after receiving reference announcements from the server. As a result, 'git push' with both sides up-to-date would show an obscure error message: = [up to date] main -> main error: failed to push some refs to 'ssh://example.com/git/repo.git Now we see: = [up to date] main -> main Everything up-to-date ok jamsek


Thomas Adam

significantly reduce the amount of code linked into gitwrapper

By moving got_serve_parse_command() from lib/serve.c into lib/dial.c as got_dial_parse_command(), we can significantly reduce the amount of symbols gitwrapper depends on indirectly. As a downside, gotsh now needs to link to dial.c. But it only uses the same parsing routine, and any other routines in dial.c would likely cause pledge violations in gotsh if used. No functional change.


Thomas Adam

fix an off-by-one in got_serve_parse_command() canonpath allocation

ok op@, tracey@


Thomas Adam

fix gotd sending too large pack files in some cases (linux)

Make gotsh pass all have-lines sent by clients onwards to gotd, reducing size of pack files generated by the repo_read process. Problem reported by naddy@ ok jamsek


Thomas Adam

portable: rework SHA detection

Simply the SHA detection by not predicating on libcrypto, but instead checking individual header files.


Thomas Adam

portable: remove sha1.h; found portably

Remove sha1.h as this is found portably across systems.


Thomas Adam

provide functions to parse/serialize different hashes

it abstracts over the hash type and ensures that object ids are zero'ed before their sha1 digest is written. Needed by the incoming sha256 support. ok stsp@


Thomas Adam

rename lib/sha1.c to lib/hash.c

It will soon grow functions to deal with sha256 too. stsp@ agrees.


Thomas Adam

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>


Thomas Adam

tweak send_zero_refs; use GOT_SHA1_STRING_ZERO

ok stsp@


Thomas Adam

gotd: implement the delete-refs capability

Allow clients to run "got send -d" against gotd. Clients will send a zero-id as new id for a reference and, in the special but more common case of just deleting and not updating, no pack file will be sent. ok and tweaks by stsp@


Thomas Adam

delete trailing whitespaces



Thomas Adam

gotsh: validate with parse_command before connecting

Export parse_command (now got_serve_parse_command) from lib/serve.c and use it to validate the command line in gotsh instead of just checking that the -c argument starts with 'git-receive-pack' or 'git-upload-pack'. Invalid usage now always fails before opening the socket, while before it wasn't always the case. This also means that invalid usage doesn't count towards the limits. ok jamsek, stsp


Thomas Adam

fmt; fold long line





Thomas Adam

fix an issue where gotd fails to accept multiple have-lines from clients

ok op, jamsek