Bind quire dispatch hook to post-receive event
`hook.<label>.command` alone is inert; git also needs `event` to fire
the command on a hook. Without it, mirror pushes silently never ran.
Assisted-by: Claude Opus 4.7 (1M context) via Claude Code
diff --git a/Dockerfile b/Dockerfile
index 8b55515..7b71f15 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -71,7 +71,10 @@ COPY --from=git-builder /usr/local/libexec/git-core/ /usr/local/libexec/git-core
COPY --from=builder /build/quire /usr/local/bin/quire
# Configure git hooks globally so all repos inherit the post-receive dispatch.
-RUN git config --system hook.postReceive.command "quire hook post-receive"
+# `hook.<label>` is an arbitrary identifier; the hook is bound to an event
+# via `event` and run via `command`.
+RUN git config --system hook.quire.event "post-receive" \
+ && git config --system hook.quire.command "quire hook post-receive"
# Volume layout per PLAN.md. Ownership is set on the host; the container
# runs as the host uid/gid passed via `docker exec --user`, so no user
diff --git a/src/quire.rs b/src/quire.rs
index 563dc9e..9246e26 100644
--- a/src/quire.rs
+++ b/src/quire.rs
@@ -93,7 +93,12 @@ impl Repo {
/// but it remains visible in `/proc/<pid>/environ` to anything running
/// as the same uid for the lifetime of the push. Acceptable today
/// (single-user container, no CI runner yet); revisit when CI lands.
- pub fn push_to_mirror(&self, mirror: &MirrorConfig, token: &str, refs: &[&str]) -> crate::Result<()> {
+ pub fn push_to_mirror(
+ &self,
+ mirror: &MirrorConfig,
+ token: &str,
+ refs: &[&str],
+ ) -> crate::Result<()> {
let mut args = vec!["push", "--porcelain", &mirror.url];
args.extend(refs);