diff options
Diffstat (limited to 'src/autodep/autodep')
-rwxr-xr-x | src/autodep/autodep | 87 |
1 files changed, 60 insertions, 27 deletions
diff --git a/src/autodep/autodep b/src/autodep/autodep index f202d0d..034c47a 100755 --- a/src/autodep/autodep +++ b/src/autodep/autodep @@ -80,10 +80,35 @@ def init_runtime_vars(portage_api, options,args): else: runtime_vars["is_emerge"]=False + runtime_vars["deps_all"]=[] + + # find a full path to the program + program_path=None + program_name=args[0] + def is_exe(fpath): + return os.path.isfile(fpath) and os.access(fpath, os.X_OK) + + fpath, fname = os.path.split(program_name) + if fpath: + if is_exe(program_name): + program_path=program_name + else: + for path in os.environ["PATH"].split(os.pathsep): + exe_file = os.path.join(path, program_name) + if is_exe(exe_file): + program_path=exe_file + + if program_path==None: + print("Failed to find the program %s. Check its existance." + % program_name) + exit(1) + + runtime_vars["full_path"]=program_path + return runtime_vars -def get_filter_function(options,system_packages,portage_api): +def get_filter_function(options,args,system_packages,portage_api): # handling --block # exits if package name is bad if not options.packages and not options.strict_block: @@ -107,14 +132,18 @@ def get_filter_function(options,system_packages,portage_api): #exit(1) elif options.strict_block: # this option is very strict # because blocking logic is complex + print "Building a list of files to block. This may take some time" # we get list of all files and substract list of allowed files from it allfiles=portage_utils.get_all_packages_files() allowedpkgs=[] allowedpkgs+=system_packages if runtime_vars["is_emerge"]: # blocking logic for emerge + print "Notice: you can use emerge_strict command instead of autodep emerge." + print "Using this command allows to build any number of a packages.\n" + # including all dependencies of portage - allowedpkgs+=list(portage_api.get_deps('portage')) + allowedpkgs+=list(portage_api.get_dep("portage",["RDEPEND"])) (emergeaction ,emergeopts, emergefiles)=runtime_vars["emerge_parameters"] if len(emergefiles)>1: print "You can't install several packages with option -b" @@ -122,35 +151,40 @@ def get_filter_function(options,system_packages,portage_api): if len(runtime_vars["mergelist"])!=1: print "You can't install several packages with option -b." print "Emerge tried to install several packages: %s. " % runtime_vars["mergelist"] - print "You can force emerge to merge a package wit hout any other "\ + print "You can force emerge to merge a package without any other "\ "packages with emerge --nodeps option or you can install these "\ "packages first" exit(1) pkg=runtime_vars["mergelist"][0] - depslist=list(portage_api.get_deps(pkg)) + depslist=list(portage_api.get_deps_for_package_building(pkg)) allowedpkgs+=depslist + # manually add all python interpreters to this list + allowedpkgs+=["python"] else: - pass # TODO: blocking logic for non-emerge proccesses - - # always include current python interpreter - #print allowedpkgs - #allowedpkgs+=portage_utils.getpackagesbyfiles(sys.executable) - #print allowedpkgs + program_path=runtime_vars["full_path"] + file_to_package=portage_utils.getpackagesbyfiles([program_path]) + if program_path not in file_to_package: + print "Failed to find a package for %s" % program_path + else: + allowedpkgs+=[file_to_package[program_path]] + depslist=list( + portage_api.get_deps(file_to_package[program_path],["RDEPEND"])) + allowedpkgs+=depslist + + print allowedpkgs + + # remember the allowedpkgs in deps_all. It is bad to do it here. + runtime_vars["deps_all"]=allowedpkgs allowedfiles=[] for pkg in allowedpkgs: allowedfiles+=portage_utils.getfilesbypackage(pkg) - # manually add all python interpreters to this list - allowedfiles+=portage_utils.getfilesbypackage('python') - # manually add sandbox to this list - #allowedfiles+=portage_utils.getfilesbypackage('sandbox') - + allowedfiles=set(allowedfiles) deniedfiles=allfiles-allowedfiles - print "The list size is about %dM" % (int(sys.getsizeof(deniedfiles))/1024/1024) def filter(eventname,filename,stage): if filename in deniedfiles: @@ -158,15 +192,13 @@ def get_filter_function(options,system_packages,portage_api): return True return filter - - portage_api, system_packages=init_environment() options,args=parse_args() runtime_vars=init_runtime_vars(portage_api,options,args) color_printer=colorize_output.color_printer(not options.nocolor) -filter_function=get_filter_function(options,system_packages,portage_api) +filter_function=get_filter_function(options,args,system_packages,portage_api) # launching program events=logfs.fstracer.getfsevents(args[0], args,approach=options.approach,filterproc=filter_function) @@ -180,11 +212,11 @@ if runtime_vars["is_emerge"]: runtime_vars["deps_buildtime"]=set([]) for pkg in runtime_vars["mergelist"]: runtime_vars["deps_all"]=runtime_vars["deps_all"].union( - portage_api.get_deps(pkg,["DEPEND", "RDEPEND"])) + portage_api.get_deps_for_package_building(pkg)) runtime_vars["deps_buildtime"]=runtime_vars["deps_buildtime"].union( portage_api.get_dep(pkg,["DEPEND"])) - runtime_vars["deps_portage"]=portage_api.get_deps('portage',["DEPEND", "RDEPEND"]) + runtime_vars["deps_portage"]=portage_api.get_dep('portage',["RDEPEND"]) #pkgs=portage_log_parser.get_list_of_merged_packages( @@ -274,10 +306,9 @@ for package in sorted(packagesinfo): if package=="unknown" and not options.verbose: continue - if package in system_packages and not options.verbose: - continue - is_pkg_in_dep=runtime_vars["is_emerge"] and package in runtime_vars["deps_all"] + is_pkg_in_dep=package in runtime_vars["deps_all"] + is_pkg_in_system=package in system_packages is_pkg_in_portage_dep=runtime_vars["is_emerge"] and package in runtime_vars["deps_portage"] is_pkg_python="dev-lang/python" in package @@ -310,8 +341,10 @@ for package in sorted(packagesinfo): ] - if not runtime_vars["is_emerge"] or is_pkg_in_dep: + if is_pkg_in_dep: color_printer.printmsg("text","[OK]") + elif is_pkg_in_system: + color_printer.printmsg("text","[SYSTEM]") elif is_pkg_in_portage_dep: color_printer.printmsg("text","[PORTAGE DEP]") elif is_pkg_python: @@ -345,8 +378,8 @@ for package in sorted(packagesinfo): filescounter+=1 if options.show_files: continue - elif filescounter>=options.numfiles: - print " ..." + elif filescounter>options.numfiles: + print " ... and %d more ...\n" % (len(filenames)-10) break # print not founded files with stages |