aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/autodep/autodep')
-rwxr-xr-xsrc/autodep/autodep87
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