Слияние кода завершено, страница обновится автоматически
git checkout my-new-feature # Чтобы переключиться на вашу ветку
git status # Чтобы увидеть новые и изменённые файлы
git add FILENAME # Чтобы выбрать FILENAME для коммита
git status # Чтобы проверить изменения, которые будут зафиксированы
git commit # Чтобы сделать коммит
git log # Чтобы проверить коммит. Используйте q, чтобы выйти из лога
Вы можете изменить сообщение или изменения в последнем коммите с помощью:
git commit --amend
Если вы вносите изменения в коммиты, которые были отправлены в GitHub, то вам придётся [заменить ваши ранее отправленные коммиты](#замена-ваших-ранее-отправленных-коммитов).
### Замена ваших ранее отправленных коммитов
Обратите внимание, что вы собираетесь переписать историю GitHub вашей ветки. Рекомендуется привлечь ваших соавторов перед изменением коммитов, которые были отправлены в GitHub.
Ваши ранее отправленные коммиты заменяются на:
git push --force origin my-new-feature
### Основывание ваших изменений на последней версии master
Чтобы основывать ваши изменения на последней версии [rclone master](https://github.com/rclone/rclone/tree/master) (upstream):
git checkout master
git fetch upstream
git merge --ff-only
git push origin --follow-tags # Дополнительное обновление вашего форка на GitHub
git checkout my-new-feature
git rebase master
Если вы перебазируете коммиты, которые были отправлены в GitHub, то вам придётся [заменить ваши ранее отправленные коммиты](#замена-ваших-ранее-отправленных-коммитов).
### Объединение ваших коммитов в один
Чтобы объединить ваши коммиты в один:
git log # Чтобы посчитать количество коммитов для объединения, например, последние 2
git reset --soft HEAD~2 # Чтобы отменить 2 последних коммита
git status # Чтобы убедиться, что всё в порядке
Если всё в порядке, то сделайте новый объединённый коммит:
git commit # Чтобы зафиксировать отменённые коммиты как один
в противном случае вы можете откатиться назад с помощью:
git reflog # Чтобы проверить, что HEAD{1} — это ваше предыдущее состояние
git reset --soft 'HEAD@{1}' # Чтобы вернуться к вашему предыдущему состоянию
Если вы объединяете коммиты, которые были отправлены в GitHub, то вам придётся [заменить ваши ранее отправленные коммиты](#замена-ваших-ранее-отправленных-коммитов).
Совет: Возможно, вам понравится использовать git rebase -i master, если у вас есть опыт или более сложная ситуация.
### Непрерывная интеграция GitHub
В настоящее время rclone использует [GitHub Actions](https://github.com/rclone/rclone/actions) для сборки и тестирования проекта, который должен автоматически стать доступным для вашего форка со вкладки «Actions» в вашем репозитории.
## Тестирование
### Тесты качества кода
Если вы установите golangci-lint, то вы сможете запустить те же тесты, что и в CI, что может быть очень полезно.
Вы можете запустить их с make check или с golangci-lint run ./...
Использование этих тестов гарантирует, что вся кодовая база rclone соответствует одним и тем же стандартам кодирования. Эти тесты также проверяют наличие простых ошибок (например, забывание проверить возврат ошибки).
### Быстрое тестирование
Тесты rclone запускаются из среды тестирования go, поэтому на верхнем уровне вы можете запустить это, чтобы запустить все тесты.
go test -v ./...
Также вы можете использовать make, если ваша платформа его поддерживает
make quicktest
Быстрый тест [автоматически запускается GitHub](#непрерывная-интеграция-GitHub) при отправке вашей ветки в GitHub.
### Тестирование бэкенда
rclone содержит смесь модульных тестов и интеграционных тестов. Поскольку сложно (и в некоторых отношениях бессмысленно) тестировать облачные системы хранения данных, высмеивая все их интерфейсы, модульные тесты rclone могут работать с любым бэкендом. Это делается путём создания специально названных удалённых устройств в файле конфигурации по умолчанию.
Если бы вы хотели протестировать изменения в бэкенде drive, то вам нужно было бы создать удалённое устройство под названием TestDrive.
Затем вы можете запустить модульные тесты в каталоге drive. Эти тесты пропускаются, если не определён TestDrive:.
cd backend/drive
go test -v
Затем вы можете выполнить
``` Обновить все модули до их последних стабильных версий. Зафиксируйте изменения одним коммитом, как указано выше.
Это должно быть сделано в начале цикла выпуска, чтобы вовремя подобрать новые версии пакетов для тестирования.
## Обновление бэкенда
Если вы обновляете бэкенд, пожалуйста, запустите юнит-тесты и интеграционные тесты для этого бэкенда.
Предполагая, что бэкенд называется `remote`, создайте запись конфигурации под названием `TestRemote` для использования тестами.
Теперь перейдите в каталог `remote` и запустите `go test -v`, чтобы запустить юнит-тесты.
Затем перейдите в каталог `fs` и запустите `go test -v -remote TestRemote:`, чтобы запустить интеграционные тесты.
Следующий раздел содержит более подробную информацию о тестах.
## Написание нового бэкенда
Выберите имя. В документации здесь будет использоваться `remote` в качестве примера.
Обратите внимание, что в терминологии rclone бэкенд файловой системы называется удалённым или fs.
### Исследование
- Посмотрите на интерфейсы, определённые в `fs/types.go`.
- Изучите один или несколько существующих удалённых серверов.
### Начало работы
- Создайте `backend/remote/remote.go` (скопируйте это из аналогичного удалённого сервера).
- box — хороший вариант для начала, если у вас есть удалённый сервер на основе каталогов (и показывает, как использовать кэш каталогов).
- b2 — хороший вариант, если у вас есть удалённое хранилище на основе корзины.
- Добавьте свой удалённый сервер в импорт в `backend/all/all.go`.
- Бэкенды на основе HTTP проще всего поддерживать, если они используют модуль rclone [lib/rest](https://pkg.go.dev/github.com/rclone/rclone/lib/rest), но если есть действительно хороший Go SDK от провайдера, используйте его вместо этого.
- Постарайтесь реализовать как можно больше дополнительных методов, так как это сделает удалённый сервер более удобным в использовании.
- Используйте [lib/encoder](https://pkg.go.dev/github.com/rclone/rclone/lib/encoder), чтобы убедиться, что мы можем кодировать любое имя пути, и `rclone info`, чтобы определить необходимые кодировки.
- `rclone purge -v TestRemote:rclone-info`
- `rclone test info --all --remote-encoding None -vv --write-json remote.json TestRemote:rclone-info`
- `go run cmd/test/info/internal/build_csv/main.go -o remote.csv remote.json`
- откройте `remote.csv` в электронной таблице и изучите его.
### Рекомендации для быстрого слияния
- **Используйте** [lib/rest](https://pkg.go.dev/github.com/rclone/rclone/lib/rest), если вы реализуете бэкенд, подобный REST, и анализируете XML/JSON в бэкенде.
- **Используйте** клиент или транспорт rclone из [fs/fshttp](https://pkg.go.dev/github.com/rclone/rclone/fs/fshttp), если ваш бэкенд основан на HTTP — это добавляет такие функции, как `--dump bodies`, `--tpslimit`, `--user-agent`, и вам не нужно ничего кодировать!
- **Следуйте** точно своему примеру бэкенда — используйте тот же порядок кода, имена функций, макет, структуру. **Не** перемещайте вещи и **не** удаляйте комментарии.
- **Не** разбивайте свой бэкенд на `fs.go` и `object.go` (есть несколько подобных бэкендов — не следуйте им!).
- **Создайте** определения типов API в отдельном файле — предпочтительно `api/types.go`
- **Помните**, что нам нужно поддерживать >50 бэкендов, поэтому важно, чтобы они были максимально похожи друг на друга!
### Юнит-тесты
- Создайте запись конфигурации под названием `TestRemote` для использования юнит-тестами.
- Создайте файл `backend/remote/remote_test.go` — скопируйте и настройте свой пример удалённого доступа.
- Убедитесь, что все тесты пройдены с помощью `go test -v`.
### Интеграционные тесты
- Добавьте свой бэкенд в `fstest/test_all/config.yaml`
- Как только вы это сделаете, вы сможете использовать платформу интеграционного тестирования из корня проекта:
- go install ./...
- test_all -backends remote
Или, если вы хотите запустить интеграционные тесты вручную:
- Убедитесь, что интеграционные тесты пройдены:
- `cd fs/operations`
- `go test -v -remote TestRemote:`
- `cd fs/sync`
- `go test -v -remote TestRemote:`
- Если ваш удалённый сервер определяет `ListR`, проверьте также:
- `go test -v -remote TestRemote: -fast-list`
Дополнительную информацию об интеграционных тестах см. в разделе [тестирование](#тестирование).
### Документация бэкенда
Добавьте свой бэкенд в документацию — вам нужно будет выбрать значок для него на [fontawesome](http://fontawesome.io/icons/). Храните списки удалённых серверов в алфавитном порядке по полному названию удалённого сервера (например, `drive` упорядочивается как).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )