--- bin/emerge.orig 2006-03-04 11:44:22.000000000 +0100 +++ bin/emerge 2006-03-04 12:26:08.000000000 +0100 @@ -16,6 +16,7 @@ import portage_util import portage_locks import portage_exception +import portage_use_desc spinner_msgs = ["Gentoo Rocks ("+os.uname()[0]+")", @@ -193,6 +194,8 @@ "--skipfirst", "--skip-first", "--tree", "--update", +"--use-desc-all", "--use-desc-local", +"--use-desc-special", "--use-desc-new", "--usepkg", "--usepkgonly", "--verbose", "--version" ] @@ -398,6 +401,27 @@ portage.writemsg("!!! \"--ask\" should only be used in a terminal. Exiting.\n") sys.exit(1) +# --use-desc-*: only if in verbose pretend/ask mode +for myoption in ["--use-desc-special", "--use-desc-local", "--use-desc-all", "--use-desc-new"]: + if myoption in myopts: + if ("--pretend" not in myopts) and ("--ask" not in myopts): + print ">>> %s is only for --pretend or --ask modes..." % myoption \ + + " removing %s from options." % myoption + myopts.remove(myoption) + elif "--verbose" not in myopts: + print ">>> %s is only for --verbose mode..." % myoption \ + + " removing %s from options." % myoption + myopts.remove(myoption) + +# --use-desc-*: remove redundant options +if "--use-desc-all" in myopts: + for myoption in ["--use-desc-local","--use-desc-special","--use-desc-new"]: + if myoption in myopts: + myopts.remove(myoption) +if "--use-desc-local" in myopts: + if "--use-desc-special" in myopts: + myopts.remove("--use-desc-special") + # Set so that configs will be merged regardless of remembered status if ("--noconfmem" in myopts): portage.settings.unlock() @@ -1511,6 +1535,42 @@ ret = '%s="%s" ' % (name, ret) return ret + use_desc=None + use_desc_level="" + global_desc_dict={} + local_desc_dict={} + new_desc_dict={} + for myoption in ["--use-desc-all", "--use-desc-local", "--use-desc-special"]: + if myoption in myopts: + use_desc_level=myoption[11:] + break + use_desc_new=("--use-desc-new" in myopts) + if not use_desc_new and not use_desc_level: + def get_use_descriptions(*args): + return ({},{},{}) + if use_desc_new or use_desc_level: + use_desc=portage_use_desc.use_desc(portage.settings['PORTDIR']) + def get_use_descriptions(catpkg, cur_iuse, old_iuse, is_new, use_desc=use_desc, \ + show_new=use_desc_new, show_level=use_desc_level): + my_global_desc_dict={} + my_local_desc_dict={} + my_new_desc_dict={} + new_flags=[] + if (not is_new) and show_new: + for flag in cur_iuse: + if not flag in old_iuse: + new_flags.append(flag) + my_new_desc_dict=use_desc.get_pkg_flags_desc(new_flags,catpkg,level="all",mark_local=True) + if show_level in ("special","local"): + my_local_desc_dict=use_desc.get_pkg_flags_desc(cur_iuse,catpkg,level=show_level) + elif show_level=="all": + my_local_desc_dict=use_desc.get_pkg_flags_desc(cur_iuse,catpkg,level="local") + my_global_desc_dict=use_desc.get_pkg_flags_desc(cur_iuse,catpkg,level="global") + for flag in new_flags: + if flag in my_local_desc_dict: del my_local_desc_dict[flag] + if flag in my_global_desc_dict: del my_global_desc_dict[flag] + return (my_global_desc_dict,my_local_desc_dict,my_new_desc_dict) + if verbosity == 3: overlays = string.split(portage.settings['PORTDIR_OVERLAY']) @@ -1664,6 +1724,18 @@ verboseadd += create_use_string(key.upper(), cur_iuse_map[key], cur_use_map[key], old_iuse_map[key], old_use_map[key], is_new) + my_catpkg = portage.cpv_getkey(x[2]) + (pkg_global_desc_dict,pkg_local_desc_dict,pkg_new_desc_dict) = \ + get_use_descriptions(my_catpkg, cur_iuse, old_iuse, is_new) + for my_flag in pkg_global_desc_dict: + global_desc_dict[my_flag] = pkg_global_desc_dict[my_flag] + if pkg_local_desc_dict: + local_desc_dict[my_catpkg] = {} + for my_flag in pkg_local_desc_dict: + local_desc_dict[my_catpkg][my_flag] = pkg_local_desc_dict[my_flag] + for my_flag in pkg_new_desc_dict: + new_desc_dict[my_flag] = pkg_new_desc_dict[my_flag] + if verbosity == 3: # size verbose mysize=0 @@ -1776,6 +1848,35 @@ for x in overlays: y=y+1 print " "+teal("["+str(y)+"]"),x + if new_desc_dict: + print + print "The following USE flags are used for the first time in some packages:" + myflagkeys = new_desc_dict.keys() + myflagkeys.sort() + for myflag in myflagkeys: + print " ",teal(myflag),teal("-"),new_desc_dict[myflag] + if local_desc_dict: + print + if use_desc_level=="special": + print "The following USE flags have package-specific descriptions:" + else: + print "Local USE flags descriptions:" + mycatpkgkeys = local_desc_dict.keys() + mycatpkgkeys.sort() + for mycatpkg in mycatpkgkeys: + if local_desc_dict[mycatpkg]: + print darkgreen(mycatpkg) + myflagkeys = local_desc_dict[mycatpkg].keys() + myflagkeys.sort() + for myflag in myflagkeys: + print " ",teal(myflag),teal("-"),local_desc_dict[mycatpkg][myflag] + if global_desc_dict: + print + print "Global USE flags descriptions:" + myflagkeys = global_desc_dict.keys() + myflagkeys.sort() + for myflag in myflagkeys: + print " ",teal(myflag),teal("-"),global_desc_dict[myflag] if "--changelog" in myopts: print