В libgit2, что означает git_index_entry->flags_extended (и когда они установлены)?

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

Причина, по которой я спрашиваю:

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам