私は同じソースツリーの2つのコピーを保持します。 1つは「作業コピー」、もう1つは「保存コピー」です。 「作業コピー」編集が完了すると、「ストレージコピー」が更新されますrsync
(変更されたファイルのみがコピーされ、さらに作業コピーから削除されたファイルもストレージコピーから削除されます)。 SCMもありますが、「保存されたコピー」の後に発生するため、ここではSCMを無視できます。
しかし、今、「作業コピー」から「保存場所」コピーに更新するときにコード美化を適用したいと思います。コード美化者はstdin / stdoutリダイレクトを介して適用できますが、私が知っている限り、コピーをrsync
実行するときにstdin / stdoutフィルタを渡すことは許可されていません。
「保存されたコピー」で変更されていないファイルのタイムスタンプを変更したくないので、変更されたファイルだけをきれいにしたいと思います。 「作業コピー」と「保存コピー」の美化ルールが異なるため、作業コピーには美化を適用できません。
どうすればいいですか? UNIXフレンドリーなソリューションはすべて許可されていますが、BourneシェルスクリプトまたはCプログラムを好む。rsync
特別な方法があればよさそうだ。
答え1
質問とコメントに記載されている制約を考慮して、まず作業コピーとリポジトリコピーに使用されるスタイルガイドの違いを排除します。しかし、私はこれが非常に難しいかもしれないことを知っているので、そのアドバイスを無視してください。
私はそうは思わないrsync
(つまり、ファイルがコピーされたときのフィルタリング)は、保存されたコピーをコミットする前にBeautifyを適用するための正しい場所です。 SCMを使用できる場合は、git
次のように活用しますrsync
。
git diff --name-only -z | xargs -O beautifier
beautifier
引数として指定されたファイルで実行できると仮定すると、変更されたすべてのファイルで実行されます。
SCMが利用できない場合、または使用されていない場合は、ログrsync
(--log-file
および--log-file-format
オプションを参照)を使用してコピーされた内容を確認rsync
し、そのファイルに対してのみビューティファイアを実行できます。
ログを悪用できない場合は、rsync
問題を解決する別の方法があります。 「保存されたコピー」の各ファイルに対してビューティファイアを実行し、一時ファイルに出力してから、出力を元のファイルと比較します。米ドルでファイルが変更された場合は、出力を元のファイルにコピーしてください。