2014-04-28 18 views
5

Ho un sistema incorporato in cui non riesco a installare nulla e l'unico strumento che potrei potenzialmente utilizzare per recuperare qualcosa è wget. Si scopre che non puoi fare le stesse cose con wget che puoi con arricciatura. Non posso nemmeno eseguire la compilazione incrociata per questo sistema, quindi ho bisogno di ricorrere a Python o agli script della shell. Lì l'implementazione di git in puro Python chiamata Dulwich ha in realtà qualche codice C che avrei bisogno di compilare a croce ... Quindi ho persino pensato di farlo, FYI.Download di un tarball da github senza arricciatura

Quello che mi serve è ottenere il codice dal repository github e la soluzione ovvia a ciò è l'utilizzo di archivi tar che forniscono. Di solito copio il link per scaricare il pulsante zip dalla pagina del repository e uso un token di autorizzazione al posto del nome utente e della password. Funziona abbastanza semplicemente con l'arricciatura in questo modo:

curl -L https://<token>@github.com/<org|user>/<repo>/archive/master.tar.gz | tar xz 

Risulta wget è un po 'più scomodo e tutto ciò che ho provato appena funziona.

+1

Perché non puoi cross-compilazione? –

+0

Causa Non ho la stessa toolchain per compilare la versione di ricciolo (o git) collegata dinamicamente. Se provo a compilare una versione collegata staticamente di uno dei due, probabilmente ci vorrà un'ora buona per mettere insieme da zero tutte le dipendenze. E perché devo davvero farlo, se la versione completa di wget è già lì ... E ho avuto anche Python, ma usare urllib2 sarebbe probabilmente abbastanza noioso e avrei bisogno di gestire esplicitamente cose come i reindirizzamenti e riprovare ... – errordeveloper

+1

Il codice C di Dulwich è facoltativo. Puoi usare Dulwich senza farlo costruendo con "setup.py install --pure". Le estensioni C miglioreranno significativamente le prestazioni per i repository più grandi. – jelmer

risposta

6

Dopo aver battuto la testa su varie combinazioni di bandiere wget che coinvolge sia:

  • --post-data; oppure
  • --user= con e senza --pasword= e viceversa; o
  • --header="Authorization: token <token>"

Tornai a guardare la documentazione e ha scoperto che ci sono punti finali alternativi in ​​releases API. In primo luogo, non riesco a utilizzare l'intestazione Authorization con il server che ospita i tarball e in secondo luogo arricciare (o front-end github, in base alla stringa dell'agente) sembra fare una cosa diversa con <token>@github.com vs --user=<token> di wget, e non è il più cosa piacevole da capire.

Quindi, ciò che funziona è questo:

wget \ 
    --header='Authorization: token <token>' \ 
    https://api.github.com/repos/<org|user>/<repo>/tarball/<ref> 
Problemi correlati