From 035e44998fc816d4469c6d547c442b39e4e50c72 Mon Sep 17 00:00:00 2001 From: insleker Date: Mon, 13 Apr 2026 22:45:35 +0800 Subject: [PATCH] chore: add post-checkout lefthook --- lefthook.yml | 8 ++++ tool/pub_get_on_pubspec_change.dart | 57 +++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 tool/pub_get_on_pubspec_change.dart diff --git a/lefthook.yml b/lefthook.yml index f4a8586..c6b91ee 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -13,3 +13,11 @@ pre-push: commands: require-latest-main: run: uv run scripts/check_branch_up_to_date.py + +post-checkout: + commands: + private-skills-sync: + run: uvx --from git+https://github.com/existedinnettw/inkr-harness-tools.git inkr-skill-sync .local .agents --recursive + continue: true #ignore fail + pub-get-on-pubspec-change: + run: dart tool/pub_get_on_pubspec_change.dart {1} {2} {3} diff --git a/tool/pub_get_on_pubspec_change.dart b/tool/pub_get_on_pubspec_change.dart new file mode 100644 index 0000000..90ebddd --- /dev/null +++ b/tool/pub_get_on_pubspec_change.dart @@ -0,0 +1,57 @@ +import 'dart:io'; + +Future main(List args) async { + if (args.length != 3) { + stderr.writeln( + 'Usage: dart tool/pub_get_on_pubspec_change.dart ' + ' ', + ); + exitCode = 64; + return; + } + + final [previousHead, newHead, checkoutFlag] = args; + if (checkoutFlag != '1') { + return; + } + + if (!await _isCommit(previousHead) || !await _isCommit(newHead)) { + return; + } + + final diff = await Process.run('git', [ + 'diff', + '--quiet', + previousHead, + newHead, + '--', + 'pubspec.yaml', + ]); + + switch (diff.exitCode) { + case 0: + return; + case 1: + break; + default: + stderr.write(diff.stderr); + exitCode = diff.exitCode; + return; + } + + final pubGet = await Process.start('dart', ['pub', 'get']); + await stdout.addStream(pubGet.stdout); + await stderr.addStream(pubGet.stderr); + exitCode = await pubGet.exitCode; +} + +Future _isCommit(String revision) async { + final result = await Process.run('git', [ + 'rev-parse', + '--verify', + '--quiet', + '$revision^{commit}', + ]); + + return result.exitCode == 0; +}