2013-02-23 11 views
5

Ho chiesto una domanda related e ho realizzato che non stavo facendo la domanda giusta (cioè, non si tratta di git).Invia a github tramite la riga di comando di arricciatura (Windows)

La domanda è come spingere un progetto su github senza prima creare il progetto nelle nuvole usando R. Attualmente puoi farlo dalla riga di comando git in RStudio usando le informazioni da this question.

Ora sto provando a farlo in codice R ora da una macchina Windows (Linux è stato facile). Sono bloccato al primo passaggio utilizzando curl dalla riga di comando tramite una chiamata R system. Mostrerò quello che ho e poi il messaggio di errore (Thanks to SimonO101 for getting me this far.). Per i suoi commenti qui sotto Ho modificato pesantemente per riflettere il problema in quanto:

Code R:

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) 

Messaggi di errore (lo stesso per entrambi gli approcci):

> 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" 
} 

So che tutti i file ci sono perché:

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

Non può essere la mia password o il nome utente perché questo funziona su Linux Mint (l'unica differenza è la parte prima ricciolo):

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


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

system(cmd1) 

NOTA: Windows 7 macchina. R 2.14.1

+0

Questo non fa, come si suggerisco di lavorare sul mio Mac così com'è. Hai provato l'opzione '-k' come suggerisce l'errore? cioè 'cmd1 <- paste0 (" curl -k -u '", utente,": ", password, "' https://api.github.com/user/repos -d '{\ "nome \": \ "", repo, "\"} '")' –

+0

Sì e sembra bloccarsi indefinitamente. Ci proverò di nuovo. –

+0

Ah, è stato appeso anche a me, ma poi ho chiuso per sbaglio il coperchio del mio MBP. Quando l'ho riaperto, il comando era terminato e il repository era apparso su GitHub ...! Vai a capire. –

risposta

4

EDIT - Dopo OP offerto di taglie

Ok, si scopre che è a che fare con qualche personaggio finestre folle fuga sulla riga di comando. Essenzialmente il problema era che stavamo passando richieste json formattate in modo errato a github.

È possibile utilizzare shQuote per formattare correttamente la parte incriminata della richiesta di arricciatura per Windows. Siamo in grado di testare il tipo di piattaforma per vedere se abbiamo bisogno di includere la formattazione speciale per i casi di Windows in questo modo:

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) 
} 

questo ha lavorato sulla mia macchina Windows 7 senza problemi. Posso aggiornare lo script GitHub se lo desideri?

risposta Old

ho fatto qualche scavare intorno here e here e potrebbe essere che la risposta al vostro problema è quello di aggiornare il ricciolo-ca-fascio. Può essere utile su Windows per ottenere R per utilizzare il 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\"}\'")) 

Anche in questo caso, non posso provare questo come io non ho accesso alla mia casella di Windows, ma l'aggiornamento del file dell'autorità di certificazione sembra aver contribuito poche altre persone.Dal curl website, la versione Windows di riccio dovrebbe cercare il file curl-ca-bundle.crt nel seguente ordine:

  1. directory dell'applicazione
  2. di lavoro corrente directory
  3. directory
  4. di sistema di Windows (ad esempio C: \ Windows \ System32)
  5. Directory di Windows (ad esempio C: \ windows)
  6. tutte le directory lungo% PATH%
+0

Brilliant +1 e +300 taglie –

+0

@TylerRinker Yay. Molto obbligato, signore. –

+0

Ti sto attribuendo credito in questa funzione. Se desideri che io usi il tuo nome, per favore scrivimi tramite l'indirizzo email fornito da github. Grazie ancora per il vostro aiuto. –

Problemi correlati