0

Rugged::Index #add を使用して新しいファイルをインデックスに追加しようとしています。インデックスに正常に追加されたように見えますが、関連する Rugged::Repository #status が特定のファイルに対してクリアされています。

ファイル「TEST_JJV_IRB1」を追加しようとした IRB セッションの例

>> 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/\"}>"

新しく作成されたファイル「TEST_JJV_IRB1」は、Rugged::Repository #status によって正しく報告されます

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

Rugged::Index に正しく含まれていません

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

ここで、新しいファイルをインデックスに追加しようとします。

>> 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
4

1 に答える 1