[sys-apps/entropy] add some git patches to 0.99.3.1 (last that supports Python 2.5)

This commit is contained in:
Fabio Erculiani
2009-10-02 19:46:07 +02:00
parent 91a82abaef
commit 8b3830b671
3 changed files with 244 additions and 0 deletions
@@ -0,0 +1,44 @@
From 7973f22c095636ec2ebf829590d2cd9e41a21038 Mon Sep 17 00:00:00 2001
From: Fabio Erculiani <lxnay@sabayonlinux.org>
Date: Fri, 2 Oct 2009 19:29:32 +0200
Subject: [PATCH] [entropy.client.interfaces.dep] also check for branch and digest in calculate_world_updates
---
libraries/entropy/client/interfaces/dep.py | 23 +++++++++++++++++++++++
1 files changed, 23 insertions(+), 0 deletions(-)
--- a/libraries/entropy/client/interfaces/dep.py
+++ b/libraries/entropy/client/interfaces/dep.py
@@ -1794,6 +1794,29 @@ class CalculatorsMixin:
update.append((m_idpackage,repoid))
continue
else:
+
+ # Note: this is a bugfix to improve branch migration
+ # and really check if pkg has been repackaged and branch
+ # changed.
+ # first check branch
+ if idpackage is not None:
+
+ c_branch = self.clientDbconn.retrieveBranch(idpackage)
+ c_repodb = self.open_repository(repoid)
+ r_branch = c_repodb.retrieveBranch(m_idpackage)
+
+ if (c_branch != r_branch) and (c_branch is not None) \
+ and (r_branch is not None):
+
+ c_digest = self.clientDbconn.retrieveDigest(idpackage)
+ r_digest = c_repodb.retrieveDigest(m_idpackage)
+
+ if (r_digest != c_digest) and (r_digest is not None) \
+ and (c_digest is not None):
+ if (m_idpackage,repoid) not in update:
+ update.append((m_idpackage,repoid))
+ continue
+
# no difference
fine.append(cl_atom)
continue
--
1.6.3.3
@@ -0,0 +1,84 @@
From 8fedd189f902c290a106d42053c996d76623a3ba Mon Sep 17 00:00:00 2001
From: Fabio Erculiani <lxnay@sabayonlinux.org>
Date: Fri, 2 Oct 2009 19:16:47 +0200
Subject: [PATCH] [entropy.client.interfaces.dep] also pull in packages which version number matches the one installed but have been repackaged in reality
---
libraries/entropy/client/interfaces/dep.py | 28 ++++++++++++++++++++++++----
1 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/libraries/entropy/client/interfaces/dep.py b/libraries/entropy/client/interfaces/dep.py
index 064b12e..c0d26cd 100644
--- a/libraries/entropy/client/interfaces/dep.py
+++ b/libraries/entropy/client/interfaces/dep.py
@@ -524,6 +524,8 @@ class CalculatorsMixin:
open_repo = self.open_repository
intf_error = self.dbapi2.InterfaceError
cdb_getversioning = self.clientDbconn.getVersioningData
+ cdb_retrieveBranch = self.clientDbconn.retrieveBranch
+ cdb_retrieveDigest = self.clientDbconn.retrieveDigest
etp_cmp = self.entropyTools.entropy_compare_versions
etp_get_rev = self.entropyTools.dep_get_entropy_revision
@@ -577,7 +579,10 @@ class CalculatorsMixin:
dbconn = open_repo(r_repo)
try:
repo_pkgver, repo_pkgtag, repo_pkgrev = dbconn.getVersioningData(r_id)
- except (intf_error,TypeError,):
+ # note: read rationale below
+ repo_branch = dbconn.retrieveBranch(r_id)
+ repo_digest = dbconn.retrieveDigest(r_id)
+ except (intf_error, TypeError,):
# package entry is broken
const_debug_write(__name__,
"get_unsatisfied_dependencies repository entry broken for match => %s" % (
@@ -589,11 +594,17 @@ class CalculatorsMixin:
for c_id in c_ids:
try:
installedVer, installedTag, installedRev = cdb_getversioning(c_id)
+ # note: read rationale below
+ installedBranch = cdb_retrieveBranch(c_id)
+ installedDigest = cdb_retrieveDigest(c_id)
except TypeError: # corrupted entry?
installedVer = "0"
installedTag = ''
installedRev = 0
- client_data.add((installedVer, installedTag, installedRev,))
+ installedBranch = None
+ installedDigest = None
+ client_data.add((installedVer, installedTag, installedRev,
+ installedBranch, installedDigest,))
# support for app-foo/foo-123~-1
# -1 revision means, always pull the latest
@@ -605,16 +616,25 @@ class CalculatorsMixin:
# this is required for multi-slotted packages (like python)
# and when people mix Entropy and Portage
- for installedVer, installedTag, installedRev in client_data:
+ for installedVer, installedTag, installedRev, cbranch, cdigest in client_data:
+
vcmp = etp_cmp((repo_pkgver,repo_pkgtag,repo_pkgrev,),
(installedVer,installedTag,installedRev,))
- if vcmp == 0:
+
+ # check if both pkgs share the same branch and digest, this must
+ # be done to avoid system inconsistencies across branch upgrades
+ if (vcmp == 0) and (cbranch != repo_branch) and \
+ (cdigest != repo_digest):
+ vcmp = 1
+
+ if (vcmp == 0):
const_debug_write(__name__,
"get_unsatisfied_dependencies SATISFIED equals (not cached, deep: %s) => %s" % (
deep_deps, dependency,))
depcache[dependency] = 0
const_debug_write(__name__, "...")
return 0
+
ver_tag_repo = (repo_pkgver, repo_pkgtag,)
ver_tag_inst = (installedVer, installedTag,)
rev_match = repo_pkgrev != installedRev
--
1.6.3.3
@@ -0,0 +1,116 @@
From b78f7ef42ddd595b1ade969ce0a5959405257211 Mon Sep 17 00:00:00 2001
From: Fabio Erculiani <lxnay@sabayonlinux.org>
Date: Thu, 1 Oct 2009 21:09:59 +0200
Subject: [PATCH] [entropy.client] depresolver: prioritize system packages installation on depgraph
---
libraries/entropy/client/interfaces/dep.py | 62 +++++++++++++++++++++++++---
1 files changed, 56 insertions(+), 6 deletions(-)
diff --git a/libraries/entropy/client/interfaces/dep.py b/libraries/entropy/client/interfaces/dep.py
index 7ecba93..b80957f 100644
--- a/libraries/entropy/client/interfaces/dep.py
+++ b/libraries/entropy/client/interfaces/dep.py
@@ -1294,6 +1294,51 @@ class CalculatorsMixin:
return client_atoms
+ def __deptree_prioritize_systempkgs(self, deptree):
+
+
+ conflicts_key = 0
+ # save list of conflicts, actually at key 0
+ conflicts = deptree.get(conflicts_key, set()).copy()
+
+ system_tree = {}
+ normal_tree = {}
+ system_pkgs_cache = {}
+
+
+ for deplevel in deptree:
+
+ if deplevel == conflicts_key: # skip conflicts
+ continue
+
+ for idpackage, repoid in deptree[deplevel]:
+
+ if repoid not in system_pkgs_cache:
+ repodb = self.open_repository(repoid)
+ system_pkgs_cache[repoid] = repodb.getSystemPackages()
+
+ if idpackage in system_pkgs_cache[repoid]:
+ obj = system_tree.setdefault(deplevel, set())
+ obj.add((idpackage, repoid,))
+ else:
+ obj = normal_tree.setdefault(deplevel, set())
+ obj.add((idpackage, repoid,))
+
+ # now create new deptree
+ min_deplevel = conflicts_key
+ if system_tree:
+ min_deplevel = max(system_tree)
+
+ for deplevel in normal_tree:
+
+ # start from the next available
+ min_deplevel += 1
+ system_tree[min_deplevel] = normal_tree[deplevel]
+
+ # add conflicts back
+ system_tree[conflicts_key] = conflicts
+
+ return system_tree
def get_required_packages(self, matched_atoms, empty_deps = False, deep_deps = False, quiet = False):
@@ -1310,7 +1355,8 @@ class CalculatorsMixin:
)),)
if self.xcache:
cached = self.Cacher.pop(c_hash)
- if cached != None: return cached
+ if cached is not None:
+ return cached
deptree = {}
deptree[0] = set()
@@ -1343,7 +1389,8 @@ class CalculatorsMixin:
back = True, header = ":: ", footer = " ::",
percent = True, count = (count,atomlen))
- if matched_atom in matchfilter: continue
+ if matched_atom in matchfilter:
+ continue
newtree, result = self.generate_dependency_tree(
matched_atom, empty_deps, deep_deps,
matchfilter = matchfilter, filter_unsat_cache = filter_unsat_cache, treecache = treecache,
@@ -1357,7 +1404,7 @@ class CalculatorsMixin:
if result == -2: # deps not found
error_generated = -2
error_tree |= set(newtree) # it is a list, we convert it into set and update error_tree
- elif (result != 0):
+ elif result != 0:
return newtree, result
elif newtree:
# add conflicts
@@ -1369,12 +1416,15 @@ class CalculatorsMixin:
deptree[max_parent_key+levelcount] = newtree.get(mylevel)
if error_generated != 0:
- return error_tree,error_generated
+ return error_tree, error_generated
+
+ # now we need to move system packages at the top
+ deptree = self.__deptree_prioritize_systempkgs(deptree)
if self.xcache:
- self.Cacher.push(c_hash,(deptree,0))
+ self.Cacher.push(c_hash,(deptree, 0))
- return deptree,0
+ return deptree, 0
def _filter_depends_multimatched_atoms(self, idpackage, depends, monotree):
remove_depends = set()
--
1.6.3.3