Насколько терпима к внешним изменениям рабочего дерева libgit2 с загруженным объектом репозитория?

Представьте, что у вас есть длительный процесс, который создает экземпляр объекта git_repository* при запуске программы. Время от времени запрашиваются коммиты (git_commit_lookup), проверка состояния репозитория (git_repository_head_unborn), парсинг и список ссылок (git_revparse_single, git_reference_lookup, git_branch_iterator_new, ...).

Однако независимо от этого процесса существуют другие процессы (например, vanilla git), работающие над этим рабочим деревом и изменяющие его (например, фиксация, вытягивание, отправка, перемещение, создание веток и т. д.).

  • Должен ли я ожидать сбоев на основе, например. устаревшие кэшированные данные (например, структуры индексов или файлы odb) или файлы с отображением памяти?
  • Должен ли я беспокоиться о том, что получу устаревшие данные?
  • Должен ли я беспокоиться, потому что libgit2 начинает выделять все больше и больше памяти для кэширования?
  • Или мне нужно git_repository_free и регулярно получать "свежий" git_repository* указатель?

Я использую Visual Studio 2013 (Update4) и когда я работаю над рабочим деревом, оно время от времени вылетает в git2-...dll... Вот и интересно, libgit2 вообще рассчитан на такие сценарии.

Первые тесты с моим собственным приложением показывают, что сбоев не происходит, но это, конечно, может зависеть от моих конкретных тестов...


person MrTux    schedule 12.03.2015    source источник
comment
Если у вас возникли проблемы с Visual Studio, сообщите об этом в Microsoft. VS использует пользовательскую версию libgit2, которую проект не поддерживает.   -  person Carlos Martín Nieto    schedule 12.03.2015
comment
Я не могу понять, спрашиваете ли вы о своем приложении или на самом деле спрашиваете о VS 2013. Если последнее, пожалуйста, обновитесь до VS 2013 Update 4 и сообщите нам о любых ошибках, чтобы мы могли их исправить.   -  person Edward Thomson    schedule 12.03.2015
comment
@EdwardThomson Спасибо за ваши комментарии. VS2013 Update4 дает сбой, но это только причина, по которой я не уверен, можно ли использовать libgit2 в сценарии, как описано в вопросе в целом.   -  person MrTux    schedule 12.03.2015
comment
@MrTux Понятно. А если серьезно, пожалуйста, сообщайте об ошибках.   -  person Edward Thomson    schedule 12.03.2015
comment
@EdwardThomson Как сообщить об ошибках в MS? - Для посторонних MS выглядит как светодиод, есть только один способ взаимодействия.   -  person MrTux    schedule 13.03.2015
comment
Жаль это слышать. :( connect.microsoft.com/VisualStudio — это то, что вам нужно. Так оно и дойдет до нас.   -  person Edward Thomson    schedule 13.03.2015


Ответы (1)


Ожидается, что экземпляр libgit2 будет хорошо работать с другими клиентами git (git.git, libgit2, jgit и т. д.).

Должен ли я ожидать сбоев на основе, например. устаревшие кэшированные данные (например, структуры индексов или файлы odb) или файлы с отображением памяти?

Вы не должны, нет. Мы читаем индекс в память и работаем с ним. Если бы это было изменено ниже, вы могли бы увидеть устаревшую информацию, но вы не должны сбой. Если вы это сделаете, это будет ошибкой.

Должен ли я беспокоиться о том, что получу устаревшие данные?

Вам нужно будет уточнить это с помощью реального сценария. Например: с индексом, если вы загружаете его с помощью git_index_load, это считывает индекс в память. Затем вы можете оперировать его. Если кто-то другой обновит индекс, то ваши данные действительно устарели.

Если вы ожидаете интенсивного параллелизма, вы можете перезагрузить вещи. Например, вы можете вызвать git_index_load для перезагрузки индекса, если он изменился с момента последней загрузки.

Должен ли я беспокоиться, потому что libgit2 начинает выделять все больше и больше памяти для кэширования?

Кэширование настраивается как опция libgit2. Его значения по умолчанию относительно умеренные, но существуют ограничения на размер кеша.

Или мне нужно git_repository_free и регулярно получать «свежий» указатель git_repository*?

Не думаю, что от этого будет большая польза.

person Edward Thomson    schedule 12.03.2015