Pergunta

Alguém sabe como criar um commit usando as ligações Ruby (a gema 'robusta') para libgit2?Eu tentei todos os exemplos que encontrei, no guia de uso do libgit2 e na página rugged gem do github, e nenhum dos exemplos para criar ou editar um commit está funcionando.

Isso tem sido útil para tentar descobrir como fazer o commit até agora, exceto que é para o próprio libgit2 e não para as ligações Ruby. http://librelist.com/browser//libgit2/2011/2/19/initing-a-repository-adding-files-to-the-index-and-commit/#d94ce8df18ff0202ce904180286a4a85

Quando tento fazer um commit, seguindo as etapas na página Rugged Github, recebo isto;

pry(main)> Rugged::Commit.create( repo, :author=>author, :message=>"Hello world\n\n", :committer=>author, :parents=>parents, :tree=>tree )
TypeError: wrong argument type nil (expected String)

E quando tento seguir o guia de uso da libgit2, que basicamente diz para obter o commit e depois editá-lo usando commit.message= como comandos, mas recebo noMethodErrors porque não existe um método 'message ='.

Guia de uso da libgit2: http://libgit2.github.com/api.html
Documentação robusta 0: http://rubydoc.info/gems/rugged/0.16.0/frames
Página robusta do Github: https://github.com/libgit2/rugged

Editar:Como eu reproduzo isso; http://pastebin.com/wnta8FWm
Editar_n+1:Eu também tentei usar o sha da árvore em vez de um objeto Rugged::Tree, tentando

x=Rugged::Commit.create( repo, :author=>author, :message=>"Hello world\n\n", :committer=>author, :parents=>parents, :tree=>tree.oid )

Mas isso produziu exatamente a mesma saída de erro de antes.

Foi útil?

Solução 2

DR --- Isso foi o que resolveu para mim: gem install --prerelease rugged

Depois de algumas pesquisas e muitas experiências, acho que descobri o problema.

Quando eu fiz gem install rugged me deu a versão 0.16.0.Esta era a versão com a qual eu estava tendo problemas, e quando tentei os testes que vieram com a gema, muitos dos testes falharam e muitos dos que falharam pareciam estar relacionados a commits e escrita de commits.

A página Rubygems para a gema Rugged mostra que há uma versão 0.17.0.b6 disponível, o que me confundiu porque nunca encontrei a opção '--prerelease' para gem.Essa versão deve ser um pré-lançamento porque depois de fazer gem install --prerelease rugged a versão 0.17.0.b6 foi instalada (também).

Agora com 0.17.0.b6 consigo acompanhar a documentação sem problemas.

Uma observação extra: a documentação que li não menciona isso, mas o código-fonte em ext/rugged_commit.c tem comentários que mencionam um :update_ref=>'' opção ao criar um commit que você pode usar para atualizar a ref para apontar para o novo commit.Sem esta opção, o commit será criado e gravado no ODB, mas nenhuma referência será atualizada e assim o commit não estará acessível em nenhuma de suas ramificações.

Outras dicas

Rugged::Commit.create(repo, data) não é o que está no README.Qual código você está executando?Parece que está faltando um campo obrigatório.Quais campos você está preenchendo e como?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top