Rugged::Repository #status сообщает об очищенном состоянии при использовании Rugged для добавления файла в индекс

Я пытаюсь использовать Rugged::Index #add для добавления нового файла в индекс. Похоже, он успешно добавлен в индекс, но связанный с ним статус Rugged::Repository # для данного файла очищен.

Пример сеанса IRB, показывающий мою попытку добавить файл "TEST_JJV_IRB1"

>> path = "TEST_JJV_IRB1"
=> "TEST_JJV_IRB1"
>> FileUtils.touch("#{local_repo}/#{path}")
=> ["/var/tmp/d20141015-95025-c5bbxe/TEST_JJV_IRB1"]
>> repo.inspect
=> "#<Rugged::Repository:70155837868280 {path: \"/private/var/tmp/d20141015-95025-c5bbxe/.git/\"}>"

Rugged::Repository #status правильно сообщает о вновь созданном файле "TEST_JJV_IRB1".

>> repo.status(path)
=> [:worktree_new]

и правильно не включены в Rugged::Index

>> index = repo.index
=> #<Rugged::Index
  [0] 'a_file'
  [0] 'b_file'
  [0] 'c_file'

Здесь я пытаюсь добавить новый файл в файл index.

>> oid = Rugged::Blob.from_workdir repo, path
=> "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"
>> index.add(:path => path, :oid => oid, :mode => 0100644)
=> nil
>> index.write
=> nil

Добавляемый файл "TEST_JJV_IRB1" теперь правильно включен в индекс.

>> repo.index
=> #<Rugged::Index
  [0] 'a_file'
  [0] 'b_file'
  [0] 'c_file'
  [0] 'TEST_JJV_IRB1'

Но Rugged::Repository #status сообщает о его статусе как очищенном.

>> repo.status(path)
=> []

Я ожидаю, что Rugged::Repository #status сообщит [:index_new]

Как ни странно, выдача git status из командной строки показывает новый файл «TEST_JJV_IRB1» как «Изменения, которые необходимо зафиксировать:»

% git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   TEST_JJV_IRB1

person JoeV VLcek    schedule 15.10.2014    source источник
comment
Я вполне могу просто неправильно использовать Rugged::Index #add... ?   -  person JoeV VLcek    schedule 16.10.2014


Ответы (1)


Прочный сбивает с толку.

Я заметил, что это похоже на как я могу использовать Rugged для создания и фиксации файла, как из командной строки?

Глядя на https://github.com/libgit2/rugged#writing-to-a-repository — похоже, что add имеет второй параметр под названием type. Это меняет дело?

person kbrock    schedule 16.10.2014
comment
Спасибо за ваш ответ. Прочный сбивает с толку! Я прочитал аналогичную статью stackoverflow.com/questions/24551308/ Похоже, repo.write имеет параметр типа, а не индекс .добавлять. Я что-то упускаю? - person JoeV VLcek; 16.10.2014
comment
Спасибо за ваш ответ. Прочный сбивает с толку! Я прочитал аналогичную статью stackoverflow.com/questions/24551308/ Похоже, repo.write имеет параметр типа, а не индекс .добавить или я что-то упустил? Я пробовал параметр типа repo.write, но, похоже, это не повлияло. - person JoeV VLcek; 16.10.2014