2014-04-28 8 views
5

Ich habe ein eingebettetes System, wo ich nichts installieren kann und das einzige Werkzeug, das ich möglicherweise verwenden könnte, um etwas zu holen, ist wget. Es stellt sich heraus, dass du mit wget nicht die gleichen Dinge machen kannst wie mit Curl. Ich kann auch nicht für dieses System kompilieren, also muss ich auf Python- oder Shell-Skripte zurückgreifen. Da die reine Python-Implementation von git namens Dulwich tatsächlich C-Code hat, den ich kompilieren müsste ... Also habe ich sogar darauf geblickt.Einen Tarball von github ohne curl herunterladen

Was ich brauche, ist Code aus Github-Repository zu bekommen, und die offensichtliche Lösung dafür ist die Verwendung von Tarballs, die sie bereitstellen. Normalerweise kopiere ich den Link zum Herunterladen der Zip-Schaltfläche von der Repository-Seite und verwende ein Autorisierungstoken anstelle von Benutzername und Passwort. Es funktioniert ziemlich einfach mit curl wie so:

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

Es stellte sich heraus wget etwas umständlich ist und was ich habe gerade versucht, funktioniert.

+1

Warum können Sie nicht Quer kompilieren? –

+0

Ursache Ich habe nicht die gleiche Toolchain, um dynamisch verknüpfte Version von curl (oder git) zu kompilieren. Wenn ich versuche, eine statisch verknüpfte Version von beiden zu kompilieren, würde es wahrscheinlich eine gute Stunde dauern, um alle Abhängigkeiten von Grund auf neu zu erstellen. Und warum muss ich wirklich, wenn die Vollversion von wget schon da ist ... Und ich hatte auch Python, aber die Verwendung von urllib2 wäre wahrscheinlich ziemlich mühsam und ich müsste explizit Dinge wie Umleitungen und Wiederholungen behandeln ... – errordeveloper

+1

Der C-Code in Dulwich ist optional. Sie können Dulwich ohne diese Option verwenden, indem Sie mit "setup.py install --pure" erstellen. Die C-Erweiterungen werden jedoch die Leistung für größere Repositories erheblich verbessern. – jelmer

Antwort

6

Nach meinem Kopf auf verschiedene Kombinationen von wget Fahnen zu schlagen, die entweder:

  • --post-data; oder
  • --user= mit und ohne --pasword= sowie umgekehrt; oder
  • --header="Authorization: token <token>"

Ich schaute zurück auf die Dokumentation und fand, dass es alternative Endpunkte in releases API. Sieht aus wie erstens kann ich einfach nicht die Authorization Header mit dem Server, der Tarballs und zweitens curl (oder Github Front-End, basierend auf der Agent-String) scheint eine andere Sache mit <token>@github.com vs wget --user=<token> zu tun, und es ist nicht die meisten angenehme Sache, um herauszufinden.

So was funktioniert, ist dies:

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