2013-06-03 26 views
5

Sto tentando di creare un commit a livello di codice in un repository esistente utilizzando Rugged (il binding Ruby di libgit2). Ho provato a seguire la documentazione fornita in Rugged README, ma penso che non corrisponda esattamente allo stato attuale del codebase. Continuo a ricevere errori quando provo in esecuzione il seguente codice:Come creare un commit a livello di codice con Rugged?

require 'rugged' 
# Create an instance of the existing repository 
repo = Rugged::Repository.new('/full/path/to/repo') 
# grab the current Time object for now 
curr_time = Time.now 
# write a new blob to the repository, hang on to the object id 
oid = repo.write("Some content for the this blob - #{curr_time}.", 'blob') 
# get the index for this repository 
index = repo.index 
# add the blob to the index 
index.add(:path => 'newfile.txt', :oid => oid, :mode => 0100644) 
curr_tree = index.write_tree(repo) 
curr_ref = 'HEAD' 
author = {:email=>'[email protected]',:time=>curr_time,:name=>'username'} 
new_commit = Rugged::Commit.create(repo, 
    :author => author, 
    :message => "Some Commit Message at #{curr_time}.", 
    :committer => author, 
    :parents => [repo.head.target], 
    :tree => curr_tree, 
    :update_ref => curr_ref) 

L'errore corrente che sto ottenendo dice che c'è qualcosa che non va con la linea index.add. Dice TypeError: wrong argument type nil (expected Fixnum).

Qualsiasi aiuto su una migliore comprensione di come creare un nuovo commit con rugged sarebbe molto apprezzato.

Aggiornamento

Ho appena aggiornato Rugged 0.16.0-Rugged 0.18.0.gh.de28323 eseguendo gem install --prerelease rugged. Il codice che ho descritto sopra sembra funzionare ora. Non sono sicuro del motivo per cui non ha funzionato con 0.16.0. Questa persona sembrava avere lo stesso problema descritto in this answer.

+0

qual è il numero di riga? – fotanus

+0

Si sta interrompendo sulla riga con 'index.add'. – jbranchaud

+0

Spiacente, per qualche ragione ho letto il file index.add – fotanus

risposta

3

Sembra che si sta passando in nil-index.add dove non accetta uno, e l'errore in quella linea è solo un sintomo di non riuscire a controllare gli errori precedenti. Il secondo parametro su repo.write dovrebbe essere un simbolo, non una stringa, quindi è molto probabile che restituisca nil per segnalare un errore. Passare a :blob anziché a 'blob' dovrebbe risolverlo.

È possibile dare un'occhiata a https://github.com/libgit2/docurium/blob/master/lib/docurium.rb#L115-L116 e il codice circostante che stiamo usando per generare propria documentazione di libgit2.

+0

Inizialmente davo 'repo.write' a un simbolo (': blob') come secondo argomento, ma poi si sarebbe verificato un errore su quella riga affermando che non riconosceva il simbolo. Tuttavia, quando l'ho cambiato in "blob", ha funzionato. Il 'oid' non è nullo. Sto basando quello fuori del codice in [questa domanda] (http://stackoverflow.com/questions/14386044/comparing-2-commits-in-rugged?rq=1). – jbranchaud

+0

Rugged ha accettato un simbolo per un tempo molto lungo. In caso contrario, c'è qualcosa di completamente sbagliato nel setup. Assicurati di avere l'ultima robusta. –

+0

Vedere il mio aggiornamento. Inoltre, ho ottenuto il codice qui sopra per lavorare sia con "blob" che con ": blob". Non sono sicuro del perché. Qualche idea? – jbranchaud