From 03a41f943b77d18fe7caef7eab2ae31bac200dfd Mon Sep 17 00:00:00 2001 From: Doug Hellmann Date: Thu, 30 Oct 2014 17:26:17 -0400 Subject: [PATCH] add rescan command --- aeromancer/cli/project.py | 17 ++++++++++++++++- aeromancer/project.py | 10 +++++++--- setup.cfg | 1 + 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/aeromancer/cli/project.py b/aeromancer/cli/project.py index a3bc65a..ecd95e8 100644 --- a/aeromancer/cli/project.py +++ b/aeromancer/cli/project.py @@ -29,12 +29,14 @@ class Add(Command): for project_name in parsed_args.project: project_path = os.path.join(self.app.options.repo_root, project_name) proj_obj = project.add_or_update(session, project_name, project_path) - session.commit() + session.commit() class List(Lister): """Show the registered projects""" + log = logging.getLogger(__name__) + def take_action(self, parsed_args): session = self.app.get_db_session() query = session.query(Project).order_by(Project.name) @@ -42,6 +44,19 @@ class List(Lister): ((p.name, p.path) for p in query.all())) +class Rescan(Command): + "Rescan all known projects" + + log = logging.getLogger(__name__) + + def take_action(self, parsed_args): + session = self.app.get_db_session() + query = session.query(Project).order_by(Project.name) + for proj_obj in query.all(): + project.update(session, proj_obj) + session.commit() + + class Remove(Command): "Remove a project from the database" diff --git a/aeromancer/project.py b/aeromancer/project.py index f60934f..ad4958b 100644 --- a/aeromancer/project.py +++ b/aeromancer/project.py @@ -23,7 +23,7 @@ def add_or_update(session, name, path): LOG.info('adding project %s from %s', name, path) session.add(proj_obj) - update_project_files(session, proj_obj) + update(session, proj_obj) return proj_obj @@ -38,7 +38,11 @@ def remove(session, name): session.delete(proj_obj) -def update_project_files(session, proj_obj): +def update(session, proj_obj): + _update_project_files(session, proj_obj) + + +def _update_project_files(session, proj_obj): """Update the files stored for each project""" # Delete any existing files in case the list of files being # managed has changed. This naive, and we can do better, but as a @@ -63,5 +67,5 @@ def update_project_files(session, proj_obj): with io.open(fullname, mode='r', encoding='utf-8') as f: body = f.read() lines = body.splitlines() - LOG.info('%s has %s lines', filename, len(lines)) + LOG.info('%s/%s has %s lines', proj_obj.name, filename, len(lines)) session.add(File(project=proj_obj, name=filename, path=fullname)) diff --git a/setup.cfg b/setup.cfg index 6c70a77..bccec4f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -53,3 +53,4 @@ aeromancer.cli = add = aeromancer.cli.project:Add list = aeromancer.cli.project:List remove = aeromancer.cli.project:Remove + rescan = aeromancer.cli.project:Rescan