[reagent/equo] implement full repository dependency editor

This commit is contained in:
Fabio Erculiani
2010-01-23 02:07:30 +01:00
parent 157cca7157
commit 28b86c5c5d
7 changed files with 99 additions and 50 deletions
+1 -1
View File
@@ -299,7 +299,7 @@ help_opts_extended = [
(3, 'enable <repo>', 3, _('enable the specified repository')),
(3, 'disable <repo>', 3, _('disable the specified repository')),
(3, 'status <repo>', 3, _('show the current Server Interface status')),
(3, 'manual-deps <repo> [atoms]', 1, _('handle packages manual dependencies')),
(3, 'package-dep <repo> [atoms]', 1, _('handle packages dependencies')),
(3, 'package-tag <repo> <tag-string> [atoms]', 1, _('clone a package inside a repository assigning it an arbitrary tag')),
(3, 'move <from> <to> [atoms]', 1, _('move packages from a repository to another')),
(4, '--deps', 3, _('pulls dependencies in')),
+2 -2
View File
@@ -1012,9 +1012,9 @@ disable the specified repository
show the current Server Interface status
=item B<manual-deps <repo> [atoms]>
=item B<package-dep <repo> [atoms]>
handle packages manual dependencies
handle packages dependencies
=item B<package-tag <repo> <tag-string> [atoms]>
+4 -4
View File
@@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "EQUO 1"
.TH EQUO 1 "2010-01-12" "perl v5.8.8" "Entropy"
.TH EQUO 1 "2010-01-23" "perl v5.8.8" "Entropy"
.SH "NAME"
\&\fBequo\fR \- Official Sabayon Linux Package Manager Client
.SH "SYNOPSIS"
@@ -898,9 +898,9 @@ disable the specified repository
.IP "\fBstatus <repo\fR>" 4
.IX Item "status <repo>"
show the current Server Interface status
.IP "\fBmanual-deps <repo\fR [atoms]>" 4
.IX Item "manual-deps <repo [atoms]>"
handle packages manual dependencies
.IP "\fBpackage-dep <repo\fR [atoms]>" 4
.IX Item "package-dep <repo [atoms]>"
handle packages dependencies
.IP "\fBpackage-tag <repo\fR <tag\-string> [atoms]>" 4
.IX Item "package-tag <repo <tag-string> [atoms]>"
clone a package inside a repository assigning it an arbitrary tag
+4 -4
View File
@@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "REAGENT 1"
.TH REAGENT 1 "2010-01-20" "perl v5.8.8" "Entropy"
.TH REAGENT 1 "2010-01-23" "perl v5.8.8" "Entropy"
.SH "NAME"
\&\fBreagent\fR \- Official Sabayon Linux Server\-Side Package Management tool
.SH "SYNOPSIS"
@@ -317,9 +317,9 @@ disable the specified repository
.IP "\fBstatus <repo\fR>" 4
.IX Item "status <repo>"
show the current Server Interface status
.IP "\fBmanual-deps <repo\fR [atoms]>" 4
.IX Item "manual-deps <repo [atoms]>"
handle packages manual dependencies
.IP "\fBpackage-dep <repo\fR [atoms]>" 4
.IX Item "package-dep <repo [atoms]>"
handle packages dependencies
.IP "\fBpackage-tag <repo\fR <tag\-string> [atoms]>" 4
.IX Item "package-tag <repo <tag-string> [atoms]>"
clone a package assigning it an arbitrary tag
+2 -2
View File
@@ -253,9 +253,9 @@ disable the specified repository
show the current Server Interface status
=item B<manual-deps <repo> [atoms]>
=item B<package-dep <repo> [atoms]>
handle packages manual dependencies
handle packages dependencies
=item B<package-tag <repo> <tag-string> [atoms]>
+1 -1
View File
@@ -90,7 +90,7 @@ help_opts = [
(2, 'enable <repo>', 3, _('enable the specified repository')),
(2, 'disable <repo>', 3, _('disable the specified repository')),
(2, 'status <repo>', 3, _('show the current Server Interface status')),
(2, 'manual-deps <repo> [atoms]', 1, _('handle packages manual dependencies')),
(2, 'package-dep <repo> [atoms]', 1, _('handle packages dependencies')),
(2, 'package-tag <repo> <tag-string> [atoms]', 1, _('clone a package assigning it an arbitrary tag')),
(2, 'move <from> <to> [atoms]', 1, _('move packages from a repository to another')),
(3, '--deps', 3, _('pulls dependencies in')),
+85 -36
View File
@@ -13,7 +13,7 @@ import os
import subprocess
from entropy.const import etpConst, etpUi
from entropy.output import red, bold, brown, purple, darkgreen, darkred, blue, \
green, print_info, print_warning, print_error, print_generic
green, print_info, print_warning, print_error, print_generic, teal
from entropy.exceptions import InvalidAtom
from entropy.server.interfaces import Server
from entropy.i18n import _
@@ -157,7 +157,7 @@ def repositories(options):
status, data = Entropy.tag_packages(tag_string, idpackages, repo = repo)
return status
elif cmd == "manual-deps":
elif cmd == "package-dep":
if len(myopts) < 2:
return 1
@@ -173,7 +173,8 @@ def repositories(options):
# match
idpackages = []
for package in atoms:
match = Entropy.atom_match(package + '#', matchRepo = [repo])
match = Entropy.atom_match(package + etpConst['entropytagprefix'],
matchRepo = [repo])
if match[1] == repo:
idpackages.append(match[0])
else:
@@ -186,65 +187,113 @@ def repositories(options):
return 2
dbconn = Entropy.open_server_repository(repo = repo, just_reading = True)
def dep_check_cb(s):
return entropy.tools.isvalidatom(s)
def _show_dependencies_legend(indent = ''):
for dep_id, dep_val in sorted(etpConst['dependency_type_ids'].items(),
key = lambda x: x[0], reverse = True):
dep_desc = etpConst['dependency_type_ids_desc'].get(dep_id, _("N/A"))
txt = '%s%s%s%s %s' % (indent, teal("{"), dep_val+1, teal("}"), dep_desc,)
print_info(txt)
def _print_pkg_deps(atom, orig_deps, partial = False):
if not partial:
print_info(brown(" @@ ")+"%s: %s:" % (blue(atom),
darkgreen(_("package dependencies")),))
else:
print_generic("")
for dep_str, dep_id in orig_deps:
print_info("%s [%s: %s] %s" % (
brown(" #"), brown(_("type")),
darkgreen(str(dep_id+1)), purple(dep_str),))
if not orig_deps:
print_info("%s %s" % (brown(" # "), _("No dependencies"),))
else:
_show_dependencies_legend(" ")
if partial:
print_generic("")
avail_dep_type_desc = []
d_type_ids = etpConst['dependency_type_ids']
d_type_desc = etpConst['dependency_type_ids_desc']
for dep_val, dep_id in sorted(d_type_ids.items(), key = lambda x: x[1]):
avail_dep_type_desc.append(d_type_desc[dep_val])
def pkg_dep_types_cb(s):
try:
avail_dep_type_desc.index(s[1])
except IndexError:
return False
return True
for idpackage in idpackages:
atom = dbconn.retrieveAtom(idpackage)
orig_deps = dbconn.retrieveDependencies(idpackage, extended = True)
atom_deps = [x for x in orig_deps if x[1] != \
etpConst['dependency_type_ids']['mdepend_id']]
dep_type_map = dict(orig_deps)
atom_manual_deps = [x for x in orig_deps if x not in atom_deps]
print_info(brown(" @@ ")+"%s: %s:" % (blue(atom),
darkgreen(_("package dependencies")),))
for dep_str, dep_id in atom_deps:
print_info("%s [type:%s] %s" % (brown(" # "),
darkgreen(str(dep_id)), darkred(dep_str),))
if not atom_deps:
print_info("%s %s" % (brown(" # "), _("No dependencies"),))
def dep_check_cb(s):
print_info(brown(" @@ ")+"%s: %s:" % (blue(atom),
darkgreen(_("package manual dependencies")),))
for dep_str, dep_id in atom_manual_deps:
print_info("%s [type:%s] %s" % (brown(" # "),
darkgreen(str(dep_id)), purple(dep_str),))
if not atom_manual_deps:
print_info("%s %s" % (brown(" # "), _("No dependencies"),))
if not entropy.tools.isvalidatom(s):
return False
input_params = [
('dep_type', ('combo', (_("Dependency type"), avail_dep_type_desc),),
pkg_dep_types_cb, False)
]
data = Entropy.input_box(
("%s: %s" % (_('Select a dependency type for'), s,)),
input_params
)
if data is None:
return False
rc_dep_type = avail_dep_type_desc.index(data['dep_type'][1])
dep_type_map[s] = rc_dep_type
changes_made_type_map = {s: rc_dep_type}
_print_pkg_deps(atom, changes_made_type_map.items(),
partial = True)
return True
_print_pkg_deps(atom, orig_deps)
print_generic("")
current_mdeps = sorted([x[0] for x in atom_manual_deps])
current_deps = [x[0] for x in orig_deps]
input_params = [
('new_mdeps', ('list', ('Manual dependencies', current_mdeps),),
('new_deps', ('list', (_('Dependencies'), current_deps),),
dep_check_cb, True)
]
data = Entropy.input_box(_("Manual dependencies editor"), input_params)
data = Entropy.input_box(_("Dependencies editor"), input_params)
if data is None:
return 4
new_mdeps = sorted(data.get('new_mdeps', []))
if current_mdeps == new_mdeps:
print_info(brown(" @@ ")+blue("%s: %s" % (atom, _("no changes made"),) ))
new_deps = data.get('new_deps', [])
orig_deps = [(x, dep_type_map[x],) for x in new_deps]
insert_deps = dict(orig_deps)
_print_pkg_deps(atom, orig_deps)
rc_ask = Entropy.ask_question(_("Confirm ?"))
if rc_ask == _("No"):
continue
w_dbconn = Entropy.open_server_repository(repo = repo, read_only = False)
atom_deps += [(x, etpConst['dependency_type_ids']['mdepend_id'],) \
for x in new_mdeps]
deps_dict = {}
for atom_dep, dep_id in atom_deps:
deps_dict[atom_dep] = dep_id
w_dbconn = Entropy.open_server_repository(repo = repo,
read_only = False)
while True:
try:
w_dbconn.removeDependencies(idpackage)
w_dbconn.insertDependencies(idpackage, deps_dict)
w_dbconn.insertDependencies(idpackage, insert_deps)
w_dbconn.commitChanges()
except (KeyboardInterrupt, SystemExit,):
continue
break
print_info(brown(" @@ ")+"%s: %s" % (blue(atom),
darkgreen(_("manual dependencies added successfully")),))
darkgreen(_("dependencies updated successfully")),))
Entropy.close_server_databases()
return 0