Skip to content

feature: 並列 hook 実行 (hook.<name>.parallel = true, git 2.55 互換) #78

@mizchi

Description

@mizchi

概要

bit が並列フック実行をサポートするための feature request。upstream git 2.55 で正式に追加された機能 (hook.parallel 系 config) のキャッチアップ。

実装 (commit 1bdee67)

新ファイル src/cmd/bit/hook_runner.mbt:

  • read_hook_config(rfs, git_dir, hook_name)parse_config_blocks[hook "<name>"] セクションを走査して、command (multi-value) と parallel を取り出す
  • is_truthy_config_value — git の true|yes|on|1 を真として扱う
  • run_hook_command(command, cwd)@process.run の薄いラッパー (command は literal path)
  • run_hook(rfs, root, git_dir, hook_name, cwd) — エントリポイント
    • config に command が無ければ legacy <hooks_dir>/<name> を実行 (後方互換)
    • sequential (default): 最初の non-zero exit を返す
    • parallel: @async.with_task_group で各 command を spawn、全終了後に worst exit を返す

設定例

[hook "pre-commit"]
    command = /usr/bin/formatter
    command = /usr/bin/linter
    parallel = true

移行済み呼び出し箇所

  • cmd/bit/commit.mbt::run_pre_commit_hook
  • cmd/bit/clone.mbt::run_postclone_hook
  • cmd/bit/add.mbt::run_add_hook

未移行

引数を渡すパスはまだ legacy のまま (run_hook は今のところ no-args)。将来 args~ : Array[String] parameter を追加して以下を順次移行:

  • pull.mbt::run_push_hook (pre-push / post-receive)
  • hub_sync.mbt::hub-notify
  • hub_github_sync.mbt::post-push

テスト

hooks_wbtest.mbt に 5 件追加、全 16 件 pass:

  • read_hook_config returns empty for missing section
  • read_hook_config parses multi-command + parallel flag
  • read_hook_config treats parallel=false as default
  • is_truthy_config_value matches git's accepted forms
  • read_hook_config skips other hook sections

moon check: 0 warnings, 0 errors.

closing as completed for the basic implementation (no-args hooks).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions