예제 #1
1
파일: package.py 프로젝트: toxinu/ubik
    def remove(self, ignore_errors=False):
        # Think about ignore_errors
        stream_logger.info("   - %s" % self.name)

        # If archive not already extract
        if not os.path.exists("%s/%s" % (conf.get("settings", "cache"), self.name)):
            self.unarchive()

        self.import_control()
        # Pre Remove
        stream_logger.info("     | Pre Remove")
        self.control.pre_remove()

        # Remove
        stream_logger.info("     | Remove")
        files_list = open(os.path.join(conf.get("settings", "cache"), self.name, "files.lst")).readlines()
        for _file in files_list:
            try:
                os.remove(os.path.join(conf.get("settings", "packages"), _file.replace("\n", "")))
            except:
                pass
        # Post Remove
        stream_logger.info("     | Post Remove")
        self.control.post_remove()

        stream_logger.info("     | Clean")
        shutil.rmtree(os.path.join(conf.get("settings", "cache"), self.name))
예제 #2
0
파일: database.py 프로젝트: toxinu/ubik
    def sync(self):
        self.load()
        stream_logger.info('   | Retrieving %s/%s/%s/Packages.json' % (
                        conf.get('repo', 'url'),
                        conf.get('repo', 'base'),
                        conf.get('repo', 'branch')))
        db_remote = Database(content=get_database())

        for package in db_remote.packages.values():
            # Check installed
            if package.name not in self.packages.keys():
                package.status = '10'
                self.packages[package.name] = package
            elif self.packages[package.name].status == '10':
                package.status = '10'
            # Check version
            elif package.version > self.packages[package.name].version:
                package.status = '1'
            elif package.version < self.packages[package.name].version:
                package.status = '11'
            # Check release
            elif package.release > self.packages[package.name].release:
                package.status = '2'
            elif package.release < self.packages[package.name].release:
                package.status = '12'
            # Up-to-date
            else:
                package.status = '0'

            if package.status in ['1','2','11','12']:
                package.repo_version = package.version
                package.repo_release = package.release
                package.version = self.packages[package.name].version
                package.release = self.packages[package.name].release
            elif package.status in ['10']:
                package.repo_version = package.version
                package.repo_release = package.release
                package.version = ''
                package.release = ''
            else:
                package.repo_versions = ''
                package.repo_release = ''

            self.packages[package.name] = package

        for package in self.packages.values():
            if package.name not in db_remote.packages.keys():
                if package.status in ['10']:
                    del self.packages[package.name]

        # Save databases
        self.save()

        # Save informations
        if not os.path.exists(conf.get('paths', 'infos')):
            open(conf.get('paths', 'infos'), 'w').close()

        infos = json.dump(
            {'last_update': time.ctime()},
        open(conf.get('paths', 'infos'), 'w'))
예제 #3
0
파일: package.py 프로젝트: toxinu/ubik
    def remove(self, ignore_errors=False):
        # Think about ignore_errors
        stream_logger.info('   - %s' % self.name)

        # If archive not already extract
        if not os.path.exists('%s/%s' %
                              (conf.get('settings', 'cache'), self.name)):
            self.unarchive()

        self.import_control()
        # Pre Remove
        stream_logger.info('     | Pre Remove')
        self.control.pre_remove()

        # Remove
        stream_logger.info('     | Remove')
        files_list = open(
            os.path.join(conf.get('settings', 'cache'), self.name,
                         'files.lst')).readlines()
        for _file in files_list:
            try:
                os.remove(
                    os.path.join(conf.get('settings', 'packages'),
                                 _file.replace('\n', '')))
            except:
                pass
        # Post Remove
        stream_logger.info('     | Post Remove')
        self.control.post_remove()

        stream_logger.info('     | Clean')
        shutil.rmtree(os.path.join(conf.get('settings', 'cache'), self.name))
예제 #4
0
파일: reinstaller.py 프로젝트: toxinu/ubik
 def reinstall(self, ignore_errors=False):
     if not self.packages:
         raise ReinstallerException('Nothing to reinstall')
     stream_logger.info(' :: Reinstall')
     for package in self.packages:
         package.install(ignore_errors)
         stream_logger.info('      | Update database')
         db.add(package)
예제 #5
0
파일: reinstaller.py 프로젝트: toxinu/ubik
	def reinstall(self, ignore_errors=False):
		if not self.packages:
			raise ReinstallerException('Nothing to reinstall')
		stream_logger.info(' :: Reinstall')	
		for package in self.packages:
			package.install(ignore_errors)
			stream_logger.info('      | Update database')
			db.add(package)
예제 #6
0
    def sync(self):
        self.load()
        stream_logger.info('   | Retrieving %s/%s/%s/Packages.json' %
                           (conf.get('repo', 'url'), conf.get(
                               'repo', 'base'), conf.get('repo', 'branch')))
        db_remote = Database(content=get_database())

        for package in db_remote.packages.values():
            # Check installed
            if package.name not in self.packages.keys():
                package.status = '10'
                self.packages[package.name] = package
            elif self.packages[package.name].status == '10':
                package.status = '10'
            # Check version
            elif package.version > self.packages[package.name].version:
                package.status = '1'
            elif package.version < self.packages[package.name].version:
                package.status = '11'
            # Check release
            elif package.release > self.packages[package.name].release:
                package.status = '2'
            elif package.release < self.packages[package.name].release:
                package.status = '12'
            # Up-to-date
            else:
                package.status = '0'

            if package.status in ['1', '2', '11', '12']:
                package.repo_version = package.version
                package.repo_release = package.release
                package.version = self.packages[package.name].version
                package.release = self.packages[package.name].release
            elif package.status in ['10']:
                package.repo_version = package.version
                package.repo_release = package.release
                package.version = ''
                package.release = ''
            else:
                package.repo_versions = ''
                package.repo_release = ''

            self.packages[package.name] = package

        for package in self.packages.values():
            if package.name not in db_remote.packages.keys():
                if package.status in ['10']:
                    del self.packages[package.name]

        # Save databases
        self.save()

        # Save informations
        if not os.path.exists(conf.get('paths', 'infos')):
            open(conf.get('paths', 'infos'), 'w').close()

        infos = json.dump({'last_update': time.ctime()},
                          open(conf.get('paths', 'infos'), 'w'))
예제 #7
0
파일: upgrader.py 프로젝트: toxinu/ubik
 def download(self):
     stream_logger.info(" :: Download")
     for package in self.packages:
         logger.info("Download %s" % package.name)
         get_package(package)
         if not checkmd5(package):
             logger.info("%s md5 invalid" % package.name)
             stream_logger.info("   | Md5 invalid, package corrumpt")
             raise UpgraderException("Invalid Md5")
예제 #8
0
파일: upgrader.py 프로젝트: toxinu/ubik
 def download(self):
     stream_logger.info(' :: Download')
     for package in self.packages:
         logger.info('Download %s' % package.name)
         get_package(package)
         if not checkmd5(package):
             logger.info('%s md5 invalid' % package.name)
             stream_logger.info('   | Md5 invalid, package corrumpt')
             raise UpgraderException('Invalid Md5')
예제 #9
0
파일: upgrader.py 프로젝트: toxinu/ubik
 def upgrade(self, ignore_errors=False):
     if not self.packages:
         raise UpgraderException("Nothing to upgrade")
     stream_logger.info(" :: Upgrade")
     for package in self.packages:
         package.upgrade(ignore_errors)
         stream_logger.info("      | Update database")
         package.status = "0"
         package.version = package.repo_version
         package.release = package.repo_release
         package.repo_version = ""
         package.repo_release = ""
         db.add(package)
예제 #10
0
파일: installer.py 프로젝트: toxinu/ubik
 def install(self, ignore_errors=False):
     if not self.packages:
         raise InstallerException('Nothing to install')
     stream_logger.info(' :: Install')
     for package in self.packages:
         package.install(ignore_errors=ignore_errors)
         stream_logger.info('      | Update database')
         package.status = "0"
         package.version = package.repo_version
         package.release = package.repo_release
         package.repo_version = ''
         package.repo_release = ''
         db.add(package)
예제 #11
0
파일: remover.py 프로젝트: toxinu/ubik
	def remove(self, ignore_errors=False):
		if not self.packages:
			raise RemoverException('Nothing to remove')
		stream_logger.info(' :: Remove')
		for package in self.packages:
			package.remove(ignore_errors)
			stream_logger.info('     | Update database')
			package.status = "10"
			package.repo_version = package.version
			package.repo_release = package.release
			package.version = ''
			package.release = ''
			db.add(package)
예제 #12
0
파일: installer.py 프로젝트: toxinu/ubik
 def download(self):
     stream_logger.info(' :: Download')
     for package in self.packages:
         logger.info('Download %s' % package.name)
         # Not cached
         if not cached(package):
             logger.info('%s not cached' % package.name)
             get_package(package)
             # Invalid Md5
             if not checkmd5(package):
                 logger.info('%s md5 invalid' % package.name)
                 stream_logger.info('   | Md5 invalid, package corrumpt')
                 raise InstallerException('Invalid Md5')
         # Cached
         else:
             logger.info('%s already in cache' % package.name)
             # Invalid Md5, redownload
             if not checkmd5(package):
                 logger.info('%s cache package md5 invalid' % package.name)
                 get_package(package)
                 if not checkmd5(package):
                     logger.info('%s md5 invalid' % package.name)
                     stream_logger.info(
                         '   | Md5 invalid, package corrumpt')
                     raise InstallerException('Invalid Md5')
             else:
                 stream_logger.info('    | %s already in cache' %
                                    package.name)
예제 #13
0
파일: reinstaller.py 프로젝트: toxinu/ubik
	def download(self):
		stream_logger.info(' :: Download')	
		for package in self.packages:
			logger.info('Download %s' % package.name)
			# Not cached
			if not cached(package):
				logger.info('%s not cached' % package.name)
				get_package(package)
				# Invalid Md5
				if not checkmd5(package):
					logger.info('%s md5 invalid' % package.name)
					stream_logger.info('   | Md5 invalid, package corrumpt')	
					raise ReinstallerException('Invalid Md5')
			# Cached
			else:
				logger.info('%s already in cache' % package.name)
				# Invalid Md5, redownload
				if not checkmd5(package):
					logger.info('%s cache package md5 invalid' % package.name)
					get_package(package)
					if not checkmd5(package):
						logger.info('%s md5 invalid' % package.name)
						stream_logger.info('   | Md5 invalid, package corrumpt')	
						raise ReinstallerException('Invalid Md5')
				else:
					stream_logger.info('    | %s already in cache' % package.name)
예제 #14
0
파일: reinstaller.py 프로젝트: toxinu/ubik
	def feed(self, packages):
		if not isinstance(packages, list):
			packages = [packages]

		for package in packages:
			if not isinstance(package, Package):
				packages += db.get(package)
				del packages[packages.index(package)]

		for package in packages:
			if package not in self.packages:
				if package.status not in ['10']:
					self.packages.append(package)
				else:
					stream_logger.info('    - %s not installed' % package.name)
예제 #15
0
파일: reinstaller.py 프로젝트: toxinu/ubik
    def feed(self, packages):
        if not isinstance(packages, list):
            packages = [packages]

        for package in packages:
            if not isinstance(package, Package):
                packages += db.get(package)
                del packages[packages.index(package)]

        for package in packages:
            if package not in self.packages:
                if package.status not in ['10']:
                    self.packages.append(package)
                else:
                    stream_logger.info('    - %s not installed' % package.name)
예제 #16
0
파일: view.py 프로젝트: toxinu/ubik
def get_view():

    if not os.path.exists(conf.get('paths', 'infos')):
        last_update = "Never"
    else:
        last_update = json.load(open(conf.get('paths',
                                              'infos')))['last_update']

    header = """
 System : %s %s %s
 Repo   : %s/%s/%s
 Last Update : %s
""" % (conf.get('system', 'dist').title(), conf.get(
        'system', 'vers'), conf.get('system', 'arch'), conf.get('repo', 'url'),
       conf.get('repo', 'base'), conf.get('repo', 'branch'), last_update)

    fmt = [('Name', 'name', 25), ('Version', 'version', 25),
           ('Status', 'status', 20)]
    data = []

    # Package.db
    for name, package in db.packages.items():
        # Version output
        if package.repo_version:
            if not package.version:
                version = '[%s-%s]' % (package.repo_version,
                                       package.repo_release)
            else:
                version = '%s-%s [%s-%s]' % (package.version, package.release,
                                             package.repo_version,
                                             package.repo_release)
        else:
            version = package.version + '-' + package.release

        data.append({
            'name': name,
            'version': version,
            'status': status[package.status]
        })

    if not data:
        stream_logger.info(header)
        stream_logger.info('No package installed')
        return

    data = sorted(data, key=lambda k: k['name'])

    stream_logger.info(header)
    stream_logger.info(TablePrinter(fmt, data, ul='-'))
예제 #17
0
파일: view.py 프로젝트: toxinu/ubik
def get_view():

	if not os.path.exists(conf.get('paths', 'infos')):
		last_update = "Never"
	else:
		last_update = json.load(open(conf.get('paths', 'infos')))['last_update']

	header = """
 System : %s %s %s
 Repo   : %s/%s/%s
 Last Update : %s
""" % (	conf.get('system', 'dist').title(),
		conf.get('system', 'vers'),
		conf.get('system', 'arch'),
		conf.get('repo', 'url'),
		conf.get('repo', 'base'),
		conf.get('repo', 'branch'),
		last_update)

	fmt = [	('Name',	'name',		25),
			('Version',	'version',	25),
			('Status',	'status',	20)]
	data = []

	# Package.db	
	for name, package in db.packages.items():
		# Version output
		if package.repo_version:
			if not package.version:
				version = '[%s-%s]' % (package.repo_version, package.repo_release)
			else:
				version = '%s-%s [%s-%s]' % (	package.version, package.release,
												package.repo_version, package.repo_release)
		else:
			version = package.version + '-' + package.release

		data.append({	'name': name,
						'version': version,
						'status': status[package.status]})

	if not data:
		stream_logger.info(header)
		stream_logger.info('No package installed')
		return

	data = sorted(data, key=lambda k: k['name'])

	stream_logger.info(header)
	stream_logger.info(TablePrinter(fmt, data, ul='-'))
예제 #18
0
def confirm(prompt=None, resp=False):
    try:
        if prompt is None:
            prompt = 'Do you want to continue'

        if resp:
            prompt = '%s [%s|%s]? ' % (prompt, 'n', 'Y')
        else:
            prompt = '%s [%s|%s]? ' % (prompt, 'y', 'N')

        while True:
            ans = raw_input(prompt)
            if not ans:
                return resp
            if ans == 'y' or ans == 'Y':
                return True
            if ans == 'n' or ans == 'N':
                return False
            else:
                return False
    except KeyboardInterrupt:
        stream_logger.info('\nAbort.')
        sys.exit(1)
예제 #19
0
파일: tools.py 프로젝트: toxinu/ubik
def confirm(prompt=None, resp=False):
    try:
        if prompt is None:
            prompt = 'Do you want to continue'

        if resp:
            prompt = '%s [%s|%s]? ' % (prompt, 'n', 'Y')
        else:
            prompt = '%s [%s|%s]? ' % (prompt, 'y', 'N')

        while True:
            ans = raw_input(prompt)
            if not ans:
                return resp
            if ans == 'y' or ans == 'Y':
                return True
            if ans == 'n' or ans == 'N':
                return False
            else:
                return False
    except KeyboardInterrupt:
        stream_logger.info('\nAbort.')
        sys.exit(1)
예제 #20
0
파일: cli.py 프로젝트: toxinu/ubik
 def error_link(self, exit=True):
     stream_logger.info(
         '!! Sorry Ubik failed. Please report this issue on my bug tracker')
     stream_logger.info(
         '!! Before post issue, please set logging at least at level 2. Thanks!'
     )
     stream_logger.info(
         'Link: https://github.com/toxinu/ubik/issues?state=open')
     if exit:
         sys.exit(1)
예제 #21
0
파일: view.py 프로젝트: toxinu/ubik
def get_conf():
    fmt = [('Section/Key', 'key', 25), ('Value', 'value', 50)]
    data = []
    for section in conf.sections():
        for key, value in conf.items(section):
            data.append({'key': '%s/%s' % (section, key), 'value': value})

    stream_logger.info('')
    stream_logger.info(TablePrinter(fmt, data, ul='-'))
    stream_logger.info('')
예제 #22
0
파일: view.py 프로젝트: toxinu/ubik
def get_conf():
	fmt = [('Section/Key', 'key', 25), ('Value', 'value', 50)]
	data = []
	for section in conf.sections():
		for key, value in conf.items(section):
			data.append({'key': '%s/%s' % (section, key), 'value': value})

	stream_logger.info('')
	stream_logger.info(TablePrinter(fmt, data, ul='-'))
	stream_logger.info('')
예제 #23
0
파일: view.py 프로젝트: toxinu/ubik
def get_stats():
	fmt = [	('Key', 'info', 25),
			('Value', 'data', 5)]
	data = [{	'info': 'Installed packages',
				'data': db.count_installed()},
			{	'info': 'Updates available',
				'data': db.count_upgrades()},
			{	'info': 'Total packages',
				'data': db.count_packages()}]

	stream_logger.info('')
	stream_logger.info(TablePrinter(fmt, data, ul='='))
	stream_logger.info('')
예제 #24
0
파일: upgrader.py 프로젝트: toxinu/ubik
    def feed(self, packages):
        if not isinstance(packages, list):
            packages = [packages]

        for package in packages:
            if not isinstance(package, Package):
                packages += db.get(package)
                del packages[packages.index(package)]

        for package in packages:
            if package not in self.packages:
                if package.status in ["1", "2"]:
                    self.packages.append(package)
                elif package.status == "0":
                    stream_logger.info("    - %s already up-to-date" % package.name)
                elif package.status == "10":
                    stream_logger.info("    - %s not installed" % package.name)
                elif package.status in ["11", "12"]:
                    stream_logger.info("    - %s can not be downgraded" % package.name)
                else:
                    stream_logger.info("    - %s can not be updated" % package.name)
예제 #25
0
파일: view.py 프로젝트: toxinu/ubik
def get_stats():
    fmt = [('Key', 'info', 25), ('Value', 'data', 5)]
    data = [{
        'info': 'Installed packages',
        'data': db.count_installed()
    }, {
        'info': 'Updates available',
        'data': db.count_upgrades()
    }, {
        'info': 'Total packages',
        'data': db.count_packages()
    }]

    stream_logger.info('')
    stream_logger.info(TablePrinter(fmt, data, ul='='))
    stream_logger.info('')
예제 #26
0
파일: upgrader.py 프로젝트: toxinu/ubik
    def feed(self, packages):
        if not isinstance(packages, list):
            packages = [packages]

        for package in packages:
            if not isinstance(package, Package):
                packages += db.get(package)
                del packages[packages.index(package)]

        for package in packages:
            if package not in self.packages:
                if package.status in ['1', '2']:
                    self.packages.append(package)
                elif package.status == '0':
                    stream_logger.info('    - %s already up-to-date' %
                                       package.name)
                elif package.status == '10':
                    stream_logger.info('    - %s not installed' % package.name)
                elif package.status in ['11', '12']:
                    stream_logger.info('    - %s can not be downgraded' %
                                       package.name)
                else:
                    stream_logger.info('    - %s can not be updated' %
                                       package.name)
예제 #27
0
파일: package.py 프로젝트: toxinu/ubik
 def upgrade(self, ignore_errors=False):
     # Think about ignore_errors
     stream_logger.info("    - %s" % self.name)
     stream_logger.info("      | Unarchive")
     self.unarchive()
     self.import_control()
     # Pre-upgrade
     stream_logger.info("      | Pre Upgrade")
     self.control.pre_upgrade()
     stream_logger.info("      | Unpack")
     unpacker(self)
     # Post-upgrade
     stream_logger.info("      | Post Upgrade")
     self.control.post_upgrade()
     stream_logger.info("      | Clean")
     shutil.rmtree("%s/%s" % (conf.get("settings", "cache"), self.name))
예제 #28
0
파일: cli.py 프로젝트: toxinu/ubik
    def start(self):
        ###################
        # conf            #
        ###################
        if self.args.get('conf', False):
            get_conf()
        ###################
        # stats           #
        ###################
        if self.args.get('stats', False):
            get_stats()
        ###################
        # list            #
        ###################
        elif self.args.get('list', False):
            get_view()
        ###################
        # update          #
        ###################
        elif self.args.get('update', False):
            stream_logger.info('=> Update')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
        ###################
        # clean           #
        ###################
        elif self.args.get('clean', False):
            stream_logger.info('=> Cleaning')
            clean()
        ###################
        # reinstall       #
        ###################
        elif self.args.get('reinstall', False):
            # Sync Database
            stream_logger.info('=> Updating')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
            # Create installer
            stream_logger.info('=> Resolving')
            reinstaller = Reinstaller()
            if not isinstance(self.args['<package>'], list):
                packages = [self.args['<package>']]
            else:
                packages = self.args['<package>']

            try:
                if self.args.get('--with-deps', False):
                    for package in db.get(packages):
                        try:
                            reinstaller.resolve(package)
                            reinstaller.feed(reinstaller.resolved)
                        except RuntimeError as err:
                            if int(conf.get('logger', 'level')) >= 2:
                                traceback.print_exc(file=sys.stdout)
                            stream_logger.info(
                                '!! Dependencies resolve failed (%s)' % err)
                            sys.exit(1)
                else:
                    reinstaller.feed(db.get(packages))
            except DatabaseException as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()

            if not reinstaller.packages:
                stream_logger.info('=> No package(s) to reinstall')
                sys.exit(0)
            stream_logger.info('=> Following packages will be reinstalled:')
            for package in reinstaller.packages:
                stream_logger.info('   - %s' % package.name)
            if not self.args.get('--force-yes', False):
                if confirm():
                    reinstaller.download()
                    try:
                        reinstaller.reinstall(ignore_errors=self.args.get(
                            '--ignore-errors', False))
                    except Exception as err:
                        if int(conf.get('logger', 'level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        raise
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                reinstaller.download()
                try:
                    reinstaller.reinstall(
                        ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger', 'level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                    raise

        ###################
        # install         #
        ###################
        elif self.args.get('install', False):
            # Sync Database
            stream_logger.info('=> Updating')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
            # Create installer
            installer = Installer()
            # Resolve deps
            stream_logger.info('=> Resolving dependencies')
            if not isinstance(self.args['<package>'], list):
                packages = [self.args['<package>']]
            else:
                packages = self.args['<package>']

            try:
                for package in db.get(packages):
                    try:
                        installer.resolve(package)
                        installer.feed(installer.resolved)
                    except RuntimeError as err:
                        if int(conf.get('logger', 'level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        stream_logger.info(
                            '!! Dependencies resolve failed (%s)' % err)
                        sys.exit(1)
            except DatabaseException as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()

            if not installer.packages:
                stream_logger.info('   - No package(s) found')
                sys.exit(1)
            stream_logger.info('=> Following dependencies will be installed:')
            for dep in installer.packages:
                stream_logger.info('   - %s' % dep.name)

            if not self.args.get('--force-yes', False):
                if confirm():
                    installer.download()
                    try:
                        installer.install(ignore_errors=self.args.get(
                            '--ignore-errors', False))
                    except Exception as err:
                        if int(conf.get('logger', 'level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        raise
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                installer.download()
                try:
                    installer.install(
                        ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger', 'level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                    raise
        ###################
        # upgrade         #
        ###################
        elif self.args.get('upgrade', False):
            # Sync Database
            stream_logger.info('=> Updating')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
            # Create Upgrader
            upgrader = Upgrader()
            stream_logger.info('=> Resolving')
            if not isinstance(self.args['<package>'], list):
                packages = [self.args['<package>']]
            else:
                packages = self.args['<package>']

            if not packages:
                upgrader.feed(db.get_upgrades())
            else:
                upgrader.feed(packages)

            if not upgrader.packages:
                stream_logger.info('!! No package(s) to upgrade')
                sys.exit(0)

            stream_logger.info('=> Following packages will be upgraded:')
            for package in upgrader.packages:
                stream_logger.info('   - %s' % package.name)

            if not self.args.get('--force-yes', False):
                if confirm():
                    upgrader.download()
                    try:
                        upgrader.upgrade(ignore_errors=self.args.get(
                            '--ignore-errors', False))
                    except Exception as err:
                        if int(conf.get('logger', 'level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        raise
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                upgrader.download()
                try:
                    upgrader.upgrade(
                        ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger', 'level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                    raise
        ###################
        # remove          #
        ###################
        elif self.args.get('remove', False):
            # Create remover
            remover = Remover()
            packages = db.get(self.args.get('<package>'))

            try:
                remover.feed(packages)
            except DatabaseException as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()

            if not remover.packages:
                sys.exit(0)

            stream_logger.info('=> Following packages will be removed:')
            for package in remover.packages:
                stream_logger.info('   - %s' % package.name)

            if not self.args.get('--force-yes', False):
                if confirm():
                    remover.remove(
                        ignore_errors=self.args.get('--ignore-errors', False))
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                try:
                    remover.remove(
                        ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger', 'level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                        raise
        ##########
        # search #
        ##########
        elif self.args.get('search', False):
            packages = db.get(self.args.get('<package>'))
            if not packages:
                stream_logger.info('!! No package found')
                sys.exit(1)
            for package in packages:
                stream_logger.info('Name: %s' % package.name)
                if package in db.get_installed():
                    stream_logger.info('Version: %s-%s' %
                                       (package.version, package.release))
                    stream_logger.info('Status: %s' % status[package.status])
                else:
                    stream_logger.info(
                        'Version: %s-%s' %
                        (package.repo_version, package.repo_release))
                    stream_logger.info('Status: %s' % status[package.status])

                stream_logger.info('Requires: %s' % ','.join(package.requires))
                stream_logger.info('Description: %s' % package.description)
                stream_logger.info('Architecture: %s' % package.arch)
                stream_logger.info('Distribution: %s' % package.dist)
                stream_logger.info('Distribution version: %s' % package.vers)
                if package is not packages[-1]:
                    stream_logger.info('')
            sys.exit(0)
예제 #29
0
파일: package.py 프로젝트: toxinu/ubik
 def upgrade(self, ignore_errors=False):
     # Think about ignore_errors
     stream_logger.info('    - %s' % self.name)
     stream_logger.info('      | Unarchive')
     self.unarchive()
     self.import_control()
     # Pre-upgrade
     stream_logger.info('      | Pre Upgrade')
     self.control.pre_upgrade()
     stream_logger.info('      | Unpack')
     unpacker(self)
     # Post-upgrade
     stream_logger.info('      | Post Upgrade')
     self.control.post_upgrade()
     stream_logger.info('      | Clean')
     shutil.rmtree('%s/%s' % (conf.get('settings', 'cache'), self.name))
예제 #30
0
파일: cli.py 프로젝트: toxinu/ubik
 def error_link(self, exit=True):
     stream_logger.info('!! Sorry Ubik failed. Please report this issue on my bug tracker')
     stream_logger.info('!! Before post issue, please set logging at least at level 2. Thanks!')
     stream_logger.info('Link: https://github.com/socketubs/ubik/issues?state=open')
     if exit:
        sys.exit(1)
예제 #31
0
파일: cli.py 프로젝트: toxinu/ubik
    def start(self):
        ###################
        # conf            #
        ###################
        if self.args.get('conf', False):
            get_conf()
        ###################
        # stats           #
        ###################
        if self.args.get('stats', False):
            get_stats()
        ###################
        # list            #
        ###################
        elif self.args.get('list', False):
            get_view()
        ###################
        # update          #
        ###################
        elif self.args.get('update', False):
            stream_logger.info('=> Update')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
        ###################
        # clean           #
        ###################
        elif self.args.get('clean', False):
            stream_logger.info('=> Cleaning')
            clean()
        ###################
        # reinstall       #
        ###################
        elif self.args.get('reinstall', False):
            # Sync Database
            stream_logger.info('=> Updating')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
            # Create installer
            stream_logger.info('=> Resolving')
            reinstaller = Reinstaller()
            if not isinstance(self.args['<package>'], list):
                packages = [self.args['<package>']]
            else:
                packages = self.args['<package>']

            try:
                if self.args.get('--with-deps', False):
                    for package in db.get(packages):
                        try:
                            reinstaller.resolve(package)
                            reinstaller.feed(reinstaller.resolved)
                        except RuntimeError as err:
                            if int(conf.get('logger','level')) >= 2:
                                traceback.print_exc(file=sys.stdout)
                            stream_logger.info('!! Dependencies resolve failed (%s)' % err)
                            sys.exit(1)
                else:
                    reinstaller.feed(db.get(packages))
            except DatabaseException as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()

            if not reinstaller.packages:
                stream_logger.info('=> No package(s) to reinstall')
                sys.exit(0)
            stream_logger.info('=> Following packages will be reinstalled:')
            for package in reinstaller.packages:
                stream_logger.info('   - %s' % package.name)
            if not self.args.get('--force-yes', False):
                if confirm():
                    reinstaller.download()
                    try:
                        reinstaller.reinstall(ignore_errors=self.args.get('--ignore-errors', False))
                    except Exception as err:
                        if int(conf.get('logger','level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        raise
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                reinstaller.download()
                try:
                    reinstaller.reinstall(ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger','level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                    raise

        ###################
        # install         #
        ###################
        elif self.args.get('install', False):
            # Sync Database
            stream_logger.info('=> Updating')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
            # Create installer
            installer = Installer()
            # Resolve deps
            stream_logger.info('=> Resolving dependencies')
            if not isinstance(self.args['<package>'], list):
                packages = [self.args['<package>']]
            else:
                packages = self.args['<package>']

            try:
                for package in db.get(packages):
                    try:
                        installer.resolve(package)
                        installer.feed(installer.resolved)
                    except RuntimeError as err:
                        if int(conf.get('logger','level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        stream_logger.info('!! Dependencies resolve failed (%s)' % err)
                        sys.exit(1)
            except DatabaseException as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()

            if not installer.packages:
                stream_logger.info('   - No package(s) found')
                sys.exit(1)
            stream_logger.info('=> Following dependencies will be installed:')
            for dep in installer.packages:
                stream_logger.info('   - %s' % dep.name)

            if not self.args.get('--force-yes', False):
                if confirm():
                    installer.download()
                    try:
                        installer.install(ignore_errors=self.args.get('--ignore-errors', False))
                    except Exception as err:
                        if int(conf.get('logger','level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        raise
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                installer.download()
                try:
                    installer.install(ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger','level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                    raise
        ###################
        # upgrade         #
        ###################
        elif self.args.get('upgrade', False):
            # Sync Database
            stream_logger.info('=> Updating')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
            # Create Upgrader
            upgrader = Upgrader()
            stream_logger.info('=> Resolving')
            if not isinstance(self.args['<package>'], list):
                packages = [self.args['<package>']]
            else:
                packages = self.args['<package>']

            if not packages:
                upgrader.feed(db.get_upgrades())
            else:
                upgrader.feed(packages)

            if not upgrader.packages:
                stream_logger.info('!! No package(s) to upgrade')
                sys.exit(0)

            stream_logger.info('=> Following packages will be upgraded:')
            for package in upgrader.packages:
                stream_logger.info('   - %s' % package.name)

            if not self.args.get('--force-yes', False):
                if confirm():
                    upgrader.download()
                    try:
                        upgrader.upgrade(ignore_errors=self.args.get('--ignore-errors', False))
                    except Exception as err:
                        if int(conf.get('logger','level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        raise
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                upgrader.download()
                try:
                    upgrader.upgrade(ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger','level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                    raise
        ###################
        # remove          #
        ###################
        elif self.args.get('remove', False):
            # Create remover
            remover = Remover()
            packages = db.get(self.args.get('<package>'))

            try:
                remover.feed(packages)
            except DatabaseException as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()

            if not remover.packages:
                sys.exit(0)

            stream_logger.info('=> Following packages will be removed:')
            for package in remover.packages:
                stream_logger.info('   - %s' % package.name)

            if not self.args.get('--force-yes', False):
                if confirm():
                    remover.remove(ignore_errors=self.args.get('--ignore-errors', False))
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                try:
                    remover.remove(ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger','level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                        raise
        ##########
        # search #
        ##########
        elif self.args.get('search', False):
            packages = db.get(self.args.get('<package>'))
            if not packages:
                stream_logger.info('!! No package found')
                sys.exit(1)
            for package in packages:
                stream_logger.info('Name: %s' % package.name)
                if package in db.get_installed():
                    stream_logger.info('Version: %s-%s' % (package.version, package.release))
                    stream_logger.info('Status: %s' % status[package.status])
                else:
                    stream_logger.info('Version: %s-%s' % (package.repo_version, package.repo_release))
                    stream_logger.info('Status: %s' % status[package.status])

                stream_logger.info('Requires: %s' % ','.join(package.requires))
                stream_logger.info('Description: %s' % package.description)
                stream_logger.info('Architecture: %s' % package.arch)
                stream_logger.info('Distribution: %s' % package.dist)
                stream_logger.info('Distribution version: %s' % package.vers)
                if package is not packages[-1]:
                    stream_logger.info('')
            sys.exit(0)