Aparentemente, pelo menos para o programa que eu testei, se você usa xattr -w
para colocar um atributo em um arquivo, quando as preferências são alteradas, esse atributo é removido, supostamente porque ele grava um novo Arquivo.
Antecedentes: o formato plist do Mac OS X é binário por padrão, o que não é muito bom para coisas como rastrear com o git. Existe um comando plutil -convert
que pode converter de binário para XML, mas não parece ser possível forçar um determinado arquivo plist a permanecer como XML.
Minha ideia é usar a funcionalidade WatchPaths lançada para configurar dois scripts, um que altere o arquivo binário em ~/Library/Preferences
para um arquivo XML no meu git repo e outro que converta o arquivo binário se a versão XML for alterada ( Eu preciso dessa segunda direção porque pretendo usar isso para sincronizar os dois entre dois computadores).
O único problema é que, se eu configurá-lo ingenuamente, ele será executado indefinidamente, porque assim que o arquivo binário mudar, ele atualizará o arquivo XML, mas isso será uma alteração no arquivo XML, que resultará na atualização do arquivo binário e assim por diante.
Existe uma maneira inteligente de evitar esse ciclo? Eu acho que o que eu quero fazer é verificar no script que converte de binário para XML, se a coisa que escreveu o arquivo passado foi o programa que o arquivo de preferência é para, ou o próprio script, e se é o último, para não corre. Existe algum tipo de atributo que eu possa colocar no arquivo que irá dizer isso, que será limpo quando o programa normal gravar o arquivo?
Aparentemente, pelo menos para o programa que eu testei, se você usa xattr -w
para colocar um atributo em um arquivo, quando as preferências são alteradas, esse atributo é removido, supostamente porque ele grava um novo Arquivo.