1 |
Author: zmedico |
2 |
Date: 2008-06-28 04:20:53 +0000 (Sat, 28 Jun 2008) |
3 |
New Revision: 10827 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/__init__.py |
7 |
Log: |
8 |
Split out a BinpkgFetcher class. |
9 |
|
10 |
|
11 |
Modified: main/trunk/pym/_emerge/__init__.py |
12 |
=================================================================== |
13 |
--- main/trunk/pym/_emerge/__init__.py 2008-06-28 02:53:36 UTC (rev 10826) |
14 |
+++ main/trunk/pym/_emerge/__init__.py 2008-06-28 04:20:53 UTC (rev 10827) |
15 |
@@ -1451,6 +1451,66 @@ |
16 |
mydbapi=portdb, tree="porttree") |
17 |
return retval |
18 |
|
19 |
+class BinpkgFetcher(Task): |
20 |
+ |
21 |
+ __slots__ = ("use_locks", "pkg", "pretend", |
22 |
+ "pkg_path", "remote") |
23 |
+ |
24 |
+ def __init__(self, **kwargs): |
25 |
+ Task.__init__(self, **kwargs) |
26 |
+ pkg = self.pkg |
27 |
+ self.pkg_path = pkg.root_config.trees["bintree"].getname(pkg.cpv) |
28 |
+ |
29 |
+ def _get_hash_key(self): |
30 |
+ hash_key = getattr(self, "_hash_key", None) |
31 |
+ if hash_key is None: |
32 |
+ self._hash_key = ("BinpkgFetcher", self.ebuild._get_hash_key()) |
33 |
+ return self._hash_key |
34 |
+ |
35 |
+ def execute(self): |
36 |
+ tbz2_lock = None |
37 |
+ use_locks = self.use_locks |
38 |
+ pkg = self.pkg |
39 |
+ pretend = self.pretend |
40 |
+ bintree = pkg.root_config.trees["bintree"] |
41 |
+ pkgdir = bintree.pkgdir |
42 |
+ pkg_path = self.pkg_path |
43 |
+ rval = os.EX_OK |
44 |
+ |
45 |
+ try: |
46 |
+ try: |
47 |
+ if not pretend and use_locks and os.access(pkgdir, os.W_OK): |
48 |
+ portage.util.ensure_dirs(os.path.dirname(pkg_path)) |
49 |
+ tbz2_lock = portage.locks.lockfile(pkg_path, |
50 |
+ wantnewlockfile=1) |
51 |
+ if bintree.isremote(pkg.cpv): |
52 |
+ self.remote = True |
53 |
+ if not pretend: |
54 |
+ bintree.gettbz2(pkg.cpv) |
55 |
+ finally: |
56 |
+ if tbz2_lock is not None: |
57 |
+ portage.locks.unlockfile(tbz2_lock) |
58 |
+ except portage.exception.FileNotFound: |
59 |
+ writemsg("!!! Fetching Binary failed " + \ |
60 |
+ "for '%s'\n" % pkg.cpv, noiselevel=-1) |
61 |
+ rval = 1 |
62 |
+ except portage.exception.DigestException, e: |
63 |
+ writemsg("\n!!! Digest verification failed:\n", |
64 |
+ noiselevel=-1) |
65 |
+ writemsg("!!! %s\n" % e.value[0], |
66 |
+ noiselevel=-1) |
67 |
+ writemsg("!!! Reason: %s\n" % e.value[1], |
68 |
+ noiselevel=-1) |
69 |
+ writemsg("!!! Got: %s\n" % e.value[2], |
70 |
+ noiselevel=-1) |
71 |
+ writemsg("!!! Expected: %s\n" % e.value[3], |
72 |
+ noiselevel=-1) |
73 |
+ if not pretend: |
74 |
+ os.unlink(pkg_path) |
75 |
+ rval = 1 |
76 |
+ return rval |
77 |
+ |
78 |
+ |
79 |
class DependencyArg(object): |
80 |
def __init__(self, arg=None, root_config=None): |
81 |
self.arg = arg |
82 |
@@ -6412,48 +6472,23 @@ |
83 |
|
84 |
elif x[0]=="binary": |
85 |
#merge the tbz2 |
86 |
- mytbz2 = self.trees[myroot]["bintree"].getname(pkg_key) |
87 |
+ fetcher = BinpkgFetcher(pkg=pkg, pretend=pretend, |
88 |
+ use_locks=("distlocks" in pkgsettings.features)) |
89 |
+ mytbz2 = fetcher.pkg_path |
90 |
if "--getbinpkg" in self.myopts: |
91 |
- tbz2_lock = None |
92 |
- try: |
93 |
- if "distlocks" in pkgsettings.features and \ |
94 |
- os.access(pkgsettings["PKGDIR"], os.W_OK): |
95 |
- portage.util.ensure_dirs(os.path.dirname(mytbz2)) |
96 |
- tbz2_lock = portage.locks.lockfile(mytbz2, |
97 |
- wantnewlockfile=1) |
98 |
- if self.trees[myroot]["bintree"].isremote(pkg_key): |
99 |
- msg = " --- (%s of %s) Fetching Binary (%s::%s)" %\ |
100 |
- (mergecount, len(mymergelist), pkg_key, mytbz2) |
101 |
- short_msg = "emerge: (%s of %s) %s Fetch" % \ |
102 |
- (mergecount, len(mymergelist), pkg_key) |
103 |
- emergelog(xterm_titles, msg, short_msg=short_msg) |
104 |
- try: |
105 |
- self.trees[myroot]["bintree"].gettbz2(pkg_key) |
106 |
- except portage.exception.FileNotFound: |
107 |
- writemsg("!!! Fetching Binary failed " + \ |
108 |
- "for '%s'\n" % pkg_key, noiselevel=-1) |
109 |
- if not fetchonly: |
110 |
- raise self._pkg_failure() |
111 |
- failed_fetches.append(pkg_key) |
112 |
- except portage.exception.DigestException, e: |
113 |
- writemsg("\n!!! Digest verification failed:\n", |
114 |
- noiselevel=-1) |
115 |
- writemsg("!!! %s\n" % e.value[0], |
116 |
- noiselevel=-1) |
117 |
- writemsg("!!! Reason: %s\n" % e.value[1], |
118 |
- noiselevel=-1) |
119 |
- writemsg("!!! Got: %s\n" % e.value[2], |
120 |
- noiselevel=-1) |
121 |
- writemsg("!!! Expected: %s\n" % e.value[3], |
122 |
- noiselevel=-1) |
123 |
- os.unlink(mytbz2) |
124 |
- if not fetchonly: |
125 |
- raise self._pkg_failure() |
126 |
- failed_fetches.append(pkg_key) |
127 |
- finally: |
128 |
- if tbz2_lock: |
129 |
- portage.locks.unlockfile(tbz2_lock) |
130 |
+ retval = fetcher.execute() |
131 |
+ if fetcher.remote: |
132 |
+ msg = " --- (%s of %s) Fetching Binary (%s::%s)" %\ |
133 |
+ (mergecount, len(mymergelist), pkg_key, mytbz2) |
134 |
+ short_msg = "emerge: (%s of %s) %s Fetch" % \ |
135 |
+ (mergecount, len(mymergelist), pkg_key) |
136 |
+ emergelog(xterm_titles, msg, short_msg=short_msg) |
137 |
|
138 |
+ if retval != os.EX_OK: |
139 |
+ failed_fetches.append(pkg.cpv) |
140 |
+ if not fetchonly: |
141 |
+ raise self._pkg_failure() |
142 |
+ |
143 |
if "--fetchonly" in self.myopts or \ |
144 |
"--fetch-all-uri" in self.myopts: |
145 |
self.curval += 1 |
146 |
|
147 |
-- |
148 |
gentoo-commits@l.g.o mailing list |