Пользователь вводит команду git bug new
или git bug new -m “...”
, предоставляя summary и description нового issue. В текущем репозитории git создается 3 blob объекта (status, summary, description), которые хранят обязательные атрибуты issue.
В blob объекте status хранится текущее состояние issue - строка “open” или “resolved”, обозначающая соответствующее состояние. При создании issue присваивается значение “open”.
В blob объекте summary хранится текст содержащий текущий summary issue. При создании issue присваивается значение первой строки пользовательского ввода.
В blob объекте description хранится текст содержащий текущий description issue. При создании issue присваивается весь текст полученный от пользователя при вводе начиная со второй строки.
Из этих blob объектов создается дерево. Далее создается коммит на дерево с blob объектами, который будет отражать дату создания и автора issue. Хэш этого коммита (далее обозначается как хэш issue) выдается пользователю по завершению работы команды, как хэш по которому пользователь может осуществлять операции над issue. Создается новый blob с названием равным хэшу issue, содержащий в себе строку с хэшем issue. (В пункте “изменение issue” обосновываются причины создания этого blob объекта). Проверяется наличие ссылки "ISSUES" в репозитории, если ссылка существует, то в Index считывается дерево на которое указывает коммит в ссылке. В Index добавляется созданный blob, создается дерево, на него делается коммит, где как parent коммит указывается коммит по ссылке "ISSUES" (Если она создана), его хэш присваивается ссылке "ISSUES".
На данный момент предполагается 2 варианта изменения issue:
1.Пользователь вводит команду git bug edit <hash>
, предоставляя измененные варианты атрибутов summary и description, создается два blob объекта summary и description, так как описано в пункте “Описание blob объектов, хранящих атрибуты issue”, из них создается дерево (далее обозначается как дерево изменений). (дальнейшие действия описаны в пункте “Обработка дерева изменений”)
2.Пользователь вводит команду git bug resolve <hash>
, запрашивая изменения статуса issue на “resolved”. Создается blob объект status, содержащий строку “resolved”, из него создается дерево (далее обозначается как дерево изменений). (дальнейшие действия описаны в пункте “Обработка дерева изменений”)
Ищется последняя версия blob объекта (с названием равным введенному хэшу) в дереве на которое указывает ссылка "ISSUES", создается коммит на “дерево изменений”, где как хэш parent коммита указывается содержание найденного blob объекта (далее созданный коммит обозначается как коммит изменений). Коммит изменений отражает дату и автора изменения issue. Создается новый blob с названием равным введенному хэшу, содержащий в себе строку с хэшем “коммита изменений”. Cчитывается дерево на которое указывает коммит в ссылке "ISSUES". В Index добавляется созданный blob, создается дерево, на него делается коммит, где как parent коммит указывается коммит по ссылке "ISSUES", его хэш присваивается ссылке "ISSUES".