Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Начинаем начинать github as database #138

Draft
wants to merge 57 commits into
base: master
Choose a base branch
from

Conversation

zetroot
Copy link
Collaborator

@zetroot zetroot commented Apr 29, 2021

PR для прозрачности прогресса.
Реализация описанного в #129
Набор классов для работы с репозиториями github и их содержимым в памяти. Сейчас все это реализует IFileProvider. Только стрим с файлом можно не только читать, но и писать.
Нужна собственная абстракция провайдера файлов с методами создания и удаления файлов. Обновление в репозитории осуществляется через Flush стрима.
Все начинается с GitHubFilesystem. Надо начать сессию редактирования методом StartContext, затем можно пользоваться как IFileProvider.

Что в ближайших планах:

  • увеличить покрытие тестами
  • завершение сессии редактирования - создание PR в головной репозиторий

@zetroot
Copy link
Collaborator Author

zetroot commented May 3, 2021

Добавил возможность закоммитить изменения.
В тестах лежит файл для F# Interactive , где можно поиграться с клиентом.
test/DotNetRu.Commune.Test.Fs.GitHubFilesystem/GithubScriptTest.fsx
Чтобы все заработало его надо покормить токеном авторизации (первый аргумент метода StartContext)
В результате можно получить вот такой прекрасный PR

@kulakovt
Copy link
Member

kulakovt commented May 3, 2021

@zetroot Было бы замечательно получить подробную инструкцию как получить GitHub токен. И сохранить её в wiki

@zetroot
Copy link
Collaborator Author

zetroot commented May 3, 2021

@kulakovt ок, займусь завтра.

@zetroot
Copy link
Collaborator Author

zetroot commented May 4, 2021

@kulakovt добавил страницу в wiki

* setting up serilog logging

* dependency injection and options injection
@zetroot
Copy link
Collaborator Author

zetroot commented Jun 1, 2021

Коллеги, что-то я застрял.

  • синхронные API нам не подойдут - blazor не может в Task.Result или в .GetAwaiter().GetResult(), поэтому вся работа с "файлами" должна быть асинхронной
  • сейчас приложуха умеет дописывать в открытый файл и делать PR, но вот тут мне не хватает идей. Что нам еще нужно для PoC?
  • я вспомнил почему я не пошел в веб

@kulakovt
Copy link
Member

kulakovt commented Jun 1, 2021

вся работа с "файлами" должна быть асинхронной

Думаю, это не проблема. Любой IO должен быть асинхронным.

Что нам еще нужно для PoC?

Игорь писал в #129

  • Чтение файлов
  • Создание/удаление бранчей
  • Создание PR
  • Я бы ещё добавил создание/запись в файл

@zetroot
Copy link
Collaborator Author

zetroot commented Jun 2, 2021

Итак, я немного потрудился еще и теперь:

  • можно создавать бранчи (создается автоматически при начале редактирования)
  • можно читать файлы!
  • можно создавать PR в основной репозиторий
  • можно создавать файлы (тут есть ограничение - нельзя создать пустой файл, там обязательно что-то должно быть, поэтому сначала файл создаётся виртуально, а при Flush будет запрос на Create а не Update)

Интерфейс конечно выглядит отвратительно. Но вроде бы работает. Кто-то может испытать?

@kulakovt
Copy link
Member

Посмотрите пожалуйста асинхронную файловую систему. Подходит ли она под все ваши пожелания?
https://github.com/DotNetRu/Auditor/pull/8/files

@zetroot
Copy link
Collaborator Author

zetroot commented Jun 11, 2021

@kulakovt выглядит в целом как то что нужно. Хочу еще больше асинхронности, например в получении Stream. Отписал в PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants