Como fazer commit com ligações Ruby para libgit2
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.
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?