From bf947d355ba7e6664732425ea9ece84c882a1ee2 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Sat, 1 Jan 2011 17:22:44 +0100 Subject: [PATCH] [reagent,equo] implement "reagent repo package-dep-check" tool This tool helps QA checking packages against missing runtime dependencies --- client/equo.py | 9 +++++---- docs/man/man1/equo.1 | 2 +- docs/man/man1/reagent.1 | 13 ++++++++----- server/reagent.py | 5 +++-- server/server_reagent.py | 42 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 59 insertions(+), 12 deletions(-) diff --git a/client/equo.py b/client/equo.py index a21090d19..9f4031b49 100644 --- a/client/equo.py +++ b/client/equo.py @@ -311,12 +311,13 @@ help_opts_extended = [ (3, 'switchbranch ', 2, _('switch to the specified branch the provided atoms (or world)')), (3, 'md5remote', 2, _('verify remote integrity of the provided atoms (or world)')), (3, 'backup', 3, _('backup current repository database')), - (3, 'restore', 3, _('restore a previously backed-up repository database')), + (3, 'restore', 2, _('restore a previously backed-up repository database')), (3, 'spmuids', 2, _('regenerate SPM UIDs map (SPM <-> Entropy packages)'),), - (3, 'enable ', 3, _('enable the specified repository')), - (3, 'disable ', 3, _('disable the specified repository')), - (3, 'status ', 3, _('show the current Server Interface status')), + (3, 'enable ', 2, _('enable the specified repository')), + (3, 'disable ', 2, _('disable the specified repository')), + (3, 'status ', 2, _('show the current Server Interface status')), + (3, 'package-dep-check [atoms]', 1, _('check packages in repository for missing dependencies')), (3, 'package-dep [atoms]', 1, _('handle packages dependencies')), (3, 'package-tag [atoms]', 1, _('clone a package inside a repository assigning it an arbitrary tag')), (3, 'move [atoms]', 1, _('move packages from a repository to another')), diff --git a/docs/man/man1/equo.1 b/docs/man/man1/equo.1 index 799cbd11b..64253ec56 100644 --- a/docs/man/man1/equo.1 +++ b/docs/man/man1/equo.1 @@ -124,7 +124,7 @@ .\" ======================================================================== .\" .IX Title "EQUO 1" -.TH EQUO 1 "2010-11-27" "perl v5.12.2" "Entropy" +.TH EQUO 1 "2010-12-02" "perl v5.12.2" "Entropy" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff --git a/docs/man/man1/reagent.1 b/docs/man/man1/reagent.1 index 8414367e8..0c5cb476d 100644 --- a/docs/man/man1/reagent.1 +++ b/docs/man/man1/reagent.1 @@ -124,7 +124,7 @@ .\" ======================================================================== .\" .IX Title "REAGENT 1" -.TH REAGENT 1 "2010-11-18" "perl v5.12.2" "Entropy" +.TH REAGENT 1 "2011-01-01" "perl v5.12.2" "Entropy" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -300,6 +300,9 @@ enable the specified repository .IP "\fBdisable " 4 .IX Item "disable " disable the specified repository +.IP "\fBpackage-dep-check " 4 +.IX Item "package-dep-check " +check packages in repository for missing dependencies .IP "\fBpackage-dep " 4 .IX Item "package-dep " handle packages dependencies @@ -445,9 +448,9 @@ Fabio Erculiani .SH "POD ERRORS" .IX Header "POD ERRORS" Hey! \fBThe above document had some coding errors, which are explained below:\fR -.IP "Around line 304:" 4 -.IX Item "Around line 304:" +.IP "Around line 308:" 4 +.IX Item "Around line 308:" \&'=item' outside of any '=over' -.IP "Around line 404:" 4 -.IX Item "Around line 404:" +.IP "Around line 408:" 4 +.IX Item "Around line 408:" You forgot a '=back' before '=head1' diff --git a/server/reagent.py b/server/reagent.py index eb21175da..478b3c8c4 100644 --- a/server/reagent.py +++ b/server/reagent.py @@ -82,11 +82,12 @@ help_opts = [ (2, 'multiremove', 3, _('remove the provided injected atoms (all if no atom specified)')), (2, 'create-empty-database', 2, _('create an empty repository database in the provided path')), (2, 'switchbranch ', 3, _('switch to the specified branch the repository')), - (2, 'md5remote [atoms]', 3, _('verify remote integrity of the provided atoms')), + (2, 'md5remote [atoms]', 2, _('verify remote integrity of the provided atoms')), (2, 'backup', 4, _('backup current repository database')), - (2, 'restore', 4, _('restore a previously backed-up repository database')), + (2, 'restore', 3, _('restore a previously backed-up repository database')), (2, 'enable ', 3, _('enable the specified repository')), (2, 'disable ', 3, _('disable the specified repository')), + (2, 'package-dep-check [atoms]', 0, _('check packages in repository for missing dependencies')), (2, 'package-dep [atoms]', 1, _('handle packages dependencies')), (2, 'package-tag [atoms]', 1, _('clone a package assigning it an arbitrary tag')), (2, 'package-mask [atoms]', 1, _('mask given package in given repository')), diff --git a/server/server_reagent.py b/server/server_reagent.py index 8c6b5f423..653448d28 100644 --- a/server/server_reagent.py +++ b/server/server_reagent.py @@ -137,6 +137,44 @@ def _package_tag(entropy_server, args): repo = repo) return status +def _package_dep_check(entropy_server, args): + + if len(args) < 1: + print_error(darkred(" !!! ")+red(_("Invalid syntax."))) + return 1 + repo = args[0] + + sys_settings_plugin_id = \ + etpConst['system_settings_plugins_ids']['server_plugin'] + srv_set = SYS_SET[sys_settings_plugin_id]['server'] + if repo not in srv_set['repositories']: + print_error(darkred(" !!! ")+red(_("No valid repository specified."))) + return 3 + + atoms = args[1:] + if not atoms: + pkg_ids = entropy_server.open_repository(repo).listAllPackageIds() + pkg_matches = [(x, repo) for x in pkg_ids] + else: + pkg_matches = [] + for package in atoms: + match = entropy_server.atom_match(package, match_repo = (repo,)) + if match[1] == repo: + pkg_matches.append(match) + else: + print_warning( brown(" * ") + \ + red("%s: " % (_("Cannot match"),) )+bold(package) + \ + red(" %s " % (_("in"),) )+bold(repo) + \ + red(" %s" % (_("repository"),) ) + ) + + if not pkg_matches: + print_error(darkred(" !!! ")+red(_("No packages selected."))) + return 2 + + entropy_server.missing_runtime_dependencies_test(pkg_matches) + return 0 + def _package_dep(entropy_server, args): if len(args) < 2: @@ -165,6 +203,7 @@ def _package_dep(entropy_server, args): red(" %s" % (_("repository"),) ) ) if not idpackages: + print_error(darkred(" !!! ")+red(_("No packages selected."))) return 2 dbconn = entropy_server.open_server_repository(repo = repo, just_reading = True) @@ -651,6 +690,9 @@ def _repositories(entropy_server, options): entropy_server.switch_default_repository(repoid, save = True) return 0 + elif cmd == "package-dep-check": + return _package_dep_check(entropy_server, myopts) + elif cmd == "package-tag": return _package_tag(entropy_server, myopts)