2013-06-03 29 views
5

Rugged (libgit2'un Ruby bağını kullanarak) kullanarak varolan bir depoya program aracılığıyla bir program oluşturmaya çalışıyorum. Rugged README'da verilen belgeleri izlemeyi denedim, ancak bence kod tabanının mevcut durumuyla tam olarak eşleşmiyor. Ben aşağıdaki kodu çalıştırmayı deneyin alma hataları tutmak:Rugged ile programlı bir şekilde nasıl programlama yapılır?

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) 

alıyorum güncel hata index.add hattı ile yanlış bir şey olduğunu söylüyor. TypeError: wrong argument type nil (expected Fixnum) diyor.

Engebeli yeni bir işlemin nasıl oluşturulacağını daha iyi anlamak için herhangi bir yardım çok takdir edilecektir.

Güncelleme

Sadece gem install --prerelease rugged çalıştırarak Rugged 0.18.0.gh.de28323 için Rugged 0.16.0 güncellendi. Yukarıda ayrıntılandırdığım kod şimdi çalışıyor gibi görünüyor. Neden 0.16.0 ile çalışmadığından emin değilim. Bu kişi, this answer'da ayrıntılı olarak aynı soruna sahip gibi görünüyordu.

+0

Satır numarası nedir? – fotanus

+0

"index.add" ile satırda kırılıyor. – jbranchaud

+0

Üzgünüz, herhangi bir nedenden dolayı index.add dosyasını okuyordum – fotanus

cevap

3

nil'dan index.add'a geçmeyi kabul edersiniz, burada bir tanesini kabul etmez ve bu satırdaki hata yalnızca hataları daha önce denetlemenin bir belirtisidir. repo.write için ikinci parametre, bir dize değil, bir sembol olmalıdır, bu nedenle bir hatayı bildirmek için büyük olasılıkla nil döndürülür. 'blob' yerine :blob geçmek, onu düzeltmelidir.

Libita2'nin kendi belgelerini oluşturmak için kullandığımız https://github.com/libgit2/docurium/blob/master/lib/docurium.rb#L115-L116 ve çevresindeki kodu inceleyebilirsiniz.

+0

Orijinal olarak "repo.write" ikinci argüman olarak bir sembol (': blob') vermekteydim, ancak o zaman bu satırda hata olduğunu kabul etmekteydi. sembolü. Ancak, onu 'blob' olarak değiştirdiğimde çalıştı. Oid sıfır değil. Bunu [bu soru] 'daki koddan yapıyorum (http://stackoverflow.com/questions/14386044/comparing-2-commits-in-rugged?rq=1). – jbranchaud

+0

Sağlam, çok uzun bir süre için bir sembolü kabul etti. Eğer değilse, o zaman kurulumda oldukça yanlış bir şey var. En son sağlam olduğundan emin ol. –

+0

Güncelleme bölümüne bakın. Ayrıca, yukarıdaki kodu hem 'blob' hem de blob ile çalışmak için aldım. Neden böyle emin değilim. Herhangi bir fikir? – jbranchaud