Я пытаюсь программно создать фиксацию в существующем репозитории, используя Rugged (привязка Ruby от libgit2). Я попытался выполнить документацию, представленную в Rugged 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)
.
Любая помощь по лучшему пониманию того, как создать новую фиксацию с прочной, будет высоко оценена.
Update
Я только что обновил Rugged 0.16.0
на Rugged 0.18.0.gh.de28323
, запустив gem install --prerelease rugged
. Код, который я подробно описал выше, теперь работает. Я не уверен, почему это не сработало с 0.16.0. У этого человека, похоже, была та же проблема, о которой они подробно рассказали в this answer.
какой номер строки? – fotanus
Он ломается на линии с 'index.add'. – jbranchaud
Извините, по какой-то причине я читаю файл index.add – fotanus