def restore_stash(self): """Restore previous state of plenary. This should only be called while holding an appropriate lock. """ if not self.stashed: self.logger.info("Attempt to restore plenary '%s' " "without having saved state." % self.old_path) return # Should this optimization be in use? # if not self.changed and not self.removed: # return # If the plenary has moved, then we need to clean up the new location if self.new_path and self.new_path != self.old_path: self.logger.debug("Removing %r [%s]" % (self, self.new_path)) remove_file(self.new_path, cleanup_directory=True, logger=self.logger) self.logger.debug("Restoring %r [%s]" % (self, self.old_path)) if self.old_content is None: remove_file(self.old_path, cleanup_directory=True, logger=self.logger) else: write_file(self.old_path, self.old_content, create_directory=True, logger=self.logger) atime = os.stat(self.old_path).st_atime os.utime(self.old_path, (atime, self.old_mtime))
def remove(self, locked=False, remove_profile=False): """ remove this plenary template """ key = None try: if not locked: key = self.get_key() lock_queue.acquire(key) self.stash() self.logger.debug("Removing %r [%s]" % (self, self.old_path)) remove_file(self.old_path, cleanup_directory=True, logger=self.logger) self.removed = True # Most of the error handling routines would restore_stash... # but there's no need here if the remove failed. :) finally: if not locked: lock_queue.release(key) return
def remove(self, locked=False, remove_profile=False): """ remove all files related to an object template including any intermediate build files """ key = None try: if not locked: key = self.get_key() lock_queue.acquire(key) self.stash() # Only one or the other of .xml/.xml.gz should be there... # it doesn't hurt to clean up both. # .xml.dep is used up to and including panc 9.2 # .dep is used by panc 9.4 and higher basename = os.path.join(self.config.get("broker", "quattordir"), "build", self.old_branch, self.old_name) for ext in (".xml", ".xml.gz", ".xml.dep", ".dep"): remove_file(basename + ext, logger=self.logger) try: os.removedirs(os.path.dirname(basename)) except OSError: pass super(ObjectPlenary, self).remove(locked=True) if remove_profile: basename = os.path.join(self.config.get("broker", "profilesdir"), self.old_name) # Only one of these should exist, but it doesn't hurt # to try to clean up both. for ext in (".xml", ".xml.gz"): remove_file(basename + ext, logger=self.logger) # Remove the cached template created by ant remove_file(os.path.join(self.config.get("broker", "quattordir"), "objects", self.old_name + self.TEMPLATE_EXTENSION), logger=self.logger) except: if not locked: self.restore_stash() raise finally: if not locked: lock_queue.release(key)
ref = "HEAD:%s" % (dbsandbox.name) command = ["pull", filename, ref] if rebase: command.append("--force") run_git(command, path=temprepo, logger=logger, loglevel=CLIENT_INFO) # FIXME: Run tests before pushing back to template-king if rebase: target_ref = "+" + dbsandbox.name else: target_ref = dbsandbox.name run_git(["push", "origin", target_ref], path=temprepo, logger=logger) except ProcessException, e: raise ArgumentError("\n%s%s" % (e.out, e.err)) finally: remove_file(filename, logger=logger) remove_dir(tempdir, logger=logger) client_command = "git fetch" if not sync or not dbsandbox.autosync: return client_command for domain in dbsandbox.trackers: if not domain.autosync: continue try: sync_domain(domain, logger=logger) except ProcessException, e: logger.warn("Error syncing domain %s: %s" % (domain.name, e)) return client_command