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()
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
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()
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