2013-02-23 15 views
5

Zapytałem o pytanie related i zdałem sobie sprawę, że nie zadawałem właściwego pytania (tzn. Nie chodzi o git).Wysyłaj do github przez wiersz poleceń (Windows)

Pytanie brzmi: jak przesłać projekt do github bez wcześniejszego tworzenia projektu w chmurach przy użyciu R. Obecnie można to zrobić z wiersza poleceń git w RStudio, korzystając z informacji z this question.

Teraz próbuję zrobić to w kod R teraz z komputera z systemem Windows (Linux był łatwy). Utknąłem w pierwszym kroku używając curl z linii poleceń poprzez wywołanie R system. Pokażę, co mam, a następnie komunikat o błędzie (Thanks to SimonO101 for getting me this far.). Za jego komentarze Poniżej podaję edytowany mocno odzwierciedla problem jak to:

R Kod:

repo <- "New" 
user <- "trinker" 
password <- "password" 

url <- "http://curl.askapache.com/download/curl-7.23.1-win64-ssl-sspi.zip" 
tmp <- tempfile(fileext = ".zip") 
download.file(url,tmp) 
unzip(tmp, exdir = tempdir()) 

system(paste0(tempdir(), "/curl http://curl.haxx.se/ca/cacert.pem -o " , 
    tempdir() , "/curl-ca-bundle.crt")) 

cmd1 <- paste0(tempdir(), "/curl -u '", user, ":", password, 
    "' https://api.github.com/user/repos -d '{\"name\":\"", repo, "\"}'") 

system(cmd1) 

cmd2 <- paste0(tempdir(), "/curl -k -u '", user, ":", password, 
    "' https://api.github.com/user/repos -d '{\"name\":\"", repo, "\"}'") 

system(cmd2) 

Komunikaty o błędach (takie same dla obu podejściach):

> system(cmd1) 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 

    0  0 0  0 0  0  0  0 --:--:-- --:--:-- --:--:--  0 
100 12 0  0 100 12  0  24 --:--:-- --:--:-- --:--:-- 30 
100 47 100 35 100 12  65  22 --:--:-- --:--:-- --:--:-- 83{ 
    "message": "Bad credentials" 
} 

Wiem, że wszystkie pliki są dostępne, ponieważ:

> dir(tempdir()) 
[1] "curl-ca-bundle.crt" "curl.exe"    "file1aec62fa980.zip" "file1aec758c1415.zip" 

To nie może być moje hasło lub nazwa użytkownika, ponieważ działa na Linux Mint (jedyna różnica to ta część przed curl):

repo <- "New" 
user <- "trinker" 
password <- "password" 


cmd1 <- paste0("curl -u '", user, ":", password, 
    "' https://api.github.com/user/repos -d '{\"name\":\"", repo, "\"}'") 

system(cmd1) 

UWAGA: Windows 7 maszyna. R 2.14.1

+0

robi to, co ty sugeruję po prostu pracować na moim Macu, jak jest. Czy wypróbowałeś opcję '-k', jak sugeruje błąd? tj. 'cmd1 <- paste0 (" curl -k -u "", użytkownik, ":", hasło, "'https://api.github.com/user/repos -d' {\" name \ ": \ "", repo, "\"} '")' –

+0

Tak i wydaje się, że odkłada się na czas nieokreślony. Spróbuję jeszcze raz. –

+0

Ah, zawiesił się też dla mnie, ale potem przypadkowo zamknąłem pokrywę MBP. Kiedy ponownie go otworzyłem, polecenie zostało zakończone, a repo ukazało się na GitHub ...! Domyśl. –

Odpowiedz

4

EDIT - Po OP oferowana bounty

Ok, okazuje się, że to ma związek z jakimś szalonym okien uciekającego w wierszu poleceń znaku. Zasadniczo problemem było przekazywanie nieprawidłowo sformatowanych żądań jsonów do github.

Można użyć formatu shQuote, aby poprawnie sformatować część naruszającą żądanie zwijania dla systemu Windows. Możemy przetestować rodzaj platformy, aby zobaczyć, czy musimy to specjalnego formatowania przypadkach system Windows tak:

repo <- "NewRepository" 
json <- paste0(" { \"name\":\"" , repo , "\" } ") #string we desire formatting 
os <- .Platform$OS.type #check if we are on Windows 
if(os == "windows"){ 
json <- shQuote(json , type = "cmd") 
cmd1 <- paste0(tempdir() ,"/curl -i -u \"" , user , ":" , password , "\" https://api.github.com/user/repos -d " , json) 
} 

To działało na moim Windows 7 polu bez żadnych problemów. Mogę zaktualizować skrypt GitHub, jeśli chcesz?

OLD ODPOWIEDŹ

zrobiłem kilka kopanie wokół here i here i może okazać się, że odpowiedź na Twój problem jest, aby zaktualizować curl-ca-bundle. W systemie Windows może pomóc systemowi R korzystanie z internet2.dll.

repo <- "New" 
user <- "trinker" 
password <- "password" 

url <- "http://curl.askapache.com/download/curl-7.23.1-win64-ssl-sspi.zip" 
tmp <- tempfile(fileext = ".zip") 
download.file(url,tmp) 
unzip(tmp, exdir = tempdir()) 
system(paste0("curl http://curl.haxx.se/ca/cacert.pem -o " , tempdir() , "/curl-ca-bundle.crt")) 
system(paste0(tempdir(),"/curl", " -u \'USER:PASS\' https://api.github.com/user/repos -d \'{\"name\":\"REPO\"}\'")) 

Ponownie, nie mogę przetestować to jak nie mam dostępu do mojego pudełka z systemem Windows, ale aktualizowania plik ośrodka certyfikacji wydaje pomogły kilka innych osób.Z curl website wersja Windows zwinięcie powinien szukać pliku curl-ca-bundle.crt w następującej kolejności:

  1. katalogu aplikacji
  2. katalog
  3. katalog
  4. systemu Windows prąd roboczy (np C: \ windows \ system32)
  5. okna katalog (np C: \ Windows)
  6. wszystkie katalogi wzdłuż% PATH%
+0

Brilliant +1 i +300 bounty –

+0

@TylerRinker Yay. Bardzo zobowiązany panu. –

+0

Przyznam Ci kredyt za tę funkcję. Jeśli chcesz, abym użył Twojego prawdziwego nazwiska, wyślij mi e-mailem podany adres e-mail podany przez github. Jeszcze raz dziękuję za pomoc. –

Powiązane problemy