ファイルとディレクトリのトラッキング

ホームディレクトリ配下の対象を登録し、リポジトリパスを上書きし、入れ子パスを調整し、トラッキングをやめる方法をまとめます。

トラッキングとは、パスを manifest.jsonc に記録して pushpull がそのパスを認識できるようにすることです。以下の節は手順ではなく、それぞれ独立した選択肢なので、必要な節だけ読んでください。

ファイルやディレクトリをトラッキングする

ホームディレクトリ配下のパスを dotweave track に渡します。引数は可変長なので、1 回の呼び出しで複数の対象を指定できます。

dotweave track ~/.gitconfig ~/.config/nvim
✔ Started tracking .gitconfig
  kind  file
  path  /home/you/.gitconfig
  repo  .gitconfig
  mode  normal

track が書き込むのは manifest.jsonc だけです。dotweave push を実行するまで、同期ディレクトリにコピーされるファイルはありません。

すでにトラッキング中のパスを再度トラッキングすると、渡したフィールドだけが更新され、残りはそのまま保たれます。そのため後から項目の mode だけを変えるときに、--repo--profile の値を書き直す必要はありません。

--profile に空の値を 1 つだけ渡すと、その対象のプロファイル割り当てが消去され、項目はすべてのプロファイルで適用される状態に戻ります。

dotweave track ~/.config/my-tool --profile ""

対象はホームディレクトリの内側に解決される必要があり、ホームディレクトリ自体は指定できません。同期ディレクトリと重なるパスや keys.txt を含むパスも指定できません。dotweave は自身の状態と age の鍵素材をミラーリングしません。

まだ存在しないパスをトラッキングする

ファイルが存在する前に項目を作っておくと、後の dotweave pull がそのファイルを配置します。調べる対象がないため、この場合は --kind file または --kind directory が必須です。

dotweave track ~/.config/my-tool/settings.json --kind file

--kind はすでに存在するパスに対しても検査されます。値がディスク上の実体と食い違うとコマンドは失敗するので、ディレクトリを誤ってファイルとして記録することはありません。

リポジトリパスを上書きする

既定では、項目のリポジトリパスはホームディレクトリからの相対パスをそのままたどります。--repo を使うとそのパスを自分で決められるので、ローカルの位置が長い場合やマシンごとに異なる場合に役立ちます。

dotweave track ~/Projects/scripts/deploy.sh --repo scripts/deploy.sh

--repo は対象がちょうど 1 つのときだけ使えます。対象が 2 つ以上あると、1 つのリポジトリパスで両方を表せないためコマンドは失敗します。--repo win=path のようなプラットフォーム別の形式は dotweave track、解決規則はプラットフォーム別のパスで説明しています。

トラッキング中のディレクトリ内の入れ子パスを調整する

track には 2 つ目の意味があります。対象が既存の manifest 項目ではなく、--repo も渡していない場合、すでにトラッキング中のディレクトリ内の入れ子パスに対して同期モードやプロファイルを設定します。そのパス専用の子オーバーライド項目が作られます。

dotweave track ~/.config/my-tool
dotweave track ~/.config/my-tool/credentials.json --mode secret
✔ Updated sync mode for .config/my-tool/credentials.json
  mode  secret

2 つ目のコマンドは Updated sync mode for ... を表示します。そのパスがすでに同じモードに解決されていた場合は Sync mode unchanged for ... になります。

子の項目は親よりも優先されます。親ディレクトリをたどるときに子が持つパスはスキップされるため、そのファイルは子のモードで一度だけミラーリングされます。同じしくみで --mode ignore を使えば、トラッキング中のディレクトリからファイル 1 つだけを除外できます。

トラッキングをやめる

dotweave untrack は manifest 項目を削除し、あわせてその項目のミラーリング済み artifact をリポジトリから削除します。ホームディレクトリにあるローカルファイルには手を付けません。

dotweave untrack ~/.gitconfig
✔ Stopped tracking .gitconfig
  plain: 1
  secret: 0

2 つの数値は、削除された plain artifact と secret artifact の個数です。そのあとは push をコミットするときと同じように、この削除も git でコミットしてください。

親ディレクトリのトラッキングは残したまま入れ子のオーバーライドだけを外すには、リポジトリからの相対の子パスを渡します。

dotweave untrack .config/my-tool/credentials.json

実装とリファレンス

フラグと型、既定値は dotweave trackdotweave untrack にまとめています。これらのコマンドが書き込むフィールドは manifest.jsonc で説明しています。

項目の mode の値を選ぶには同期モード、必要なパスをトラッキングし終えたあとの流れは日々の push とコミットの流れを参照してください。