2013-06-03 4 views
5

Rugged(Rubyバインディングlibgit2)を使用して、既存のリポジトリへのコミットをプログラムで作成しようとしています。私は頑丈なREADMEで提供されているドキュメントに従おうとしましたが、コードベースの現在の状態とあまり一致しないと思います。私は、次のコードを実行しようとするとエラーが発生しておいてください。プログラムで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) 

私は取得しています現在のエラーがindex.addラインに問題があることを述べています。それはTypeError: wrong argument type nil (expected Fixnum)と言います。

新しいコミットを頑丈に作成する方法を理解する助けがあれば、大変感謝しています。

アップデートは

私はちょうどgem install --prerelease ruggedを実行することによってRugged 0.18.0.gh.de28323Rugged 0.16.0を更新しました。上で詳述したコードは今働くようです。なぜそれが0.16.0で動作しなかったのか分かりません。この人は、this answerに詳述されているのと同じ問題を抱えていたようです。

+0

行番号は何ですか? – fotanus

+0

'index.add'で改行しています。 – jbranchaud

+0

申し訳ありません、何らかの理由でindex.addファイルを読んでいます – fotanus

答えて

3

nilからindex.addに渡されているようですが、その行のエラーは以前のエラーを確認できないという単なる症状に過ぎません。 repo.writeの2番目のパラメータは、文字列ではなくシンボルである必要があります。したがって、エラーが発生する可能性が最も高いのはnilです。 'blob'の代わりに:blobを渡してください。

libgit2独自のドキュメントを生成するために使用しているhttps://github.com/libgit2/docurium/blob/master/lib/docurium.rb#L115-L116とその周辺のコードをご覧ください。

+0

私はもともと 'repo.write'に2番目の引数としてシンボル(':blob')を与えていましたが、その行でエラーを認識しませんでしたシンボル。しかし、私はそれを '' blob ''に変更したときに動作しました。 'oid'はゼロではありません。私は、[この質問](http://stackoverflow.com/questions/14386044/comparing-2-commits-in-rugged?rq=1)のコードをベースにしています。 – jbranchaud

+0

頑丈なシンボルは非常に長い間シンボルを受け入れています。そうでなければ、セットアップにかなり間違ったことがあります。あなたは最新の頑丈さを持っていることを確認してください。 –

+0

私の更新を見てください。また、上記のコードは '' blob 'と ':blob'の両方で動作するようになっています。それがなぜなのかわからない。何か案は? – jbranchaud

関連する問題