1 |
commit: 8f102b8a531973df8bb1239f9a054386e0b9aead |
2 |
Author: Alexander Bersenev <bay <AT> hackerdom <DOT> ru> |
3 |
AuthorDate: Sat Sep 24 01:50:12 2011 +0000 |
4 |
Commit: Александр Берсенев <bay <AT> hackerdom <DOT> ru> |
5 |
CommitDate: Sat Sep 24 01:50:12 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/autodep.git;a=commit;h=8f102b8a |
7 |
|
8 |
python3 fixes and indenting |
9 |
|
10 |
--- |
11 |
src/autodep/autodep | 702 ++++++++++++++-------------- |
12 |
src/autodep/logfs/logger_hooklib.py | 2 +- |
13 |
src/autodep/package_utils/portage_utils.py | 20 +- |
14 |
3 files changed, 367 insertions(+), 357 deletions(-) |
15 |
|
16 |
diff --git a/src/autodep/autodep b/src/autodep/autodep |
17 |
index 8d22e00..c0b9172 100755 |
18 |
--- a/src/autodep/autodep |
19 |
+++ b/src/autodep/autodep |
20 |
@@ -11,190 +11,190 @@ from helpers import colorize_output, events_analysis |
21 |
from package_utils import portage_utils, portage_misc_functions, portage_log_parser |
22 |
|
23 |
def parse_args(): |
24 |
- """ |
25 |
- This function parses an input args |
26 |
- It dies if bad args passed |
27 |
- """ |
28 |
- |
29 |
- args_parser=optparse.OptionParser("%prog [options] <command>") |
30 |
- args_parser.add_option("-b","--block",action="store_true", |
31 |
- dest="strict_block", default="", |
32 |
- help="strict mode: Deny all access to files from non-dependency packages.") |
33 |
- args_parser.add_option("--blockpkgs",action="store", type="string", |
34 |
- dest="packages", default="", |
35 |
- help="Block access to files from these packages.") |
36 |
- args_parser.add_option("-f","--files", action="store_true", dest="show_files", |
37 |
- default=False, help="Show all files, accessed and missing ( not founded).") |
38 |
- args_parser.add_option("-v","--verbose", action="store_true", dest="verbose", |
39 |
- default=False, help="Show non-important packages, " |
40 |
- "unknown package and unknown stage") |
41 |
- args_parser.add_option("-n","--numfiles",action="store", type="int", |
42 |
- dest="numfiles", |
43 |
- default=10, |
44 |
- help="Maximum number of files from each package to show (default is 10)") |
45 |
- args_parser.add_option("-C","--nocolor",action="store_true", dest="nocolor", |
46 |
- default=False, help="Don't colorize output") |
47 |
- |
48 |
- args_parser.add_option("--hooklib",action="store_const", dest="approach", |
49 |
- const="hooklib", help="Use ld_preload logging approach (default)") |
50 |
- args_parser.add_option("--fusefs",action="store_const", dest="approach", |
51 |
- const="fusefs", help="Use FUSE logging approach (slow, but reliable)") |
52 |
- args_parser.set_defaults(approach="hooklib") |
53 |
- |
54 |
- args_parser.epilog="Example: %s -blockpkgs lsof,cowsay emerge bash" % ( |
55 |
- os.path.basename(sys.argv[0])) |
56 |
- args_parser.disable_interspersed_args() |
57 |
- (options, args) = args_parser.parse_args() |
58 |
- if len(args)==0: |
59 |
- args_parser.print_help() |
60 |
- exit(1) |
61 |
- |
62 |
- return options,args |
63 |
+ """ |
64 |
+ This function parses an input args |
65 |
+ It dies if bad args passed |
66 |
+ """ |
67 |
+ |
68 |
+ args_parser=optparse.OptionParser("%prog [options] <command>") |
69 |
+ args_parser.add_option("-b","--block",action="store_true", |
70 |
+ dest="strict_block", default="", |
71 |
+ help="strict mode: Deny all access to files from non-dependency packages.") |
72 |
+ args_parser.add_option("--blockpkgs",action="store", type="string", |
73 |
+ dest="packages", default="", |
74 |
+ help="Block access to files from these packages.") |
75 |
+ args_parser.add_option("-f","--files", action="store_true", dest="show_files", |
76 |
+ default=False, help="Show all files, accessed and missing ( not founded).") |
77 |
+ args_parser.add_option("-v","--verbose", action="store_true", dest="verbose", |
78 |
+ default=False, help="Show non-important packages, " |
79 |
+ "unknown package and unknown stage") |
80 |
+ args_parser.add_option("-n","--numfiles",action="store", type="int", |
81 |
+ dest="numfiles", |
82 |
+ default=10, |
83 |
+ help="Maximum number of files from each package to show (default is 10)") |
84 |
+ args_parser.add_option("-C","--nocolor",action="store_true", dest="nocolor", |
85 |
+ default=False, help="Don't colorize output") |
86 |
+ |
87 |
+ args_parser.add_option("--hooklib",action="store_const", dest="approach", |
88 |
+ const="hooklib", help="Use ld_preload logging approach (default)") |
89 |
+ args_parser.add_option("--fusefs",action="store_const", dest="approach", |
90 |
+ const="fusefs", help="Use FUSE logging approach (slow, but reliable)") |
91 |
+ args_parser.set_defaults(approach="hooklib") |
92 |
+ |
93 |
+ args_parser.epilog="Example: %s -blockpkgs lsof,cowsay emerge bash" % ( |
94 |
+ os.path.basename(sys.argv[0])) |
95 |
+ args_parser.disable_interspersed_args() |
96 |
+ (options, args) = args_parser.parse_args() |
97 |
+ if len(args)==0: |
98 |
+ args_parser.print_help() |
99 |
+ exit(1) |
100 |
+ |
101 |
+ return options,args |
102 |
|
103 |
def init_environment(): |
104 |
- portage_api=portage_misc_functions.portage_api() |
105 |
- system_packages = portage_api.get_system_packages_list() |
106 |
- system_deps = portage_api.get_system_packages_rdeps() |
107 |
+ portage_api=portage_misc_functions.portage_api() |
108 |
+ system_packages = portage_api.get_system_packages_list() |
109 |
+ system_deps = portage_api.get_system_packages_rdeps() |
110 |
|
111 |
- return portage_api, system_packages, system_deps |
112 |
+ return portage_api, system_packages, system_deps |
113 |
|
114 |
def init_runtime_vars(portage_api, options,args): |
115 |
- runtime_vars={} # This is here mainly for grouping. We are trying to |
116 |
- # get as much data about an environment as possible |
117 |
- |
118 |
- runtime_vars["starttime"]=int(time.time()) |
119 |
- |
120 |
- # trivial check for emerge proccess |
121 |
- if os.path.basename(args[0])=="emerge": |
122 |
- runtime_vars["is_emerge"]=True |
123 |
- emergeaction ,emergeopts, emergefiles=portage_api.parse_emerge_args(args[1:]) |
124 |
- runtime_vars["raw_emerge_parameters"]=args[1:] |
125 |
- runtime_vars["emerge_parameters"]=(emergeaction ,emergeopts, emergefiles) |
126 |
- runtime_vars["mergelist"]=portage_api.get_merge_list( |
127 |
- runtime_vars["raw_emerge_parameters"]) |
128 |
- |
129 |
- if len(emergefiles)>1: |
130 |
- print "Please, install packages one by one to get more accurate reports" |
131 |
- |
132 |
- if len(runtime_vars["mergelist"])==0: |
133 |
- print "No packages will be installed or there is an error with counting" |
134 |
- |
135 |
- else: |
136 |
- runtime_vars["is_emerge"]=False |
137 |
- runtime_vars["deps_all"]=[] |
138 |
- |
139 |
- # find a full path to the program |
140 |
- program_path=None |
141 |
- program_name=args[0] |
142 |
- def is_exe(fpath): |
143 |
- return os.path.isfile(fpath) and os.access(fpath, os.X_OK) |
144 |
- |
145 |
- fpath, fname = os.path.split(program_name) |
146 |
- if fpath: |
147 |
- if is_exe(program_name): |
148 |
- program_path=program_name |
149 |
+ runtime_vars={} # This is here mainly for grouping. We are trying to |
150 |
+ # get as much data about an environment as possible |
151 |
+ |
152 |
+ runtime_vars["starttime"]=int(time.time()) |
153 |
+ |
154 |
+ # trivial check for emerge proccess |
155 |
+ if os.path.basename(args[0])=="emerge": |
156 |
+ runtime_vars["is_emerge"]=True |
157 |
+ emergeaction ,emergeopts, emergefiles=portage_api.parse_emerge_args(args[1:]) |
158 |
+ runtime_vars["raw_emerge_parameters"]=args[1:] |
159 |
+ runtime_vars["emerge_parameters"]=(emergeaction ,emergeopts, emergefiles) |
160 |
+ runtime_vars["mergelist"]=portage_api.get_merge_list( |
161 |
+ runtime_vars["raw_emerge_parameters"]) |
162 |
+ |
163 |
+ if len(emergefiles)>1: |
164 |
+ print("Please, install packages one by one to get more accurate reports") |
165 |
+ |
166 |
+ if len(runtime_vars["mergelist"])==0: |
167 |
+ print("No packages will be installed or there is an error with counting") |
168 |
+ |
169 |
else: |
170 |
- for path in os.environ["PATH"].split(os.pathsep): |
171 |
- exe_file = os.path.join(path, program_name) |
172 |
- if is_exe(exe_file): |
173 |
- program_path=exe_file |
174 |
- |
175 |
- if program_path==None: |
176 |
- print("Failed to find the program %s. Check its existance." |
177 |
- % program_name) |
178 |
- exit(1) |
179 |
+ runtime_vars["is_emerge"]=False |
180 |
+ runtime_vars["deps_all"]=[] |
181 |
+ |
182 |
+ # find a full path to the program |
183 |
+ program_path=None |
184 |
+ program_name=args[0] |
185 |
+ def is_exe(fpath): |
186 |
+ return os.path.isfile(fpath) and os.access(fpath, os.X_OK) |
187 |
+ |
188 |
+ fpath, fname = os.path.split(program_name) |
189 |
+ if fpath: |
190 |
+ if is_exe(program_name): |
191 |
+ program_path=program_name |
192 |
+ else: |
193 |
+ for path in os.environ["PATH"].split(os.pathsep): |
194 |
+ exe_file = os.path.join(path, program_name) |
195 |
+ if is_exe(exe_file): |
196 |
+ program_path=exe_file |
197 |
+ |
198 |
+ if program_path==None: |
199 |
+ print("Failed to find the program %s. Check its existance." |
200 |
+ % program_name) |
201 |
+ exit(1) |
202 |
|
203 |
- runtime_vars["full_path"]=program_path |
204 |
+ runtime_vars["full_path"]=program_path |
205 |
|
206 |
|
207 |
- return runtime_vars |
208 |
+ return runtime_vars |
209 |
|
210 |
def get_filter_function(options,args,system_packages,system_deps,portage_api): |
211 |
- # handling --block |
212 |
- # exits if package name is bad |
213 |
- if not options.packages and not options.strict_block: |
214 |
- return lambda eventname,filename,stage: True |
215 |
- elif not options.strict_block and options.packages: |
216 |
- packages=options.packages.split(",") |
217 |
- files_to_block=[] |
218 |
- for package in packages: |
219 |
- files_in_package=portage_utils.getfilesbypackage(package) |
220 |
- if len(files_in_package)==0: |
221 |
- print "Bad package name: %s. Exiting" % package |
222 |
- exit(1) |
223 |
- files_to_block+=files_in_package |
224 |
- files_to_block={}.fromkeys(files_to_block) |
225 |
- # new filter function |
226 |
- def filter(eventname,filename,stage): |
227 |
- return not filename in files_to_block |
228 |
- return filter |
229 |
- #elif options.strict_block and options.packages: |
230 |
- #print "You can't use --block and --blockpkgs options togeter\n" |
231 |
- #exit(1) |
232 |
- elif options.strict_block: # this option is very strict |
233 |
- # because blocking logic is complex |
234 |
- |
235 |
- print "Building a list of files to block. This may take some time" |
236 |
- # we get list of all files and substract list of allowed files from it |
237 |
- allfiles=portage_utils.get_all_packages_files() |
238 |
- allowedpkgs=[] |
239 |
- allowedpkgs+=system_packages |
240 |
- allowedpkgs+=system_deps |
241 |
- |
242 |
- if runtime_vars["is_emerge"]: # blocking logic for emerge |
243 |
- print "Notice: you can use emerge_strict command instead of autodep emerge." |
244 |
- print "Using this command allows to build any number of a packages.\n" |
245 |
- |
246 |
- # including all dependencies of portage |
247 |
- allowedpkgs+=list(portage_api.get_dep("portage",["RDEPEND"])) |
248 |
- (emergeaction ,emergeopts, emergefiles)=runtime_vars["emerge_parameters"] |
249 |
- if len(emergefiles)>1: |
250 |
- print "You can't install several packages with option -b" |
251 |
- exit(1) |
252 |
- if len(runtime_vars["mergelist"])!=1: |
253 |
- print "You can't install several packages with option -b." |
254 |
- print "Emerge tried to install several packages: %s. " % runtime_vars["mergelist"] |
255 |
- print "You can force emerge to merge a package without any other "\ |
256 |
- "packages with emerge --nodeps option or you can install these "\ |
257 |
- "packages first" |
258 |
- |
259 |
- exit(1) |
260 |
- pkg=runtime_vars["mergelist"][0] |
261 |
- depslist=list(portage_api.get_deps_for_package_building(pkg)) |
262 |
- allowedpkgs+=depslist |
263 |
- # manually add all python interpreters to this list |
264 |
- allowedpkgs+=["dev-lang/python"] |
265 |
- else: |
266 |
- program_path=runtime_vars["full_path"] |
267 |
- file_to_package=portage_utils.getpackagesbyfiles([program_path]) |
268 |
- if program_path not in file_to_package: |
269 |
- print "Failed to find a package for %s" % program_path |
270 |
- else: |
271 |
- allowedpkgs+=[file_to_package[program_path]] |
272 |
- depslist=list( |
273 |
- portage_api.get_deps(file_to_package[program_path],["RDEPEND"])) |
274 |
- allowedpkgs+=depslist |
275 |
+ # handling --block |
276 |
+ # exits if package name is bad |
277 |
+ if not options.packages and not options.strict_block: |
278 |
+ return lambda eventname,filename,stage: True |
279 |
+ elif not options.strict_block and options.packages: |
280 |
+ packages=options.packages.split(",") |
281 |
+ files_to_block=[] |
282 |
+ for package in packages: |
283 |
+ files_in_package=portage_utils.getfilesbypackage(package) |
284 |
+ if len(files_in_package)==0: |
285 |
+ print("Bad package name: %s. Exiting" % package) |
286 |
+ exit(1) |
287 |
+ files_to_block+=files_in_package |
288 |
+ files_to_block={}.fromkeys(files_to_block) |
289 |
+ # new filter function |
290 |
+ def filter(eventname,filename,stage): |
291 |
+ return not filename in files_to_block |
292 |
+ return filter |
293 |
+ #elif options.strict_block and options.packages: |
294 |
+ #print "You can't use --block and --blockpkgs options togeter\n" |
295 |
+ #exit(1) |
296 |
+ elif options.strict_block: # this option is very strict |
297 |
+ # because blocking logic is complex |
298 |
+ |
299 |
+ print("Building a list of files to block. This may take some time") |
300 |
+ # we get list of all files and substract list of allowed files from it |
301 |
+ allfiles=portage_utils.get_all_packages_files() |
302 |
+ allowedpkgs=[] |
303 |
+ allowedpkgs+=system_packages |
304 |
+ allowedpkgs+=system_deps |
305 |
|
306 |
- # Do not forget to add self |
307 |
- allowedpkgs+=["app-portage/autodep"] |
308 |
- # remember the allowedpkgs in deps_all. It is bad to do it here. |
309 |
- runtime_vars["deps_all"]=allowedpkgs |
310 |
- |
311 |
- allowedfiles=[] |
312 |
- for pkg in allowedpkgs: |
313 |
- allowedfiles+=portage_utils.getfilesbypackage(pkg) |
314 |
- |
315 |
- allowedfiles=set(allowedfiles) |
316 |
- |
317 |
- deniedfiles=allfiles-allowedfiles |
318 |
- |
319 |
- print "The list size is about %dM" % (int(sys.getsizeof(deniedfiles))/1024/1024) |
320 |
- def filter(eventname,filename,stage): |
321 |
- if filename in deniedfiles: |
322 |
- return False |
323 |
- return True |
324 |
- return filter |
325 |
+ if runtime_vars["is_emerge"]: # blocking logic for emerge |
326 |
+ print("Notice: you can use emerge_strict command instead of autodep emerge.") |
327 |
+ print("Using this command allows to build any number of a packages.\n") |
328 |
+ |
329 |
+ # including all dependencies of portage |
330 |
+ allowedpkgs+=list(portage_api.get_dep("portage",["RDEPEND"])) |
331 |
+ (emergeaction ,emergeopts, emergefiles)=runtime_vars["emerge_parameters"] |
332 |
+ if len(emergefiles)>1: |
333 |
+ print("You can't install several packages with option -b") |
334 |
+ exit(1) |
335 |
+ if len(runtime_vars["mergelist"])!=1: |
336 |
+ print("You can't install several packages with option -b.") |
337 |
+ print("Emerge tried to install several packages: %s. " % runtime_vars["mergelist"]) |
338 |
+ print("You can force emerge to merge a package without any other "\ |
339 |
+ "packages with emerge --nodeps option or you can install these "\ |
340 |
+ "packages first") |
341 |
+ |
342 |
+ exit(1) |
343 |
+ pkg=runtime_vars["mergelist"][0] |
344 |
+ depslist=list(portage_api.get_deps_for_package_building(pkg)) |
345 |
+ allowedpkgs+=depslist |
346 |
+ # manually add all python interpreters to this list |
347 |
+ allowedpkgs+=["dev-lang/python"] |
348 |
+ else: |
349 |
+ program_path=runtime_vars["full_path"] |
350 |
+ file_to_package=portage_utils.getpackagesbyfiles([program_path]) |
351 |
+ if program_path not in file_to_package: |
352 |
+ print("Failed to find a package for %s" % program_path) |
353 |
+ else: |
354 |
+ allowedpkgs+=[file_to_package[program_path]] |
355 |
+ depslist=list( |
356 |
+ portage_api.get_deps(file_to_package[program_path],["RDEPEND"])) |
357 |
+ allowedpkgs+=depslist |
358 |
+ |
359 |
+ # Do not forget to add self |
360 |
+ allowedpkgs+=["app-portage/autodep"] |
361 |
+ # remember the allowedpkgs in deps_all. It is bad to do it here. |
362 |
+ runtime_vars["deps_all"]=allowedpkgs |
363 |
+ |
364 |
+ allowedfiles=[] |
365 |
+ for pkg in allowedpkgs: |
366 |
+ allowedfiles+=portage_utils.getfilesbypackage(pkg) |
367 |
|
368 |
+ allowedfiles=set(allowedfiles) |
369 |
+ |
370 |
+ deniedfiles=allfiles-allowedfiles |
371 |
+ |
372 |
+ print("The list size is about %dM" % (int(sys.getsizeof(deniedfiles))/1024/1024)) |
373 |
+ def filter(eventname,filename,stage): |
374 |
+ if filename in deniedfiles: |
375 |
+ return False |
376 |
+ return True |
377 |
+ return filter |
378 |
+ |
379 |
portage_api, system_packages, system_deps=init_environment() |
380 |
options,args=parse_args() |
381 |
runtime_vars=init_runtime_vars(portage_api,options,args) |
382 |
@@ -206,57 +206,57 @@ filter_function=get_filter_function(options,args,system_packages,system_deps,por |
383 |
# launching program |
384 |
events=logfs.fstracer.getfsevents(args[0], args,approach=options.approach,filterproc=filter_function) |
385 |
runtime_vars["endtime"]=int(time.time()) |
386 |
-print "Program finished, analyzing dependencies" |
387 |
+print("Program finished, analyzing dependencies") |
388 |
|
389 |
if runtime_vars["is_emerge"]: |
390 |
- # try to get information about packages merged sucessfully |
391 |
- #try: |
392 |
- runtime_vars["deps_all"]=set([]) |
393 |
- runtime_vars["deps_buildtime"]=set([]) |
394 |
- for pkg in runtime_vars["mergelist"]: |
395 |
- runtime_vars["deps_all"]=runtime_vars["deps_all"].union( |
396 |
- portage_api.get_deps_for_package_building(pkg)) |
397 |
- runtime_vars["deps_buildtime"]=runtime_vars["deps_buildtime"].union( |
398 |
- portage_api.get_dep(pkg,["DEPEND"])) |
399 |
- |
400 |
- runtime_vars["deps_portage"]=portage_api.get_dep('portage',["RDEPEND"]) |
401 |
+ # try to get information about packages merged sucessfully |
402 |
+ #try: |
403 |
+ runtime_vars["deps_all"]=set([]) |
404 |
+ runtime_vars["deps_buildtime"]=set([]) |
405 |
+ for pkg in runtime_vars["mergelist"]: |
406 |
+ runtime_vars["deps_all"]=runtime_vars["deps_all"].union( |
407 |
+ portage_api.get_deps_for_package_building(pkg)) |
408 |
+ runtime_vars["deps_buildtime"]=runtime_vars["deps_buildtime"].union( |
409 |
+ portage_api.get_dep(pkg,["DEPEND"])) |
410 |
+ |
411 |
+ runtime_vars["deps_portage"]=portage_api.get_dep('portage',["RDEPEND"]) |
412 |
else: |
413 |
- if runtime_vars["deps_all"]==[]: |
414 |
- # we mostly repeating block logic here |
415 |
- program_path=runtime_vars["full_path"] |
416 |
- file_to_package=portage_utils.getpackagesbyfiles([program_path]) |
417 |
- if program_path not in file_to_package: |
418 |
- print "Failed to find a package for %s" % program_path |
419 |
- else: |
420 |
- depslist=[file_to_package[program_path]]+list( |
421 |
- portage_api.get_deps(file_to_package[program_path],["RDEPEND"])) |
422 |
- runtime_vars["deps_all"]=depslist |
423 |
- |
424 |
- #pkgs=portage_log_parser.get_list_of_merged_packages( |
425 |
- # runtime_vars["starttime"],runtime_vars["endtime"] |
426 |
- # ) |
427 |
- #if len(pkgs) > 1: |
428 |
- # print "Several packages were installed. The report will be inaccurate" |
429 |
- #elif len(pkgs)==0: |
430 |
- # print "None packages have been installed sucessfully. The report will be inaccurate" |
431 |
- #runtime_vars["pkgs_installed"]=pkgs |
432 |
- #runtime_vars["deps_buildtime"]=[] |
433 |
- #runtime_vars["deps_all"]=[] |
434 |
- #for pkg in pkgs: |
435 |
- # runtime_vars["deps_buildtime"]+=portage_api.get_deps(pkg,["DEPEND"]) |
436 |
- # runtime_vars["deps_all"]+=portage_api.get_deps(pkg,["DEPEND","RDEPEND"]) |
437 |
- #except: |
438 |
- #print "Non-critical error while parsing logfile of emerge" |
439 |
- #runtime_vars["is_emerge"]=False # shutting down all emerge handling logic |
440 |
- #pass |
441 |
+ if runtime_vars["deps_all"]==[]: |
442 |
+ # we mostly repeating block logic here |
443 |
+ program_path=runtime_vars["full_path"] |
444 |
+ file_to_package=portage_utils.getpackagesbyfiles([program_path]) |
445 |
+ if program_path not in file_to_package: |
446 |
+ print("Failed to find a package for %s" % program_path) |
447 |
+ else: |
448 |
+ depslist=[file_to_package[program_path]]+list( |
449 |
+ portage_api.get_deps(file_to_package[program_path],["RDEPEND"])) |
450 |
+ runtime_vars["deps_all"]=depslist |
451 |
+ |
452 |
+ #pkgs=portage_log_parser.get_list_of_merged_packages( |
453 |
+ # runtime_vars["starttime"],runtime_vars["endtime"] |
454 |
+ # ) |
455 |
+ #if len(pkgs) > 1: |
456 |
+ # print "Several packages were installed. The report will be inaccurate" |
457 |
+ #elif len(pkgs)==0: |
458 |
+ # print "None packages have been installed sucessfully. The report will be inaccurate" |
459 |
+ #runtime_vars["pkgs_installed"]=pkgs |
460 |
+ #runtime_vars["deps_buildtime"]=[] |
461 |
+ #runtime_vars["deps_all"]=[] |
462 |
+ #for pkg in pkgs: |
463 |
+ # runtime_vars["deps_buildtime"]+=portage_api.get_deps(pkg,["DEPEND"]) |
464 |
+ # runtime_vars["deps_all"]+=portage_api.get_deps(pkg,["DEPEND","RDEPEND"]) |
465 |
+ #except: |
466 |
+ #print "Non-critical error while parsing logfile of emerge" |
467 |
+ #runtime_vars["is_emerge"]=False # shutting down all emerge handling logic |
468 |
+ #pass |
469 |
|
470 |
# get unique filenames |
471 |
filenames=set() |
472 |
for stage in events: |
473 |
- succ_events=set(events[stage][0]) |
474 |
- fail_events=set(events[stage][1]) |
475 |
- filenames=filenames.union(succ_events) |
476 |
- filenames=filenames.union(fail_events) |
477 |
+ succ_events=set(events[stage][0]) |
478 |
+ fail_events=set(events[stage][1]) |
479 |
+ filenames=filenames.union(succ_events) |
480 |
+ filenames=filenames.union(fail_events) |
481 |
filenames=list(filenames) |
482 |
|
483 |
file_to_package=portage_utils.getpackagesbyfiles(filenames) |
484 |
@@ -270,41 +270,41 @@ file_to_package=portage_utils.getpackagesbyfiles(filenames) |
485 |
packagesinfo={} |
486 |
|
487 |
for stage in sorted(events): |
488 |
- succ_events=events[stage][0] |
489 |
- fail_events=events[stage][1] |
490 |
- |
491 |
- for filename in succ_events: |
492 |
- if filename in file_to_package: |
493 |
- package=file_to_package[filename] |
494 |
- else: |
495 |
- package="unknown" |
496 |
- |
497 |
- if not package in packagesinfo: |
498 |
- packagesinfo[package]={} |
499 |
- stageinfo=packagesinfo[package] |
500 |
- if not stage in stageinfo: |
501 |
- stageinfo[stage]={} |
502 |
- |
503 |
- filesinfo=stageinfo[stage] |
504 |
- if not filename in filesinfo: |
505 |
- filesinfo[filename]={"found":[],"notfound":[]} |
506 |
- filesinfo[filename]["found"]=succ_events[filename] |
507 |
+ succ_events=events[stage][0] |
508 |
+ fail_events=events[stage][1] |
509 |
|
510 |
- for filename in fail_events: |
511 |
- if filename in file_to_package: |
512 |
- package=file_to_package[filename] |
513 |
- else: |
514 |
- package="unknown" |
515 |
- if not package in packagesinfo: |
516 |
- packagesinfo[package]={} |
517 |
- stageinfo=packagesinfo[package] |
518 |
- if not stage in stageinfo: |
519 |
- stageinfo[stage]={} |
520 |
+ for filename in succ_events: |
521 |
+ if filename in file_to_package: |
522 |
+ package=file_to_package[filename] |
523 |
+ else: |
524 |
+ package="unknown" |
525 |
+ |
526 |
+ if not package in packagesinfo: |
527 |
+ packagesinfo[package]={} |
528 |
+ stageinfo=packagesinfo[package] |
529 |
+ if not stage in stageinfo: |
530 |
+ stageinfo[stage]={} |
531 |
+ |
532 |
+ filesinfo=stageinfo[stage] |
533 |
+ if not filename in filesinfo: |
534 |
+ filesinfo[filename]={"found":[],"notfound":[]} |
535 |
+ filesinfo[filename]["found"]=succ_events[filename] |
536 |
|
537 |
- filesinfo=stageinfo[stage] |
538 |
- if not filename in filesinfo: |
539 |
- filesinfo[filename]={"found":[],"notfound":[]} |
540 |
- filesinfo[filename]["notfound"]=fail_events[filename] |
541 |
+ for filename in fail_events: |
542 |
+ if filename in file_to_package: |
543 |
+ package=file_to_package[filename] |
544 |
+ else: |
545 |
+ package="unknown" |
546 |
+ if not package in packagesinfo: |
547 |
+ packagesinfo[package]={} |
548 |
+ stageinfo=packagesinfo[package] |
549 |
+ if not stage in stageinfo: |
550 |
+ stageinfo[stage]={} |
551 |
+ |
552 |
+ filesinfo=stageinfo[stage] |
553 |
+ if not filename in filesinfo: |
554 |
+ filesinfo[filename]={"found":[],"notfound":[]} |
555 |
+ filesinfo[filename]["notfound"]=fail_events[filename] |
556 |
|
557 |
# generating output |
558 |
stagesorder={"clean":1,"setup":2,"unpack":3,"prepare":4,"configure":5,"compile":6,"test":7, |
559 |
@@ -312,113 +312,113 @@ stagesorder={"clean":1,"setup":2,"unpack":3,"prepare":4,"configure":5,"compile": |
560 |
|
561 |
# print information grouped by package |
562 |
for package in sorted(packagesinfo): |
563 |
- # not showing special directory package |
564 |
- if package=="directory": |
565 |
- continue |
566 |
- |
567 |
- if package=="unknown" and not options.verbose: |
568 |
- continue |
569 |
- |
570 |
- |
571 |
- is_pkg_in_dep=package in runtime_vars["deps_all"] |
572 |
- is_pkg_in_system=package in system_packages |
573 |
- is_pkg_in_system_deps=package in system_deps |
574 |
- |
575 |
- is_pkg_in_portage_dep=runtime_vars["is_emerge"] and package in runtime_vars["deps_portage"] |
576 |
- is_pkg_self="app-portage/autodep" in package |
577 |
- is_pkg_python="dev-lang/python" in package |
578 |
- |
579 |
- stages=[] |
580 |
- for stage in sorted(packagesinfo[package].keys(), key=stagesorder.get): |
581 |
- if stage!="unknown" or options.verbose or not runtime_vars["is_emerge"]: |
582 |
- stages.append(stage) |
583 |
+ # not showing special directory package |
584 |
+ if package=="directory": |
585 |
+ continue |
586 |
+ |
587 |
+ if package=="unknown" and not options.verbose: |
588 |
+ continue |
589 |
|
590 |
- if len(stages)!=0: |
591 |
- filenames={} |
592 |
- for stage in stages: |
593 |
- for filename in packagesinfo[package][stage]: |
594 |
- if len(packagesinfo[package][stage][filename]["found"])!=0: |
595 |
- was_readed,was_writed=packagesinfo[package][stage][filename]["found"] |
596 |
- if not filename in filenames: |
597 |
- filenames[filename]=['ok',was_readed,was_writed] |
598 |
- else: |
599 |
- status, old_was_readed, old_was_writed=filenames[filename] |
600 |
- filenames[filename]=[ |
601 |
- 'ok',old_was_readed | was_readed, old_was_writed | was_writed |
602 |
- ] |
603 |
- if len(packagesinfo[package][stage][filename]["notfound"])!=0: |
604 |
- was_notfound,was_blocked=packagesinfo[package][stage][filename]["notfound"] |
605 |
- if not filename in filenames: |
606 |
- filenames[filename]=['err',was_notfound,was_blocked] |
607 |
- else: |
608 |
- status, old_was_notfound, old_was_blocked=filenames[filename] |
609 |
- filenames[filename]=[ |
610 |
- 'err',old_was_notfound | was_notfound, old_was_blocked | was_blocked |
611 |
- ] |
612 |
- |
613 |
|
614 |
- if is_pkg_in_dep: |
615 |
- color_printer.printmsg("text","[OK]") |
616 |
- elif is_pkg_in_system: |
617 |
- color_printer.printmsg("text","[SYSTEM]") |
618 |
- elif is_pkg_in_portage_dep: |
619 |
- color_printer.printmsg("text","[PORTAGE DEP]") |
620 |
- elif is_pkg_in_system_deps: |
621 |
- color_printer.printmsg("text","[SYSTEM DEP]") |
622 |
- elif is_pkg_self: |
623 |
- color_printer.printmsg("text","[AUTODEP]") |
624 |
- elif is_pkg_python: |
625 |
- color_printer.printmsg("text","[INTERPRETER]") |
626 |
- elif not events_analysis.is_package_useful(package,stages,filenames.keys()): |
627 |
- color_printer.printmsg("text","[LIKELY OK]") |
628 |
- else: |
629 |
- color_printer.printmsg("warning","[NOT IN DEPS]") |
630 |
- # show information about accessed files |
631 |
- |
632 |
- print "%-40s: %s"%(package,stages) |
633 |
-# if options.show_files: |
634 |
- |
635 |
- # this is here for readability |
636 |
- action={ |
637 |
- ('ok',False,False):"accessed", |
638 |
- ('ok',True,False):"readed", |
639 |
- ('ok',False,True):"writed", |
640 |
- ('ok',True,True):"readed and writed", |
641 |
- ('err',False,False):"other error", |
642 |
- ('err',True,False):"not found", |
643 |
- ('err',False,True):"blocked", |
644 |
- ('err',True,True):"not found and blocked" |
645 |
- } |
646 |
+ is_pkg_in_dep=package in runtime_vars["deps_all"] |
647 |
+ is_pkg_in_system=package in system_packages |
648 |
+ is_pkg_in_system_deps=package in system_deps |
649 |
|
650 |
- filescounter=0 |
651 |
- |
652 |
- for filename in filenames: |
653 |
- event_info=tuple(filenames[filename]) |
654 |
- print " %-56s %-21s" % (filename,action[event_info]) |
655 |
- filescounter+=1 |
656 |
- if options.show_files: |
657 |
- continue |
658 |
- elif filescounter>options.numfiles: |
659 |
- print " ... and %d more ...\n" % (len(filenames)-options.numfiles) |
660 |
- break |
661 |
+ is_pkg_in_portage_dep=runtime_vars["is_emerge"] and package in runtime_vars["deps_portage"] |
662 |
+ is_pkg_self="app-portage/autodep" in package |
663 |
+ is_pkg_python="dev-lang/python" in package |
664 |
+ |
665 |
+ stages=[] |
666 |
+ for stage in sorted(packagesinfo[package].keys(), key=stagesorder.get): |
667 |
+ if stage!="unknown" or options.verbose or not runtime_vars["is_emerge"]: |
668 |
+ stages.append(stage) |
669 |
+ |
670 |
+ if len(stages)!=0: |
671 |
+ filenames={} |
672 |
+ for stage in stages: |
673 |
+ for filename in packagesinfo[package][stage]: |
674 |
+ if len(packagesinfo[package][stage][filename]["found"])!=0: |
675 |
+ was_readed,was_writed=packagesinfo[package][stage][filename]["found"] |
676 |
+ if not filename in filenames: |
677 |
+ filenames[filename]=['ok',was_readed,was_writed] |
678 |
+ else: |
679 |
+ status, old_was_readed, old_was_writed=filenames[filename] |
680 |
+ filenames[filename]=[ |
681 |
+ 'ok',old_was_readed | was_readed, old_was_writed | was_writed |
682 |
+ ] |
683 |
+ if len(packagesinfo[package][stage][filename]["notfound"])!=0: |
684 |
+ was_notfound,was_blocked=packagesinfo[package][stage][filename]["notfound"] |
685 |
+ if not filename in filenames: |
686 |
+ filenames[filename]=['err',was_notfound,was_blocked] |
687 |
+ else: |
688 |
+ status, old_was_notfound, old_was_blocked=filenames[filename] |
689 |
+ filenames[filename]=[ |
690 |
+ 'err',old_was_notfound | was_notfound, old_was_blocked | was_blocked |
691 |
+ ] |
692 |
+ |
693 |
+ |
694 |
+ if is_pkg_in_dep: |
695 |
+ color_printer.printmsg("text","[OK]") |
696 |
+ elif is_pkg_in_system: |
697 |
+ color_printer.printmsg("text","[SYSTEM]") |
698 |
+ elif is_pkg_in_portage_dep: |
699 |
+ color_printer.printmsg("text","[PORTAGE DEP]") |
700 |
+ elif is_pkg_in_system_deps: |
701 |
+ color_printer.printmsg("text","[SYSTEM DEP]") |
702 |
+ elif is_pkg_self: |
703 |
+ color_printer.printmsg("text","[AUTODEP]") |
704 |
+ elif is_pkg_python: |
705 |
+ color_printer.printmsg("text","[INTERPRETER]") |
706 |
+ elif not events_analysis.is_package_useful(package,stages,filenames.keys()): |
707 |
+ color_printer.printmsg("text","[LIKELY OK]") |
708 |
+ else: |
709 |
+ color_printer.printmsg("warning","[NOT IN DEPS]") |
710 |
+ # show information about accessed files |
711 |
+ |
712 |
+ print("%-40s: %s"%(package,stages)) |
713 |
+ # if options.show_files: |
714 |
+ |
715 |
+ # this is here for readability |
716 |
+ action={ |
717 |
+ ('ok',False,False):"accessed", |
718 |
+ ('ok',True,False):"readed", |
719 |
+ ('ok',False,True):"writed", |
720 |
+ ('ok',True,True):"readed and writed", |
721 |
+ ('err',False,False):"other error", |
722 |
+ ('err',True,False):"not found", |
723 |
+ ('err',False,True):"blocked", |
724 |
+ ('err',True,True):"not found and blocked" |
725 |
+ } |
726 |
+ |
727 |
+ filescounter=0 |
728 |
+ |
729 |
+ for filename in filenames: |
730 |
+ event_info=tuple(filenames[filename]) |
731 |
+ print(" %-56s %-21s" % (filename,action[event_info])) |
732 |
+ filescounter+=1 |
733 |
+ if options.show_files: |
734 |
+ continue |
735 |
+ elif filescounter>options.numfiles: |
736 |
+ print(" ... and %d more ...\n" % (len(filenames)-options.numfiles)) |
737 |
+ break |
738 |
|
739 |
# print not founded files with stages |
740 |
if options.show_files: |
741 |
- filenames={} |
742 |
- print "\nNot founded files:" |
743 |
- for stage in sorted(events, key=stagesorder.get): |
744 |
- print "%s:" % stage |
745 |
- |
746 |
- action={ |
747 |
- (True,False):"file not found", |
748 |
- (True,True):"blocked and not found", |
749 |
- (False,True):"blocked", |
750 |
- (False,False):"other error" |
751 |
- } |
752 |
- |
753 |
- fail_events=events[stage][1] |
754 |
- |
755 |
- for filename in sorted(fail_events, key=file_to_package.get): |
756 |
- reason=tuple(fail_events[filename]) |
757 |
- print " %-56s %-21s" % (filename,action[reason]) |
758 |
+ filenames={} |
759 |
+ print("\nNot founded files:") |
760 |
+ for stage in sorted(events, key=stagesorder.get): |
761 |
+ print("%s:" % stage) |
762 |
+ |
763 |
+ action={ |
764 |
+ (True,False):"file not found", |
765 |
+ (True,True):"blocked and not found", |
766 |
+ (False,True):"blocked", |
767 |
+ (False,False):"other error" |
768 |
+ } |
769 |
+ |
770 |
+ fail_events=events[stage][1] |
771 |
+ |
772 |
+ for filename in sorted(fail_events, key=file_to_package.get): |
773 |
+ reason=tuple(fail_events[filename]) |
774 |
+ print(" %-56s %-21s" % (filename,action[reason])) |
775 |
|
776 |
|
777 |
diff --git a/src/autodep/logfs/logger_hooklib.py b/src/autodep/logfs/logger_hooklib.py |
778 |
index 80f0cd4..8a8e2ca 100644 |
779 |
--- a/src/autodep/logfs/logger_hooklib.py |
780 |
+++ b/src/autodep/logfs/logger_hooklib.py |
781 |
@@ -7,7 +7,7 @@ class logger: |
782 |
socketname='' |
783 |
# we can't use just file_hook.so here |
784 |
# because program may change LD_LIBRARY_PATH |
785 |
- #hooklibpath='/home/bay/gsoc/src/hook_lib/file_hook.so' |
786 |
+ #hooklibpath='/home/bay/autodep/src/hook_lib/file_hook.so' |
787 |
hooklibpath='/usr/lib/file_hook.so' |
788 |
|
789 |
def __init__(self,socketname): |
790 |
|
791 |
diff --git a/src/autodep/package_utils/portage_utils.py b/src/autodep/package_utils/portage_utils.py |
792 |
index d33ada6..8bf3463 100644 |
793 |
--- a/src/autodep/package_utils/portage_utils.py |
794 |
+++ b/src/autodep/package_utils/portage_utils.py |
795 |
@@ -23,19 +23,29 @@ def getpackagesbyfiles(files): |
796 |
stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE, |
797 |
bufsize=4096) |
798 |
|
799 |
- out,err=proc.communicate("\n".join(listtocheck)) |
800 |
+ out,err=proc.communicate(b"\n".join(listtocheck)) |
801 |
if err!=None: |
802 |
print "Noncritical error while launch qfile %s"%err; |
803 |
|
804 |
- lines=out.split("\n") |
805 |
+ lines=out.split(b"\n") |
806 |
#print lines |
807 |
line_re=re.compile(r"^([^ ]+)\s+\(([^)]+)\)$") |
808 |
for line in lines: |
809 |
+ try: |
810 |
+ line=line.decode("utf-8") |
811 |
+ except UnicodeDecodeError: |
812 |
+ portage.util.writemsg("Util qfile returned non-utf8 string: %s\n" % line) |
813 |
+ |
814 |
if len(line)==0: |
815 |
continue |
816 |
match=line_re.match(line) |
817 |
if match: |
818 |
- ret[match.group(2)]=match.group(1) |
819 |
+ try: |
820 |
+ ret[match.group(2).encode("utf-8")]=match.group(1) |
821 |
+ except UnicodeEncodeError: |
822 |
+ portage.util.writemsg( |
823 |
+ "Util qfile failed to encode string %s to unicode\n" % |
824 |
+ match.group(2)) |
825 |
else: |
826 |
print "Util qfile returned unparsable string: %s" % line |
827 |
|
828 |
@@ -61,7 +71,7 @@ def getfilesbypackage(packagename): |
829 |
if err!=None and len(err)!=0 : |
830 |
print "Noncritical error while launch qlist: %s" % err; |
831 |
|
832 |
- ret=out.split("\n") |
833 |
+ ret=out.split(b"\n") |
834 |
if ret==['']: |
835 |
ret=[] |
836 |
except OSError,e: |
837 |
@@ -85,7 +95,7 @@ def get_all_packages_files(): |
838 |
if err!=None and len(err)!=0 : |
839 |
print "Noncritical error while launch qlist: %s" % err; |
840 |
|
841 |
- ret=out.split("\n") |
842 |
+ ret=out.split(b"\n") |
843 |
except OSError,e: |
844 |
print "Error while launching qfile: %s" % e |