From 5d5accb3d6b107541408cbd84b68163dc61dd63c Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Wed, 10 Apr 2013 04:21:12 -0700 Subject: [PATCH] add diff tools using python --- swup.py | 2 +- tools/getpacs/diff-packages.py | 110 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 tools/getpacs/diff-packages.py diff --git a/swup.py b/swup.py index 4da1d10..2474007 100755 --- a/swup.py +++ b/swup.py @@ -15,7 +15,7 @@ import rpm import subprocess as sub import distutils -update_repo="http://10.0.0.140/~anashif/updates" +update_repo="http://www.planux.com/updates" update_cache="/var/cache/updatemanager" diff --git a/tools/getpacs/diff-packages.py b/tools/getpacs/diff-packages.py new file mode 100644 index 0000000..4eaac48 --- /dev/null +++ b/tools/getpacs/diff-packages.py @@ -0,0 +1,110 @@ +#!/usr/bin/python + +from sets import Set +import csv +import urllib2 +from optparse import OptionParser +import os +import re, base64 + +username = "" +password = "" + +def http_get(url): + print "Downloading %s" %url + request = urllib2.Request(url) + base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '') + request.add_header("Authorization", "Basic %s" % base64string) + html_page = urllib2.urlopen(request) + return html_page + +def download(url, out): + ret = http_get(url) + if not os.path.exists(out): + cache = open(out, "w") + cache.write(ret.read()) + cache.close() + +def get_package_lists2(image_name, base_url, build_id): + cache_file = "cache/%s-%s.packages" %(image_name, build_id ) + package_file = None + if not os.path.exists(cache_file): + image_packages = "%s/%s/images/%s/%s-%s.packages" %(base_url, build_id, image_name, image_name, build_id ) + package_file = http_get(image_packages) + cache = open(cache_file, "w") + cache.write(package_file.read()) + cache.close() + else: + package_file = open(cache_file, "rb") + + packages = [] + + pkgreader = csv.reader(package_file, delimiter=' ', quotechar='|') + for row in pkgreader: + pkg = row[0].split(".") + name = "%s-%s.%s" %(pkg[0], row[1], pkg[1]) + packages.append(name) + + package_file.close() + return packages + +def get_package_lists(image_name, base_url, build_id): + cache_file = "cache/%s-%s.packages" %(image_name, build_id ) + package_file = None + if not os.path.exists(cache_file): + image_packages = "%s/%s/images/%s/%s-%s.packages" %(base_url, build_id, image_name, image_name, build_id ) + #print image_packages + package_file = http_get(image_packages) + cache = open(cache_file, "w") + cache.write(package_file.read()) + cache.close() + else: + package_file = open(cache_file, "rb") + + packages = {} + + pkgreader = csv.reader(package_file, delimiter=' ', quotechar='|') + for row in pkgreader: + pkg = row[0].split(".") + if len(row)>2: + packages[pkg[0]] = {'scm': row[2], 'version': row[1], 'arch': pkg[1]} + else: + packages[pkg[0]] = {'scm': None, 'version': row[1], 'arch': pkg[1]} + + package_file.close() + return packages + +parser = OptionParser() +parser.add_option("-o", "--old", dest="old", metavar="OLD", help="Old snapshot") +parser.add_option("-n", "--new", dest="new", metavar="NEW", help="New snapshot") +parser.add_option("-t", "--type", dest="type", metavar="TYPE", help="Release type") +parser.add_option("-i", "--image", dest="image", metavar="IMAGE", help="Image Name") + +(options, args) = parser.parse_args() + +DAILY="/pc/releases/daily/trunk" +WEEKLY="/pc/releases/weekly/trunk" +SNAPSHOTS="/snapshots/trunk/pc/" +BASE="https://download.tz.otcshare.org/" + +if options.type == "daily": + release_url = "%s/%s" %(BASE, DAILY) +if options.type == "weekly": + release_url = "%s/%s" %(BASE, WEEKLY) +else: + release_url = "%s/%s" %(BASE, SNAPSHOTS) + +p1 = get_package_lists2(options.image, release_url, options.old) +p2 = get_package_lists2(options.image, release_url, options.new) + +diff = Set(p2).difference(Set(p1)) +for p in diff: + print "Fetching %s" %p + if "noarch" in p: + download("%s/%s/repos/pc/x86_64/packages/noarch/%s.rpm" %(release_url, options.new, p), "%s.rpm" %p) + else: + download("%s/%s/repos/pc/x86_64/packages/x86_64/%s.rpm" %(release_url, options.new, p), "%s.rpm" %p) + + + + -- 2.7.4