Gentoo Archives: gentoo-commits

From: "Александр Берсенев" <bay@×××××××××.ru>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/autodep:master commit in: src/autodep/package_utils/, src/autodep/logfs/, src/autodep/
Date: Fri, 30 Sep 2011 07:21:48
Message-Id: 8f102b8a531973df8bb1239f9a054386e0b9aead.bay@gentoo
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