def check_project_has_update(self, project_name, callback): if project_name in self.projects: project = self.projects[project_name] project_path = os.path.join(self.projects_dir, project_name) self.install_output = [] if not os.path.exists(project_path): callback(True) return subprocess.Popen( args=["git", "config", "remote.origin.url", project["repository"]], cwd=project_path ).communicate() p = AsyncPopen( args=["git", "fetch"], cwd=project_path, env=self.gitenv ) p.on_output += self.collect_install_output p.on_end += yield gen.Callback("gitend") p.run() result = yield gen.Wait("gitend") if result != 0: callback(True) return output = subprocess.Popen( args=["git", "rev-list", "HEAD..FETCH_HEAD"], cwd=project_path, stdout=subprocess.PIPE ).communicate()[0] if output.strip() != "": callback(True) else: callback(False)
def check_project_has_update(self, project_name, callback): if project_name in self.projects: project = self.projects[project_name] project_path = os.path.join(self.projects_dir, project_name) self.install_output = [] if not os.path.exists(project_path): callback(True) return subprocess.Popen(args=[ "git", "config", "remote.origin.url", project["repository"] ], cwd=project_path).communicate() p = AsyncPopen(args=["git", "fetch"], cwd=project_path, env=self.gitenv) p.on_output += self.collect_install_output p.on_end += yield gen.Callback("gitend") p.run() result = yield gen.Wait("gitend") if result != 0: callback(True) return output = subprocess.Popen( args=["git", "rev-list", "HEAD..FETCH_HEAD"], cwd=project_path, stdout=subprocess.PIPE).communicate()[0] if output.strip() != "": callback(True) else: callback(False)
def install_project(self, project_name, callback=None): self.installed_projects.discard(project_name) if project_name in self.projects and not self.installing: self.installing = project_name self.install_output = [] project = self.projects[project_name] project_path = os.path.join(self.projects_dir, project_name) self.on_project_installing(self, project) if project_name in self.failed_projects: if os.path.exists(project_path): shutil.rmtree(project_path) self.failed_projects.discard(project_name) if os.path.exists(project_path): subprocess.Popen( args=[ "git", "config", "remote.origin.url", project["repository"] ], cwd=project_path ).communicate() p = AsyncPopen( args=[ "git", "pull" ], cwd=project_path, env=self.gitenv ) else: p = AsyncPopen( args=[ "git", "clone", project["repository"], project_path ], env=self.gitenv ) p.on_output += self.collect_install_output p.on_end += yield gen.Callback("gitend") p.run() result = yield gen.Wait("gitend") if result != 0: self.install_output.append("\ngit returned %d\n" % result) self.on_project_installation_failed(self, project, "".join(self.install_output)) self.installing = None self.failed_projects.add(project_name) if callback: callback(False) return project_install_file = os.path.join(project_path, "warrior-install.sh") if os.path.exists(project_install_file): p = AsyncPopen( args=[ project_install_file ], cwd=project_path ) p.on_output += self.collect_install_output p.on_end += yield gen.Callback("installend") p.run() result = yield gen.Wait("installend") if result != 0: self.install_output.append("\nCustom installer returned %d\n" % result) self.on_project_installation_failed(self, project, "".join(self.install_output)) self.installing = None self.failed_projects.add(project_name) if callback: callback(False) return data_dir = os.path.join(self.data_dir, "data") if os.path.exists(data_dir): shutil.rmtree(data_dir) os.makedirs(data_dir) project_data_dir = os.path.join(project_path, "data") if os.path.islink(project_data_dir): os.remove(project_data_dir) elif os.path.isdir(project_data_dir): shutil.rmtree(project_data_dir) os.symlink(data_dir, project_data_dir) self.installed_projects.add(project_name) self.on_project_installed(self, project, "".join(self.install_output)) self.installing = None if callback: callback(True)
def install_project(self, project_name, callback=None): self.installed_projects.discard(project_name) if project_name in self.projects and not self.installing: self.installing = project_name self.install_output = [] project = self.projects[project_name] project_path = os.path.join(self.projects_dir, project_name) self.on_project_installing(self, project) if project_name in self.failed_projects: if os.path.exists(project_path): shutil.rmtree(project_path) self.failed_projects.discard(project_name) if os.path.exists(project_path): subprocess.Popen(args=[ "git", "config", "remote.origin.url", project["repository"] ], cwd=project_path).communicate() p = AsyncPopen(args=["git", "pull"], cwd=project_path, env=self.gitenv) else: p = AsyncPopen( args=["git", "clone", project["repository"], project_path], env=self.gitenv) p.on_output += self.collect_install_output p.on_end += yield gen.Callback("gitend") p.run() result = yield gen.Wait("gitend") if result != 0: self.install_output.append("\ngit returned %d\n" % result) self.on_project_installation_failed( self, project, "".join(self.install_output)) self.installing = None self.failed_projects.add(project_name) if callback: callback(False) return project_install_file = os.path.join(project_path, "warrior-install.sh") if os.path.exists(project_install_file): p = AsyncPopen(args=[project_install_file], cwd=project_path) p.on_output += self.collect_install_output p.on_end += yield gen.Callback("installend") p.run() result = yield gen.Wait("installend") if result != 0: self.install_output.append( "\nCustom installer returned %d\n" % result) self.on_project_installation_failed( self, project, "".join(self.install_output)) self.installing = None self.failed_projects.add(project_name) if callback: callback(False) return data_dir = os.path.join(self.data_dir, "data") if os.path.exists(data_dir): shutil.rmtree(data_dir) os.makedirs(data_dir) project_data_dir = os.path.join(project_path, "data") if os.path.islink(project_data_dir): os.remove(project_data_dir) elif os.path.isdir(project_data_dir): shutil.rmtree(project_data_dir) os.symlink(data_dir, project_data_dir) self.installed_projects.add(project_name) self.on_project_installed(self, project, "".join(self.install_output)) self.installing = None if callback: callback(True)