From 8c509e4fc8d09b4ece67d40645342eea815c8505 Mon Sep 17 00:00:00 2001 From: Matthieu Gonnet <matthieu.gonnet@smartjog.com> Date: Wed, 31 Aug 2011 16:07:12 -0500 Subject: [PATCH] Add check command Signed-off-by: Seblu <sebastien.luttringer@smartjog.com> --- bin/is | 13 +++++++++++++ installsystems/repository.py | 21 +++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/bin/is b/bin/is index 487f856..2499fb5 100755 --- a/bin/is +++ b/bin/is @@ -99,6 +99,14 @@ def c_cat(parser, args): for filename in args.file: img.cat(filename) +def c_check(parser, args): + ''' + Check for unreferenced and missing files inside a repository + ''' + repoman = load_repositories(args) + for reponame in args.repository: + repoman[reponame].check() + def c_clean(parser, args): ''' Clean a repository @@ -320,6 +328,11 @@ p_cat.add_argument("file", nargs="+", help="file inside image to cat (globbing allowed)") p_cat.set_defaults(func=c_cat) +# check command parser +p_check = subparsers.add_parser("check", help=c_check.__doc__.lower()) +p_check.add_argument("repository", nargs="+", help="repositories to check") +p_check.set_defaults(func=c_check) + # clean command parser p_clean = subparsers.add_parser("clean", help=c_clean.__doc__.lower()) p_clean.add_argument("repository", nargs="+", help="repositories to clean") diff --git a/installsystems/repository.py b/installsystems/repository.py index 3664c2f..858b528 100644 --- a/installsystems/repository.py +++ b/installsystems/repository.py @@ -182,6 +182,27 @@ class Repository(object): res = self.db.ask("SELECT md5 FROM image UNION SELECT md5 FROM payload").fetchall() return [ md5[0] for md5 in res ] + def check(self): + ''' + Check repository for unreferenced and missing files + ''' + # Check if the repo is local + if not istools.isfile(self.config.path): + raise Exception("Repository must be local") + local_files = set(os.listdir(self.config.path)) + db_files = set(self.getallmd5()) + db_files.add(self.config.dbname) + db_files.add( self.config.lastname) + # compute missing and unref files list + missing_files = db_files - local_files + unref_files = local_files - db_files + if len(missing_files) > 0: + arrow("Missing files:") + out(os.linesep.join(missing_files)) + if len(unref_files) > 0: + arrow("Unreferenced files:") + out(os.linesep.join(unref_files)) + def clean(self): ''' Clean the repository's content -- GitLab