#!/usr/bin/env python # -*- coding: utf-8 -*- # # Cygwin tool # # Basic configuration: bash, cygwin, sed, grep # Cygwin variables CYGWIN_MIRRORS_LIST_URL = 'http://www.cygwin.com/mirrors.lst' DISTFILES_DIR = 'distfiles\\' WGET_PREFIX = 'distfiles\\' def wget(url): import os wget_str = 'wget -c %s' % url if WGET_PREFIX: wget_str += ' -P %s' % WGET_PREFIX os.system(wget_str) def get_packages(): raw_data = open(DISTFILES_DIR + 'setup.ini').read().split('@') packages = {} package = requires = install = category = '' for block in raw_data: if block[0] == '#': continue for count, line in enumerate(block.split('\n')): if line == '': continue if count == 0: package = line.rstrip().lstrip() elif line.find('category: ') == 0: category = line[10:].split(' ') elif line.find('requires: ') == 0: requires = line[10:].split(' ') elif line.find('install: ') == 0: install = line[9:].split(' ')[0] elif line == '[prev]': break if package: packages[package] = {'category': category, 'requires': requires, 'install': install} package = requires = install = '' return packages def find_packages(name): searched_packages = [name,] founded_packages = {} packages = get_packages() while len(searched_packages) > 0: package_name = searched_packages.pop() if package_name in packages: founded_packages[package_name] = packages[package_name] for p in packages[package_name]['requires']: if p not in founded_packages: searched_packages.append(p) return founded_packages if __name__ == "__main__": import sys from optparse import OptionParser parser = OptionParser() parser.add_option("-m", "--update_mirror_list", dest="update_mirror_list", action='store_true', help="update mirror list") parser.add_option("-s", "--update_ini_files", dest="update_ini_files", help="update INI files for URL") parser.add_option("-l", "--packages_list", dest="packages_list", action='store_true', help="show packages list") parser.add_option("-f", "--find_package(s)", dest="find_packages", help="find package and required packages") parser.add_option("-d", "--download_package(s)", dest="download_packages", help="download package and required packages") parser.add_option("-u", "--host_url", dest="host_url", help="Host's URL for downloading packages") (options, args) = parser.parse_args() # update mirrors list file if options.update_mirror_list: wget(CYGWIN_MIRRORS_LIST_URL) # update INI files for URL elif options.update_ini_files: print 'Update INI files for %s' % options.update_ini_files ini_files = ('setup-legacy.ini', 'setup.ini',) for f in ini_files: print options.update_ini_files + f wget(options.update_ini_files + f) # show packages list elif options.packages_list: packages = get_packages() for name in packages: print "%s %s" % (name, packages[name]) # find package and required packages elif options.find_packages: founded_packages = find_packages(options.find_packages) for package in founded_packages: print package, founded_packages[package] # download package and required packages elif options.download_packages and options.host_url: founded_packages = find_packages(options.download_packages) for name in founded_packages: wget(options.host_url + founded_packages[name]['install']) else: print "Usage: cygwin-tool.py -h\n"