Я пишу приложение, которое позволяет выполнять основные операции git с помощью Objective-Git, но у меня возникают проблемы с выяснением того, как «отключить» файл. В частности, у меня есть файл с изменениями, которые ранее были добавлены в текущий GTIndex, и теперь я хочу отменить эти изменения (без потери текущего состояния файла на диске).
Вот примерный план соответствующей логики, которой в настоящее время следует моя программа при переключении «поэтапного» состояния файла:
- Fetch current GTIndex using GTRepository.indexWithError:
- Fetch GTIndexEntry for the file using GTIndex.entryWithPath:
- If the file has an index and GTIndexEntry.status == GTIndexEntryStatusUpdated:
- Here's where I'm stuck
В соответствии с этим старым вопросом без ответа мне нужно найти информацию о файле в текущем HEAD. В таком случае я пришел к такой логике:
- Fetch head's GTReference using GTRepository.headReferenceWithError:
- If the reference resolves to a GTCommit object:
- Fetch the GTTree using GTCommit.tree
- Fetch the file's GTTreeEntry using GTTree.entryWithPath:error:
- Stuck again! Do I convert GTTreeEntry to GTIndexEntry somehow?
Любое руководство приветствуется! Я не боюсь прыгать прямо в libgit2, если мне нужно (этот проект уже потребовал этого один или два раза), но, поскольку я работаю в Swift, я хотел бы избежать этого, если я могу, и «отменить» файл кажется такой стандартной процедурой, что я подумал, что не должен понимать, как классы Objective-Git связаны друг с другом.