Como usar WatchPaths do launchd para manter dois arquivos em sincronia

0

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?

    
por asmeurer 12.01.2014 / 03:31

1 resposta

0

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.

    
por 12.01.2014 / 03:36