2016-01-28 11 views
0

Я пытаюсь управлять индексом репозитория по сравнению с его деревом HEAD с помощью libgit2 (через Objective-Git, но я все больше и больше обнаруживаю, что возглавляю дыру в ванили libgit2), и мне интересно, что именно битмакс flags_extended field на git_index_entry структура фактически означает. Кроме того, когда эти флаги установлены? Я копал через источник libgit2, но не могу найти, где flags_extended входит в игру.В libgit2, что означает git_index_entry-> flags_extended mean (и когда они установлены)?

Я спрашиваю:

У меня есть простой тест хранилище с одной фиксацией, содержащими несколько простых тестовых файлов. Рабочая копия имеет один отслеживаемый файл с незначительным изменением и один необработанный файл, оба из которых были поставлены снаружи (git add . на командной строке). В моем приложении мне нужно «отключить» файлы, поэтому я получаю их соответствующие структуры git_index_entry. Я ожидал, что у flags_extended будет установлен параметр GIT_IDXENTRY_UPDATED для измененного файла и GIT_IDXENTRY_ADDED для ранее не проверенного файла, но на самом деле оба flags_extended поля пустые, что и вызвало этот вопрос (единственное, что установлено GIT_IDX_ENTRY_NAMEMASK в поле flags) ,

Я могу, конечно, получить дерево HEAD и сравнить записи с записями в индексе, но я надеялся, что libgit2 уже предоставил эту информацию через flags_extended.

ответ

0

Я ожидал, что флаги будут расширены, чтобы иметь установленный файл GIT_IDXENTRY_UPDATED для измененного файла и GIT_IDXENTRY_ADDED для ранее не прошедшего проверку файла.

Нет, эти флаги коренным образом связаны с libgit2. Они используются для хранения информации об индексах в памяти после загрузки индекса с диска. Они должны предотвращать и/или обнаруживать внутренние расы данных, они не для определения статуса вашего репозитория.

Если вы хотите сравнить HEAD с индексом, загрузите дерево HEAD, а затем используйте git_diff_tree_to_index.

+0

Спасибо! Я действительно хочу, чтобы этот материал был где-то документально зарегистрирован (хотя комментарий к документации упоминает, что эти флаги не сохраняются на диске, у него нет никаких указаний на * где * именно они используются). Я сделаю ручное сравнение с HEAD! –