只對修改後的文件應用美化器的原始碼樹的鏡像
我保留了同一個原始碼樹的兩個副本:一個是“工作副本”,另一個是“儲存副本”。當我完成編輯“工作副本”時,我刷新“儲存副本”
rsync
(僅複製修改的文件,此外,工作副本中已刪除的文件也將在儲存的文件中刪除)。還有一個單片機,但它發生在“儲存副本”之後,所以我們可以忽略這裡的單片機。但是現在我想在從“工作副本”刷新到“儲存”副本時應用程式碼美化器。程式碼美化器可以通過標準輸入/標準輸出重定向應用,但是,AFAIK
rsync
不允許在執行複制時通過標準輸入/標準輸出過濾器。我只想美化修改後的文件,因為我不想修改“儲存副本”中未更改文件的時間戳。“工作副本”和“儲存副本”的美化規則不同,因此不能對工作副本應用美化器。
我怎樣才能做到這一點?任何適用於 UNIX 的解決方案都是可以接受的,儘管我更喜歡 Bourne shell 腳本或 C 程序。如果
rsync
可以以某種特殊的方式使用它,那也很好。
鑑於問題和評論中解釋的限制,我將首先消除用於工作副本和儲存副本的樣式指南之間的差異。但是,我知道這可能非常困難,因此請隨意忽略該建議。
我不認為
rsync
(即,在復製文件時過濾文件)是在送出“儲存的副本”之前嘗試應用“美化”的正確位置。如果您可以使用 SCM,我會搭載它;例如,使用git
, 之後rsync
:git diff --name-only -z | xargs -O beautifier
將
beautifier
在所有更改的文件上執行,假設它可以在作為參數給出的文件上執行。如果您不能(或不會)使用 SCM,您可以使用
rsync
日誌(請參閱--log-file
和--log-file-format
選項)找出rsync
複制的內容,並僅在這些文件上執行美化器。如果
rsync
日誌不能被利用,還有另一種方法可以解決這個問題:對“儲存副本”中的每個文件執行美化器,輸出到臨時文件,並將輸出與原始文件進行比較。如果美化更改了文件,請將輸出複制回原始文件。