diff options
Diffstat (limited to 'tupkg/client')
-rw-r--r-- | tupkg/client/communitypkg | 132 | ||||
-rwxr-xr-x | tupkg/client/tupkg | 216 |
2 files changed, 0 insertions, 348 deletions
diff --git a/tupkg/client/communitypkg b/tupkg/client/communitypkg deleted file mode 100644 index 8579273..0000000 --- a/tupkg/client/communitypkg +++ /dev/null @@ -1,132 +0,0 @@ -#!/bin/bash - -# Source makepkg.conf; fail if it is not found -if [ -r "/etc/makepkg.conf" ]; then - source "/etc/makepkg.conf" -else - echo "/etc/makepkg.conf not found!" - exit 1 -fi - -# Source user-specific makepkg.conf overrides -if [ -r ~/.makepkg.conf ]; then - source ~/.makepkg.conf -fi - -cmd=`basename $0` - -if [ ! -f PKGBUILD ]; then - echo "No PKGBUILD file" - exit 1 -fi - -# define tags and staging areas based on architecture -if [ "$CARCH" = "i686" ]; then - currenttag='CURRENT' - testingtag='TESTING' - suffix='' -elif [ "$CARCH" = "x86_64" ]; then - currenttag='CURRENT-64' - testingtag='TESTING-64' - suffix='64' -else - echo "CARCH must be set to a recognized value!" - exit 1 -fi - -source PKGBUILD -pkgfile=${pkgname}-${pkgver}-${pkgrel}-${CARCH}.pkg.tar.gz -oldstylepkgfile=${pkgname}-${pkgver}-${pkgrel}.pkg.tar.gz - -if [ ! -f $pkgfile ]; then - if [ -f $PKGDEST/$pkgfile ]; then - pkgfile=$PKGDEST/$pkgfile - oldstylepkgfile=$PKGDEST/$oldstylepkgfile - elif [ -f $oldstylepkgfile ]; then - pkgfile=$oldstylepkgfile - elif [ -f $PKGDEST/$oldstylepkgfile ]; then - pkgfile=$PKGDEST/$oldstylepkgfile - else - echo "File $pkgfile doesn't exist" - exit 1 - fi -fi - -if [ "$cmd" == "extrapkg" ]; then - repo="extra" - tag="$currenttag" -elif [ "$cmd" == "corepkg" ]; then - repo="core" - tag="$currenttag" -elif [ "$cmd" == "testingpkg" ]; then - repo="testing" - tag="$testingtag" -elif [ "$cmd" == "unstablepkg" ]; then - repo="unstable" - tag="$currenttag" -elif [ "$cmd" == "communitypkg" ]; then - repo="community" - tag="$currenttag" -fi - -# see if any limit options were passed, we'll send them to SCP -unset scpopts -if [ "$1" = "-l" ]; then - scpopts="$1 $2" - shift 2 -fi - -if [ "$repo" != "community" ]; then - # combine what we know into a variable (suffix defined based on $CARCH) - uploadto="staging/${repo}${suffix}/add/$(basename ${pkgfile})" - scp ${scpopts} "${pkgfile}" "archlinux.org:${uploadto}" - if [ "$(md5sum "${pkgfile}" | cut -d' ' -f1)" != "$(ssh archlinux.org md5sum "${uploadto}" | cut -d' ' -f1)" ]; then - echo "File got corrupted during upload, cancelled." - exit 1 - else - echo "File integrity okay." - fi -else - if [ ! -f ~/.tupkg ]; then - echo "Must configure tupkg via ~/.tupkg, cancelled" - exit 1 - fi - if [ "$(basename $pkgfile)" != "$(basename $oldstylepkgfile)" ]; then - echo "Renaming makepkg3 package for compatability" - mv $pkgfile $oldstylepkgfile - pkgfile=$oldstylepkgfile - fi - tupkg $pkgfile -fi -if [ $? -ne 0 ]; then - echo "Cancelled" - exit 1 -fi -echo "===> Uploaded $pkgfile" - -if [ "$1" != "" ]; then - cvs commit -m "upgpkg: $pkgname $pkgver-$pkgrel - $1" > /dev/null - if [ $? -ne 0 ]; then - echo "Cancelled" - exit 1 - fi - echo "===> Commited with \"upgpkg: $pkgname $pkgver-$pkgrel - $1\" message" -else - cvs commit -m "upgpkg: $pkgname $pkgver-$pkgrel" > /dev/null - if [ $? -ne 0 ]; then - echo "Cancelled" - exit 1 - fi - echo "===> Commited with \"upgpkg: $pkgname $pkgver-$pkgrel\" message" -fi - -cvs tag -c -F -R $tag > /dev/null -if [ $? -ne 0 ]; then - echo "Cancelled" - exit 1 -fi -echo "===> Tagged as $tag" - -# vim:ft=sh:ts=4:sw=4:et: diff --git a/tupkg/client/tupkg b/tupkg/client/tupkg deleted file mode 100755 index af7d054..0000000 --- a/tupkg/client/tupkg +++ /dev/null @@ -1,216 +0,0 @@ -#!/usr/bin/python -O -# -# Description: -# ------------ -# This is the client-side portion of the Trusted User package -# manager. The TUs will use this program to upload packages into -# the AUR. For more information, see the ../README.txt file. -# -# Python Indentation: -# ------------------- -# For a vim: line to be effective, it must be at the end of the -# file. See the end of the file for more information. -# - -import sys -import socket -import os -import struct -import os.path -import cgi -import urllib -import getopt -import ConfigParser - -from hashlib import md5 - -class ClientFile: - def __init__(self, pathname): - self.pathname = pathname - self.filename = os.path.basename(pathname) - self.fd = open(pathname, "rb") - self.fd.seek(0, 2) - self.size = self.fd.tell() - self.fd.seek(0) - self.makeMd5() - - def makeMd5(self): - md5sum = md5() - while self.fd.tell() != self.size: - md5sum.update(self.fd.read(1024)) - self.md5 = md5sum.hexdigest() - -class ClientSocket: - def __init__(self, files, host, port, username, password): - self.files = files - self.host = host - self.port = port - self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.username = username - self.password = password - - def connect(self): - self.socket.connect((self.host, self.port)) - - def reliableRead(self, size): - totalread = "" - while len(totalread) < size: - read = self.socket.recv(size-len(totalread)) - if read == 0: - raise RuntimeError, "socket connection broken" - totalread += read - return totalread - - def sendMsg(self, msg): - if type(msg) == dict: - msg = urllib.urlencode(msg,1) - length = struct.pack("H", socket.htons(len(msg))) - self.socket.sendall(length) - self.socket.sendall(msg) - - def readMsg(self, format=0): - initsize = self.reliableRead(2) - (length,) = struct.unpack("H", initsize) - length = socket.ntohs(length) - data = self.reliableRead(length) - if format == 1: - qs = cgi.parse_qs(data) - return qs - else: - return data - - def close(self): - self.socket.close() - - def auth(self): - msg = {'username': self.username, 'password': self.password} - self.sendMsg(msg) - reply = self.readMsg(1) - if reply['result'] == ["PASS"]: - return 1 - elif reply['result'] == ["SQLERR"]: - print "SQL server-side error" - return 0 - else: - return 0 - - def sendFileMeta(self): - msg = {'numpkgs': len(self.files)} - for i, v in enumerate(self.files): - msg['name'+str(i)] = v.filename - msg['size'+str(i)] = v.size - msg['md5sum'+str(i)] = v.md5 - self.sendMsg(msg) - reply = self.readMsg(1) - print reply - for i in reply: - if i[:4] == 'size': - self.files[int(i[4:])].cur_done = int(reply[i][0]) - - def sendFiles(self): - for i in self.files: - i.fd.seek(i.cur_done) - print "Uploading:", i.filename, str(i.size/1024), "kb" - sdone = 0 - while i.fd.tell() < i.size: - sdone+=1 - self.socket.sendall(i.fd.read(1024)) - if sdone % 100 == 0: - print "\r", - print str(sdone), "of", str(i.size/1024), "kb", - sys.stdout.flush() - reply = self.readMsg(1) - print reply - self.sendMsg("ack") - -def usage(): - print "usage: tupkg [options] <package file>" - print "options:" - print " -u, --user Connect with username" - print " -P, --password Connect with password" - print " -h, --host Connect to host" - print " -p, --port Connect to host on port (default 1034)" - print "May also use conf file: ~/.tupkg" - -def main(argv=None): - if argv is None: - argv = sys.argv - - confdict = {} - conffile = os.path.join(os.getenv("HOME"),".tupkg") #try the standard location - #Set variables from file now, may be overridden on command line - if os.path.isfile(conffile): - config = ConfigParser.ConfigParser() - config.read(conffile) - confdict['user'] = config.get('tupkg','username') - confdict['password'] = config.get('tupkg','password') - try: - confdict['host'] = config.get('tupkg','host') - except: - confdict['host'] = 'aur.archlinux.org' - try: - confdict['port'] = config.getint('tupkg','port') - except: - confdict['port'] = 1034 - else: - confdict['user'] = "" - confdict['password'] = "" - confdict['host'] = 'aur.archlinux.org' - confdict['port'] = 1034 - if len(argv) == 1: #no config file and no args, bail - usage() - return 1 - - try: - optlist, args = getopt.getopt(argv[1:], "u:P:h:p:", ["user=", "password=", "host=", "port="]) - except getopt.GetoptError: - usage() - return 1 - - for i, k in optlist: - if i in ('-u', '--user'): - confdict['user'] = k - if i in ('-P', '--password'): - confdict['password'] = k - if i in ('-h', '--host'): - confdict['host'] = k - if i in ('-p', '--port'): - confdict['port'] = int(k) - - files = [] - for i in args: - try: - files.append(ClientFile(i)) - except IOError, err: - print "Error: " + err.strerror + ": '" + err.filename + "'" - usage() - return 1 - - cs = ClientSocket(files, confdict['host'], confdict['port'], confdict['user'], confdict['password']) - try: - cs.connect() - - if not cs.auth(): - print "Error authenticating you, you bastard" - return 1 - - cs.sendFileMeta() - - cs.sendFiles() - - cs.close() - except KeyboardInterrupt: - print "Cancelling" - cs.close() - - return 0 - -if __name__ == "__main__": - sys.exit(main()) - -# Python Indentation: -# ------------------- -# Use tabs not spaces. If you use vim, the following comment will -# configure it to use tabs. -# -# vim:noet:ts=2 sw=2 ft=python |