Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,16 @@ _maintain-macos:
mkdir "$maintenance_lock" 2>/dev/null || { echo "failed to acquire maintenance lock" >&2; exit 1; }
fi
echo $$ > "$maintenance_lock/pid"
export DOTFILES_MAINTAIN=1
# 古い設定のまま維持する事故を防ぐため、まず自分の dotfiles を最新化する。
# main ブランチのときだけ (feature ブランチや detached では pull しない)。git 操作は
# 常に本体ツリーを対象にする。pull は post-merge/post-rewrite hook を発火するが、
# 上で export した DOTFILES_MAINTAIN=1 で hook 側 rebuild はスキップされる
# (この後 just rebuild を自前で回すので二重 rebuild を避ける)。
if [ "$(git -C "$HOME/.dotfiles" branch --show-current 2>/dev/null)" = "main" ]; then
echo "━━━ git pull (--rebase --autostash)"
git -C "$HOME/.dotfiles" pull --rebase --autostash
fi
just outdated
lock="{{flake}}/flake.lock"
old_lock=$(mktemp)
Expand Down Expand Up @@ -241,6 +251,16 @@ _maintain-linux:
mkdir "$maintenance_lock" 2>/dev/null || { echo "failed to acquire maintenance lock" >&2; exit 1; }
fi
echo $$ > "$maintenance_lock/pid"
export DOTFILES_MAINTAIN=1
# 古い設定のまま維持する事故を防ぐため、まず自分の dotfiles を最新化する。
# main ブランチのときだけ (feature ブランチや detached では pull しない)。git 操作は
# 常に本体ツリーを対象にする。pull は post-merge/post-rewrite hook を発火するが、
# 上で export した DOTFILES_MAINTAIN=1 で hook 側 rebuild はスキップされる
# (この後 just rebuild を自前で回すので二重 rebuild を避ける)。
if [ "$(git -C "$HOME/.dotfiles" branch --show-current 2>/dev/null)" = "main" ]; then
echo "━━━ git pull (--rebase --autostash)"
git -C "$HOME/.dotfiles" pull --rebase --autostash
fi
just outdated
lock="{{flake}}/flake.lock"
old_lock=$(mktemp)
Expand Down
7 changes: 7 additions & 0 deletions nix/home/git-hooks.nix
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ let
guardAndRebuild = range: label: ''
DOTFILES_DIR="${dotfilesDir}"

# `just maintain` が内部で叩く git pull からは回さない。maintain は pull の後に
# 自前で rebuild するため、ここで走ると二重 rebuild になる (maintain が
# DOTFILES_MAINTAIN=1 を export している)。
if [ -n "''${DOTFILES_MAINTAIN:-}" ]; then
exit 0
fi

# worktree からは回さない (本体ツリーのみ)。共有 .git/hooks 経由で worktree でも
# 発火しうるため、toplevel が本体と一致するときだけ続行する。
if [ "$(${git} rev-parse --show-toplevel 2>/dev/null)" != "$DOTFILES_DIR" ]; then
Expand Down
Loading