Example #1
0
 def start_services(self):
     for key, value in settings.services.iteritems():
         settings.services[key].running = False
     for file in [file for file in os.listdir('services') if file.startswith(
             'web__') and file.endswith('.py')]:
         service_name = file.replace('.py', '')
         if not service_name in self.assigned_services:
             continue
         self.services.append(service_name)
         settings.services[service_name] = Service(service_name)
         settings.services[service_name].daemon = True
         settings.services[service_name].start()
Example #2
0
 def start_services(self):
     for key, value in settings.services.iteritems():
         settings.services[key].running = False
     for file in [file for file in os.listdir('services') if file.startswith(
           'web__') and file.endswith('.py')]:
         service_name = file.replace('.py', '')
         if not service_name in self.assigned_services:
             continue
         self.services.append(service_name)
         settings.services[service_name] = Service(service_name)
         settings.services[service_name].daemon = True
         settings.services[service_name].start()
Example #3
0
	def find_files(self, datafile, patterns):
		if self.payload_compression == "xz":
			datafile = tar.InnerTarFileXz.open(datafile)
		else:
			datafile = tar.InnerTarFile.open(datafile)

		members = datafile.getmembers()

		files = []
		dirs  = []

		# Find all directories in the file list.
		for file in patterns:
			if file.startswith("/"):
				file = file[1:]

			for member in members:
				if member.name == file and member.isdir():
					dirs.append(file)

		for d in dirs:
			for member in members:
				if not member.isdir() and member.name.startswith(d):
					files.append(member.name)

		for pattern in patterns:
			if pattern.startswith("/"):
				pattern = pattern[1:]

			for member in members:
				if not fnmatch.fnmatch(member.name, pattern):
					continue

				if member.name in files:
					continue

				files.append(member.name)

		# Sort list alphabetically.
		files.sort()

		return files
Example #4
0
 def start_services(self):
     for file in [file for file in os.listdir('services') if file.startswith(
             'web__') and file.endswith('.py')]:
         service_name = file.replace('.py', '')
         if not service_name in self.services:
             self.new_services += 1
             self.services.append(service_name)
             settings.services[service_name] = Service(service_name)
             settings.services[service_name].daemon = True
             settings.services[service_name].start()
             settings.services[service_name].read_urls()
         settings.services[service_name].get_data()
     settings.irc_bot.send('PRIVMSG', 'Found {new_services} new services'.format(
         new_services=self.new_services), settings.irc_channel_bot)
     self.new_services = 0
     if not settings.get_urls:
         settings.get_urls = Urls()
         settings.get_urls.daemon = True
         settings.get_urls.start()
     self.distribute_services()
Example #5
0
 def start_services(self):
     for file in [file for file in os.listdir('services') if file.startswith(
             'web__') and file.endswith('.py')]:
         service_name = file.replace('.py', '')
         if not service_name in self.services:
             self.new_services += 1
             self.services.append(service_name)
             settings.services[service_name] = Service(service_name)
             settings.services[service_name].daemon = True
             settings.services[service_name].start()
             settings.services[service_name].read_urls()
         settings.services[service_name].get_data()
     settings.irc_bot.send('PRIVMSG', 'Found {new_services} new services'.format(
             new_services=self.new_services), settings.irc_channel_bot)
     self.new_services = 0
     if not settings.get_urls:
         settings.get_urls = Urls()
         settings.get_urls.daemon = True
         settings.get_urls.start()
     self.distribute_services()
Example #6
0
	def create_datafile(self):
		includes = []
		excludes = []

		# List of all patterns, which grows.
		patterns = self.pkg.files

		# ...
		orphan_directories = []
		for d in ORPHAN_DIRECTORIES:
			if d.startswith("usr/"):
				b = os.path.basename(d)
				b = os.path.join(self.buildroot, b)

				if os.path.islink(b):
					continue

			d = os.path.join(self.buildroot, d)
			if not os.path.islink(d):
				orphan_directories.append(d)

		for pattern in patterns:
			# Check if we are running in include or exclude mode.
			if pattern.startswith("!"):
				files = excludes

				# Strip the ! character.
				pattern = pattern[1:]
			else:
				files = includes

			# Expand file to point to chroot.
			if pattern.startswith("/"):
				pattern = pattern[1:]
			pattern = os.path.join(self.buildroot, pattern)

			# Recognize the type of the pattern. Patterns could be a glob
			# pattern that is expanded here or just a directory which will
			# be included recursively.
			if "*" in pattern or "?" in pattern or ("[" in pattern and "]" in pattern):
				_patterns = glob.glob(pattern)
			else:
				_patterns = [pattern,]

			for pattern in _patterns:
				# Try to stat the pattern. If that is not successful, we cannot go on.
				try:
					os.lstat(pattern)
				except OSError:
					continue

				# Add directories recursively but skip those symlinks
				# that point to a directory.
				if os.path.isdir(pattern) and not os.path.islink(pattern):
					# Add directory itself.
					files.append(pattern)

					for dir, subdirs, _files in os.walk(pattern):
						for subdir in subdirs:
							if subdir in orphan_directories:
								continue

							subdir = os.path.join(dir, subdir)
							files.append(subdir)

						for file in _files:
							file = os.path.join(dir, file)
							files.append(file)

				# All other files are just added.
				else:
					files.append(pattern)

		files = []
		for file in includes:
			# Skip if file is already in the file set or
			# marked to be excluded from this archive.
			if file in excludes or file in files:
				continue

			# Skip orphan directories.
			if file in orphan_directories and not os.listdir(file):
				log.debug("Found an orphaned directory: %s" % file)
				continue

			files.append(file)

			while True:
				file = os.path.dirname(file)

				if file == self.buildroot:
					break

				if not file in files:
					files.append(file)

		files.sort()

		# Load progressbar.
		message = "%-10s : %s" % (_("Packaging"), self.pkg.friendly_name)
		pb = util.make_progress(message, len(files), eta=False)

		datafile = self.mktemp()
		if self.payload_compression == "xz":
			t = tar.InnerTarFileXz.open(datafile, mode="w")
		else:
			t = tar.InnerTarFile.open(datafile, mode="w")

		# All files in the tarball are relative to this directory.
		basedir = self.buildroot

		i = 0
		for file in files:
			if pb:
				i += 1
				pb.update(i)

			# Never package /.
			if os.path.normpath(file) == os.path.normpath(basedir):
				continue

			# Name of the file in the archive.
			arcname = "/%s" % os.path.relpath(file, basedir)

			# Add file to tarball.
			t.add(file, arcname=arcname, recursive=False)

		# Remove all packaged files.
		for file in reversed(files):
			# It's okay if we cannot remove directories,
			# when they are not empty.
			if os.path.isdir(file):
				try:
					os.rmdir(file)
				except OSError:
					continue
			else:
				try:
					os.unlink(file)
				except OSError:
					pass

			while True:
				file = os.path.dirname(file)

				if not file.startswith(basedir):
					break

				try:
					os.rmdir(file)
				except OSError:
					break

		# Close the tarfile.
		t.close()

		# Finish progressbar.
		if pb:
			pb.finish()

		return datafile