Существуют ли какие-либо инструменты управления репозиторием R-пакета? - программирование

Существуют ли какие-либо инструменты управления репозиторием R-пакета?

Я создаю специальный репозиторий R-пакетов и хочу реплицировать структуру архива CRAN, в соответствии с которой старые версии пакетов хранятся в каталоге src/contrib/Archive/packageName/. Я хотел бы использовать функцию install_version в devtools (источник здесь), но эта функция зависит от наличия CRAN-подобных архивной структуры вместо всех версий пакета в src/contrib/.

Существуют ли какие-либо инструменты управления репозиторием R-пакета, которые облегчают создание этой структуры каталогов и других связанных с ними задач (например, обновление файла Archive.rds)?

Было бы неплохо, если бы инструменты управления обрабатывали логику пакета type на стороне репозитория, чтобы я мог использовать один и тот же код install.packages() или install_version() на сервере Linux, как на моем локальном Mac (т.е. я не нужно использовать type="both" или type="source" при локальной установке на Mac).

4b9b3361

Ответ 1

Короткий ответ: Не совсем для использования на открытом воздухе.

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

Хранители CRAN хранят множество сценариев здесь для управления репозиторией CRAN, но неясно, как они все работают вместе или какие части необходимы обновить индекс пакета, запустить проверку пакетов или управлять структурой каталогов.

Функция tools::write_PACKAGES может использоваться для обновления индекса пакета, но это необходимо обновлять каждый раз, когда пакет добавляется, обновляется или удаляется из репозитория.

M.eik Michalke создал roxyPackage package, который имеет возможность автоматически обновлять данный репозиторий, устанавливать его, и т.д. Разработчик также недавно добавил, что структура архива имитирует структуру CRAN с помощью функции archive_structure. Недостатком является то, что пакет не включен в CRAN и, вероятно, будет лучше интегрирован с devtools. Он также совершенно новый и еще не готов к широкому использованию.

Наконец, я создал небольшой Ruby script, который следит за данным репозиторием и обновляет индекс пакета, если какие-либо файлы меняются. Однако это делается для работы в моей конкретной организации и необходимо будет реорганизовать для внешнего использования. Я могу сделать его более общим, если кто-то заинтересован в нем.