Commits
- Commit:
1cb49b67c167a14c547143ce621e7573f59c82a3
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
get rid of gotd client_id field where it is not needed
This ID was necessary back when session and repo processes supported
connections from multiple clients. Nowadays, these processes run per
connection and exit once a single client session has been served.
The other processes already identify the client via the session/repo
file descriptor which has sent an imsg.
- Commit:
02dd6ee50e0e52c1581e43fb1910bc44604dcf7f
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
store repo_child_iev in gotd_session rather than gotd_session_client
- Commit:
818f96befdf8fe0b407ab7fec236b71d57bc3597
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
track session state in struct gotd_session instead of got_session_client
Eventually, I would like to disconnect clients before notifications are
generated. This change helps pave the way towards this goal.
- Commit:
ba97b2d7ec97e54a025a39e04c0fd59fdd54a57b
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
add initial support for commit notifications to gotd(8)
At present only email notifications are implemented.
Code for HTTP notifications is not yet finished, hence HTTP-related
documentation remains hidden for now.
This adds a new 'notify' process which has an "exec" pledge. It runs
helper programs which implement the notification transport layer,
such as got-notify-email which speaks SMTP. This design avoids having
to link all of gotd with network libraries and related crypto libraries.
Notification content is generated by the 'repo_write' process. Commit log
messages and diffstats are written to a file which the 'notify' process
will pass on to its helpers on stdin. The default output looks similar
to 'got log -d'. If too many new commits are present the output looks
similar to 'got log -s' instead. Tags always look like 'got tag -l'.
The session process coordinates generation of notifications. It maintains
a notification queue which holds one notification per updated reference,
and passes notification requests from this queue to the 'repo_write'
process for notification content creation and then to the 'notify'
process for notification delivery.
Only one notification can be in flight at a time to avoid file descriptor
starvation if many references get updated in a single client session.
ok op@
- Commit:
30a624fb1ef8d2d9706a604cbf65dcdacf072e72
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
avoid a rename/stat race when gotd installs a new pack and then uses it
Reset the cached repository's pack directory mtime after installing a new
pack and pack index file. I have observed the mtime of the pack directory
as reported by stat(2) remaining unchanged, until some time has passed
beyond the rename(2) calls used to install the pack file and its index.
If gotd immediately tries to read objects installed in a new pack file then
the mtime reported by stat(2) might appear as unchanged. gotd will then fail
to update its cached list of pack index files and not find the newly
installed objects.
Clearing the cached timestamp forces a readdir(3) call which does expose
the newly installed pack index file as expected.
Not sure whether stat(2) is supposed to immediately expose mtime changes
after a rename(2). If so then this might warrant digging into the kernel.
Seen while running regression tests for upcoming gotd notification support.
- Commit:
10477b5aacb13088676c3bfd7e0fcc477ba2724e
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
reuse existing repository struct in gotd session update_ref()
Avoids pointlessly opening and closing a separate repository instance.
- Commit:
bbca1adf04e40d91b98c326953a147a37b94c817
- From:
- Omar Polo <op@omarpolo.com>
- Date:
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.
- Commit:
2c52c623be04b56400a5c94cc8d86b6fda214d16
- From:
- Omar Polo <op@omarpolo.com>
- Date:
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@
- Commit:
510b45554017ce0a907a5c11a24266600eab5783
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
avoid opening objects in the gotd session process for no reason
The session process opened an object as part of a sanity check and
simply closed it again. Opening an object involves decompression
and combination of deltas. Add a new interface which checks whether
an object ID exists without such overhead and call it from gotd.
- Commit:
808264b2482b61d7bab9f3d7b0b4a9703a3942cd
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
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.
- Commit:
1050403b806ca85666ad4b6a9e83953fdbb5298a
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
gotd: stop logging "unexpected end of file" when a client decides to disconnect
- Commit:
b061482840b244c4645851c4a02a9ce9723b9fc5
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
unveil repositories read-only in gotd session process while serving fetches
ok op@
- Commit:
1df1761f7094815d15b11a908b2132ca58169fea
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
make gotd show relevant commit hashes in error message if ref-updates collide
- Commit:
f8780fee7a5de8db320833efc4a30aa1ad3814e2
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
make gotd avoid re-writing existing ref files when a ref-update is a no-op
- Commit:
baaae61518bf323d22055a3b02fc9e129ee6d567
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
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
- Commit:
53bf0b541977b66862040d4b633fb6b5d3a3c6c8
- From:
- Omar Polo <op@omarpolo.com>
- Date:
rename lib/sha1.c to lib/hash.c
It will soon grow functions to deal with sha256 too. stsp@ agrees.
- Commit:
5822e79e39a8777984e08b5d89a8c55d6aa0356d
- From:
- Omar Polo <op@omarpolo.com>
- Date:
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>
- Commit:
2ec74a9e9c334f3245765a6e6f35b7977f5b420e
- From:
- Omar Polo <op@omarpolo.com>
- Date:
drop double process name from some gotd logs
i.e. "listen: listen: shutting down" -> "listen: shutting down"
the procname is already prepended by vlog()
ok jamsek
- Commit:
3931a8a4404d58250d0d16467474bfba2cc215c2
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
rename a function for clarity
- Commit:
da76b65174488c46bf80a5af7896dfdc3ae60fee
- From:
- Mark Jamsek <mark@jamsek.dev>
- Date:
zap trailing whitespace
- Commit:
839bbaae43d84a7eb75ef0b327239fd36c360ada
- From:
- Omar Polo <op@omarpolo.com>
- Date:
gotd, gotadmin: install packfiles and index files as 0444
gotd used 0600 (due to mkstemps(3)), gotadmin 0644; change it to 0444
since packfiles shouldn't change once created. Mirrors what git does.
ok stsp@
- Commit:
9a8e357c727600cb61ac6ec4c83259fa6d9a3081
- From:
- Omar Polo <op@omarpolo.com>
- Date:
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@
- Commit:
3448a19afa20edfa1069b2d793abcda5a9006565
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
make gotd session process accept just one flush packet at a time
ok jamsek
- Commit:
0ff2c315fe0f2f0fe4a92cae73c8a4a9fd21a402
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
gotd: fix "bad packfile with zero objects" error while creating branches
Clients will send an empty pack file if they are only creating new
references and have no objects to upload. Make gotd handle this and
add a regression test which triggers the bug. Problem found by op@.
The new regression test caught an unrelated issue where the client
connection was left lingering after references had been updated,
which made 'got send' followed by 'got clone -l' fail with the
connection limit configured for the test suite (just one connection
is allowed at a time). Fix this as well.
ok op@
- Commit:
f9550d472ec2151070b5bef2bd3b950d9f8e7949
- From:
- Stefan Sperling <stsp@stsp.name>
- Date:
fix an issue where gotd fails to accept multiple have-lines from clients
ok op, jamsek