Files
gh-baton8-takushinotifier/hooks/project_manager.sh
2025-11-29 18:00:39 +08:00

127 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# Takushiプロジェクト名管理スクリプト
# 使用方法: ./project_manager.sh [action] [args...]
# action: set, get, init
CONFIG_DIR="$HOME/.config/takushi_notifier"
PROJECT_NAMES_FILE="$CONFIG_DIR/project_names.conf"
# 設定ディレクトリの作成
init_config() {
mkdir -p "$CONFIG_DIR"
if [ ! -f "$PROJECT_NAMES_FILE" ]; then
touch "$PROJECT_NAMES_FILE"
fi
}
# プロジェクト名設定
set_project_name() {
local project_path="$1"
local project_name="$2"
# 引数チェック
if [ -z "$project_path" ] || [ -z "$project_name" ]; then
echo "エラー: プロジェクトパスと名前を指定してください"
exit 1
fi
init_config
# 一時ファイルを作成
local temp_file=$(mktemp)
local var_name="PROJECT_NAME_${project_path//\//_}"
local updated=false
# 設定ファイルを読み込み、該当行を更新
if [ -f "$PROJECT_NAMES_FILE" ]; then
while IFS= read -r line; do
if [[ "$line" =~ ^${var_name}= ]]; then
echo "${var_name}=\"$project_name\"" >> "$temp_file"
updated=true
else
echo "$line" >> "$temp_file"
fi
done < "$PROJECT_NAMES_FILE"
fi
# 新規追加の場合
if [ "$updated" = false ]; then
echo "${var_name}=\"$project_name\"" >> "$temp_file"
fi
# 一時ファイルで設定ファイルを上書き
mv "$temp_file" "$PROJECT_NAMES_FILE"
echo "プロジェクト「${project_name}」を設定しました (パス: ${project_path})"
}
# プロジェクト名取得
get_project_name() {
local project_path="$1"
if [ -z "$project_path" ]; then
echo "エラー: プロジェクトパスを指定してください"
exit 1
fi
init_config
if [ -f "$PROJECT_NAMES_FILE" ]; then
local current_path="$project_path"
# 現在のパスから親階層まで順に探索
while [ -n "$current_path" ]; do
local var_name="PROJECT_NAME_${current_path//\//_}"
local project_name=$(grep "^${var_name}=" "$PROJECT_NAMES_FILE" | cut -d'=' -f2- | tr -d '"')
if [ -n "$project_name" ]; then
echo "$project_name"
return
fi
# 親ディレクトリに移動
if [ "$current_path" = "/" ] || [ "$current_path" = "." ]; then
break
fi
current_path=$(dirname "$current_path")
if [ "$current_path" = "." ]; then
break
fi
done
fi
echo ""
}
# メイン処理
case "${1:-get}" in
"set")
if [ -z "$2" ] || [ -z "$3" ]; then
echo "エラー: プロジェクトパスと名前を指定してください"
echo "使用方法: $0 set [path] [name]"
exit 1
fi
set_project_name "$2" "$3"
;;
"get")
if [ -z "$2" ]; then
echo "エラー: プロジェクトパスを指定してください"
echo "使用方法: $0 get [path]"
exit 1
fi
get_project_name "$2"
;;
"init")
init_config
echo "設定ディレクトリを初期化しました: $CONFIG_DIR"
;;
*)
echo "使用方法: $0 [set|get|init] [args...]"
echo " set [path] [name] : プロジェクト名を設定"
echo " get [path] : プロジェクト名を取得"
echo " init : 設定ディレクトリを初期化"
exit 1
;;
esac