# #r #gitlab
Вопрос:
У меня есть внутренний репозиторий в Gitlab.
В моем сценарии R я хочу получить source
.R
файл из этого внутреннего репозитория.
Обычно я могу создать общедоступный сценарий R со следующим кодом
source("public-path-to-file")
Но когда я пытаюсь сделать это с помощью личного файла, я получаю:
Error in source("") :
:1:1: unexpected '<'
1: <
^
Комментарии:
1. Попробуйте
readLines()
(используется внутриsource
), чтобы, по крайней мере, получить полное сообщение об ошибке.2. Что касается фактической аутентификации (в противном случае вы не получите доступ к частному хранилищу), вы можете ознакомиться с пакетом учетных данных. Я не использовал его для поиска одного файла, но он хорошо работает с git2r и удаленными устройствами.
3. Ваша ошибка
unexpected '<'
заключается в том, что gitlab вернет HTML-файл по заданному URL-адресу, начиная с<!DOCTYPE html>
. Вам действительно нужен пакет учетных данных4. Работает ли пакет учетных данных также для gitlab? @danlooo
Ответ №1:
Я нашел хитрый способ сделать это, который, по крайней мере, помогает делу:
Сначала вам нужно создать приватный токен с доступом к api. Затем вы можете напрямую вызвать API gitlab, чтобы ПОЛУЧИТЬ файл
Код:
cmd <- "curl -s --header 'PRIVATE-TOKEN: <your private token for gitlab with api access>' '<full gitlab link of the raw file that you want to source>'" # you directly access the API with your private token
output <- system(cmd, intern=TRUE) # capturing the output of the system call
writeLines(output, "functions.R") # creating a temporary file which contains the output of the API call
source("functions.R") # Sourcing the file the usual way
file.remove("functions.R") # removing the temporary file for housekeeping
Объяснение:
Мы вызываем API напрямую с запросом GET, используя системную команду curl.
Затем вы вызываете системную команду через R, фиксируя результат.
А затем вы можете создать временный файл с соответствующим содержимым и создать его, как обычно. Надеюсь, это может кому-то помочь