A organização possui alguma operação de "emaranhado inverso", por exemplo, para colaborar com usuários que não são da organização?

10

Gostaria de escrever minhas próprias notas / testes / código na organização e depois usá-lo org-bable-tanglepara produzir arquivos de origem. No entanto, todos esses arquivos estão sujeitos ao controle de versão e, portanto, sujeitos a alterações fora do meu ambiente organizacional.

Eu gostaria de poder ter um número de srcblocos e depois enredar em vários arquivos diferentes, cada um dos quais seria comprometido com o controle de versão. Mas, ao mesmo tempo, consiga "desembaraçar" cada um desses arquivos de volta ao meu arquivo organizacional depois de extrair quaisquer alterações do controle de versão.

Existe alguma maneira simples de fazer isso? Agora estou pensando em brincar cominsert-file-contents

RJTK
fonte
Você poderia dar um pequeno exemplo do que está pedindo para fazer? Parece que você tem blocos de código em um ou mais arquivos organizacionais e deseja que o arquivo ou arquivos gerados a partir do emaranhado desses blocos sejam desmontados nos blocos originais com alterações nos arquivos organizacionais.
David D.
Essencialmente, o fluxo de trabalho seria assim: (1) escreva algum código alfabético na organização. (2) emaranhe esse código em um ou mais arquivos. (3) O git confirma esses arquivos. (4) almoçar (5) git puxar as alterações do meu colega. (6) "emaranhado inverso" essas alterações novamente em blocos de código no meu arquivo organizacional. (7) goto (1).
RJTK 5/10

Respostas:

6

É sim org-babel-detangle.

org-babel-detangle é uma função Lisp compilada interativa em ob-tangle.el.

(org-babel-detangle &optional SOURCE-CODE-FILE)

Propague as alterações no arquivo de origem de volta ao original da organização. Isso requer que os blocos de código sejam entrelaçados com comentários de link que permitem que os blocos de código originais sejam encontrados.

Você precisa definir o commentsargumento do cabeçalho linkpara fazê-lo funcionar, por exemplo,

#+begin_src ruby :tangle hello.rb :comments link
  puts 'hello'
#+end_src

use M-x org-babel-tanglepara exportar o bloco de código, um novo arquivo nomeado hello.rbserá criado e deverá ter conteúdo semelhante ao seguinte

~ $ cat hello.rb
# [[file:~/foo.org][No heading:1]]
puts 'hello'
# No heading:1 ends here
~ $

Por fim, abra hello.rbno Emacs, mude hellopara hello worlde execute M-x org-babel-detangleno hello.rbbuffer do. O arquivo organizacional será atualizado

#+begin_src ruby :tangle hello.rb :comments link
  puts 'hello world'
#+end_src
xuchunyang
fonte
Você poderia ser mais preciso (ou dar um exemplo) sobre como usar essa função org-babel-detangle. Tentei com o seu código ruby ​​usar M x org-babel-detangle após alterar para hello.rb e modificar levemente o código, mas eu tenho o erro "org-babel-detangle: argumento do tipo errado: stringp, nil".
Lgen
@Lgen Atualizei minha resposta. E não esqueça de ler org-babel-detanglea documentação para entender o propósito e o uso.
xuchunyang
Obrigado por este esclarecimento. Eu não tinha entendido a suposição de que o código-fonte tinha que ser editado no emacs para permitir emaranhamento reverso (eu estava usando outro editor de texto para modificar o código-fonte). Funciona como esperado agora.
Lgen
Esse é um recurso interessante, mas não é exatamente o que eu esperava encontrar. Eu realmente não posso cometer os [...] # comentários, pois eles não significam nada, exceto para mim. É possível anotar um bloco de origem para separar de um arquivo inteiro sem exigir o comentário do link? Essencialmente apenas insert-file-contents?
RJTK
2

Há também o org-tanglesync , que possui um método muito mais simples de sincronizar do queorg-babel-detangle

Essencialmente, se um bloco é emaranhado em um arquivo externo, toda vez que esse bloco é editado, o arquivo externo também é verificado e, se um diff for detectado, o usuário será solicitado a rejeitar ou puxar as alterações externas para o bloco org src.

Isso também possui funções para processar automaticamente todos os blocos emaranhados em um buffer. Espero que ajude.

Mehmet Tekman
fonte