Agora borg diff mostra algo assim:
+27.4 kB -27.4 kB var/vmail/example.com/foobar/Auto/Steam und Co/dovecot-uidlist
+490.4 kB -489.3 kB var/vmail/example.com/foobar/Auto/Steam und Co/dovecot.index.cache
+29.6 kB -29.3 kB var/vmail/example.com/foobar/Auto/Steam und Co/dovecot.index.log
added 62.77 kB var/vmail/example.com/foobar/Auto/Steam und Co/new/1520542202.M174402P24533.turtle,S=62768,W=63599
+4.5 kB -4.5 kB var/vmail/example.com/foobar/maildirsize
E isso é ótimo. Exceto que essas informações de tamanho legíveis por humanos são um pouco difíceis para uma máquina analisar. Idealmente, haveria uma opção para produzir tamanhos legíveis por máquina (também conhecidos como bytes, sem qualquer prefixo).
Falando em prefixo: esses kB são como em 1000 Bytes ou KiB como em 1024 Bytes? Enquanto isso, talvez isso possa ser esclarecido também. Obrigado!
Você verificou se temos suporte de saída json para isso?
Eu realmente verifiquei o borg help diff
para isso. A única coisa relacionada ao JSON que encontrei é isso:
--log-json Output one JSON object per log line instead of
formatted text.
Então, sem sorte, estou com medo.
OK, se ainda não temos isso, adicionar saída json parece ser uma boa ideia.
Nesse caso, também gostaria de solicitar a inclusão do tamanho descompactado e compactado de cada alteração. Tanto quanto eu posso entender o código-fonte do Borg, a saída atual refere-se ao tamanho descompactado.
Proponho adicionar uma opção --json-output
para diff.
E uma saída diff deve ser algo assim:
{
added: [
{path: '/path/to/file', change: '27.4 kB'}
],
modified: [
{path: '/path/to/file', change: '+490.4 kB -489.3 kB'}
],
deleted: [
{path: '/path/to/file', change: 'directory'}
]
}
Dessa forma, os usuários terão uma maneira fácil de analisar a saída, pois terão grupos e campos separados.
Então, vou adicionar a função interna print_output_json
a do_diff
, que produzirá a saída como acima do gerador de diferenças.
Também para o formato não legível por humanos, podemos adicionar uma opção --bytes
e mostrar o tamanho do arquivo sem unidades. Eu acho que seria bom ter essa opção e para saída padrão também.
Agora a função diff usa ItemDiff.__repr__()
substituído que, por sua vez, usa ItemDiff._content_string()
para obter a representação da diferença. Como não podemos adicionar argumentos a __repr__
Na minha opinião seria g
ood para adicionar uma função separada e colocar o conteúdo __repr__
atual lá. __repr__
invocará essa função para obter a saída padrão. A função receberá um argumento (por exemplo, in_bytes) e passará esse
para Item.get_size()
. Francamente, ainda não mergulhei em Item.get_size()
, mas acho que posso obter o tamanho do item em bytes.
Quaisquer pensamentos, sugestões?
Proponho adicionar uma opção
--json-output
para diff.
Isso deve ser --json
ou --json-lines
(dependendo de qual saída) para consistência com outros comandos.
E uma saída diff deve ser algo assim:
Dessa forma, os usuários terão uma maneira fácil de analisar a saída
Não, isso parece bastante estranho para analisar e recombinar para algo útil. Toda a parte change
não é melhor do que analisar a saída não JSON existente, temo.
Eu prefiro sugerir uma entrada por caminho, tendo um campo type
para arquivo/diretório/hardlink/softlink etc., uma lista change
que lista os tipos de alteração, por exemplo, added
, deleted
, modified
(ou content
:pensando: ), owner
, mode
, etc., os tamanhos devem ser dados em bytes claro, e provavelmente como sizes { old: 12345, new: 12346}
Comentários muito úteis
Isso deve ser
--json
ou--json-lines
(dependendo de qual saída) para consistência com outros comandos.Não, isso parece bastante estranho para analisar e recombinar para algo útil. Toda a parte
change
não é melhor do que analisar a saída não JSON existente, temo.Eu prefiro sugerir uma entrada por caminho, tendo um campo
type
para arquivo/diretório/hardlink/softlink etc., uma listachange
que lista os tipos de alteração, por exemplo,added
,deleted
,modified
(oucontent
:pensando: ),owner
,mode
, etc., os tamanhos devem ser dados em bytes claro, e provavelmente comosizes { old: 12345, new: 12346}