Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 398587 - Problem with overlays which have nonASCII characters in its path
Summary: Problem with overlays which have nonASCII characters in its path
Status: RESOLVED FIXED
Alias: None
Product: Portage Development
Classification: Unclassified
Component: Core - Configuration (show other bugs)
Hardware: AMD64 Linux
: Normal normal (vote)
Assignee: Portage team
URL: http://forums.gentoo.org/viewtopic-p-...
Whiteboard:
Keywords:
Depends on:
Blocks: 402213
  Show dependency tree
 
Reported: 2012-01-12 01:23 UTC by Ctibor Brančík
Modified: 2012-02-04 23:28 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments
emerge --info (emerge.info,5.64 KB, text/plain)
2012-01-12 01:24 UTC, Ctibor Brančík
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ctibor Brančík 2012-01-12 01:23:37 UTC
Portage seems to have troubles regarding overlays with nonASCII characters in its path.

I have for example created overlay in my $HOME that is in the directory "/$HOME/počítač/portage"

I have so far discovered that when you have such overlay in PORTDIR_OVERLAY gcc-config tells you, it cannot detect CHOST variable for example (see linked forum thread).

As I was advised in the forums, I tried to debug gcc-config script and eventualy came to these command, that seems to be the main error:

alwaid2 ctibor # env -i portageq envvar CHOST
Traceback (most recent call last):
  File "/usr/bin/portageq", line 880, in <module>
    main()
  File "/usr/bin/portageq", line 861, in main
    retval = function(args)
  File "/usr/bin/portageq", line 700, in envvar
    print(portage.settings[arg])
  File "/usr/lib64/portage/pym/portage/proxy/objectproxy.py", line 37, in __getitem__
    return object.__getattribute__(self, '_get_target')()[key]
  File "/usr/lib64/portage/pym/portage/__init__.py", line 628, in _get_target
    return _get_legacy_global(name)
  File "/usr/lib64/portage/pym/portage/_legacy_globals.py", line 34, in _get_legacy_global
    portage.db = portage.create_trees(**kwargs)
  File "/usr/lib64/portage/pym/portage/__init__.py", line 510, in create_trees
    env=env, eprefix=eprefix)
  File "/usr/lib64/portage/pym/portage/proxy/objectproxy.py", line 31, in __call__
    return result(*args, **kwargs)
  File "/usr/lib64/portage/pym/portage/package/ebuild/config.py", line 569, in __init__
    self._use_manager = UseManager(self.repositories, profiles_complex, abs_user_config, user_config=local_config)
  File "/usr/lib64/portage/pym/portage/package/ebuild/_config/UseManager.py", line 52, in __init__
    self._repo_usemask_dict = self._parse_repository_files_to_dict_of_tuples("use.mask", repositories)
  File "/usr/lib64/portage/pym/portage/package/ebuild/_config/UseManager.py", line 125, in _parse_repository_files_to_dict_of_tuples
    ret[repo.name] = self._parse_file_to_tuple(os.path.join(repo.location, "profiles", file_name))
  File "/usr/lib64/portage/pym/portage/package/ebuild/_config/UseManager.py", line 71, in _parse_file_to_tuple
    eapi = read_corresponding_eapi_file(file_name)
  File "/usr/lib64/portage/pym/portage/util/__init__.py", line 390, in read_corresponding_eapi_file
    f = open(eapi_file, "r")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-16: ordinal not in range(128)

====================================
Error in portage.process.run_exitfuncs

  File "/usr/lib64/portage/pym/portage/process.py", line 115, in run_exitfuncs
    func(*targs, **kargs)
  File "/usr/lib64/portage/pym/portage/__init__.py", line 479, in portageexit
    if data.secpass > 1 and os.environ.get("SANDBOX_ON") != "1":
  File "/usr/lib64/portage/pym/portage/proxy/objectproxy.py", line 67, in __gt__
    return object.__getattribute__(self, '_get_target')() > other
  File "/usr/lib64/portage/pym/portage/data.py", line 200, in _get_target
    return _get_global(object.__getattribute__(self, '_name'))
  File "/usr/lib64/portage/pym/portage/data.py", line 89, in _get_global
    portage_uid = pwd.getpwnam(_get_global('_portage_username')).pw_uid
  File "/usr/lib64/portage/pym/portage/data.py", line 154, in _get_global
    v = portage.settings.get(env_key)
  File "/usr/lib64/portage/pym/portage/proxy/objectproxy.py", line 22, in __getattribute__
    result = object.__getattribute__(self, '_get_target')()
  File "/usr/lib64/portage/pym/portage/__init__.py", line 628, in _get_target
    return _get_legacy_global(name)
  File "/usr/lib64/portage/pym/portage/_legacy_globals.py", line 34, in _get_legacy_global
    portage.db = portage.create_trees(**kwargs)
  File "/usr/lib64/portage/pym/portage/__init__.py", line 510, in create_trees
    env=env, eprefix=eprefix)
  File "/usr/lib64/portage/pym/portage/package/ebuild/config.py", line 569, in __init__
    self._use_manager = UseManager(self.repositories, profiles_complex, abs_user_config, user_config=local_config)
  File "/usr/lib64/portage/pym/portage/package/ebuild/_config/UseManager.py", line 52, in __init__
    self._repo_usemask_dict = self._parse_repository_files_to_dict_of_tuples("use.mask", repositories)
  File "/usr/lib64/portage/pym/portage/package/ebuild/_config/UseManager.py", line 125, in _parse_repository_files_to_dict_of_tuples
    ret[repo.name] = self._parse_file_to_tuple(os.path.join(repo.location, "profiles", file_name))
  File "/usr/lib64/portage/pym/portage/package/ebuild/_config/UseManager.py", line 71, in _parse_file_to_tuple
    eapi = read_corresponding_eapi_file(file_name)
  File "/usr/lib64/portage/pym/portage/util/__init__.py", line 390, in read_corresponding_eapi_file
    f = open(eapi_file, "r")
'ascii' codec can't encode characters in position 15-16: ordinal not in range(128)
====================================

Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "/usr/lib64/portage/pym/portage/process.py", line 126, in run_exitfuncs
    exec("raise exc_info[0], exc_info[1], exc_info[2]")
  File "/usr/lib64/portage/pym/portage/process.py", line 115, in run_exitfuncs
    func(*targs, **kargs)
  File "/usr/lib64/portage/pym/portage/__init__.py", line 479, in portageexit
    if data.secpass > 1 and os.environ.get("SANDBOX_ON") != "1":
  File "/usr/lib64/portage/pym/portage/proxy/objectproxy.py", line 67, in __gt__
    return object.__getattribute__(self, '_get_target')() > other
  File "/usr/lib64/portage/pym/portage/data.py", line 200, in _get_target
    return _get_global(object.__getattribute__(self, '_name'))
  File "/usr/lib64/portage/pym/portage/data.py", line 89, in _get_global
    portage_uid = pwd.getpwnam(_get_global('_portage_username')).pw_uid
  File "/usr/lib64/portage/pym/portage/data.py", line 154, in _get_global
    v = portage.settings.get(env_key)
  File "/usr/lib64/portage/pym/portage/proxy/objectproxy.py", line 22, in __getattribute__
    result = object.__getattribute__(self, '_get_target')()
  File "/usr/lib64/portage/pym/portage/__init__.py", line 628, in _get_target
    return _get_legacy_global(name)
  File "/usr/lib64/portage/pym/portage/_legacy_globals.py", line 34, in _get_legacy_global
    portage.db = portage.create_trees(**kwargs)
  File "/usr/lib64/portage/pym/portage/__init__.py", line 510, in create_trees
    env=env, eprefix=eprefix)
  File "/usr/lib64/portage/pym/portage/package/ebuild/config.py", line 569, in __init__
    self._use_manager = UseManager(self.repositories, profiles_complex, abs_user_config, user_config=local_config)
  File "/usr/lib64/portage/pym/portage/package/ebuild/_config/UseManager.py", line 52, in __init__
    self._repo_usemask_dict = self._parse_repository_files_to_dict_of_tuples("use.mask", repositories)
  File "/usr/lib64/portage/pym/portage/package/ebuild/_config/UseManager.py", line 125, in _parse_repository_files_to_dict_of_tuples
    ret[repo.name] = self._parse_file_to_tuple(os.path.join(repo.location, "profiles", file_name))
  File "/usr/lib64/portage/pym/portage/package/ebuild/_config/UseManager.py", line 71, in _parse_file_to_tuple
    eapi = read_corresponding_eapi_file(file_name)
  File "/usr/lib64/portage/pym/portage/util/__init__.py", line 390, in read_corresponding_eapi_file
    f = open(eapi_file, "r")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-16: ordinal not in range(128)
Error in sys.exitfunc:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "/usr/lib64/portage/pym/portage/process.py", line 126, in run_exitfuncs
    exec("raise exc_info[0], exc_info[1], exc_info[2]")
  File "/usr/lib64/portage/pym/portage/process.py", line 115, in run_exitfuncs
    func(*targs, **kargs)
  File "/usr/lib64/portage/pym/portage/__init__.py", line 479, in portageexit
    if data.secpass > 1 and os.environ.get("SANDBOX_ON") != "1":
  File "/usr/lib64/portage/pym/portage/proxy/objectproxy.py", line 67, in __gt__
    return object.__getattribute__(self, '_get_target')() > other
  File "/usr/lib64/portage/pym/portage/data.py", line 200, in _get_target
    return _get_global(object.__getattribute__(self, '_name'))
  File "/usr/lib64/portage/pym/portage/data.py", line 89, in _get_global
    portage_uid = pwd.getpwnam(_get_global('_portage_username')).pw_uid
  File "/usr/lib64/portage/pym/portage/data.py", line 154, in _get_global
    v = portage.settings.get(env_key)
  File "/usr/lib64/portage/pym/portage/proxy/objectproxy.py", line 22, in __getattribute__
    result = object.__getattribute__(self, '_get_target')()
  File "/usr/lib64/portage/pym/portage/__init__.py", line 628, in _get_target
    return _get_legacy_global(name)
  File "/usr/lib64/portage/pym/portage/_legacy_globals.py", line 34, in _get_legacy_global
    portage.db = portage.create_trees(**kwargs)
  File "/usr/lib64/portage/pym/portage/__init__.py", line 510, in create_trees
    env=env, eprefix=eprefix)
  File "/usr/lib64/portage/pym/portage/package/ebuild/config.py", line 569, in __init__
    self._use_manager = UseManager(self.repositories, profiles_complex, abs_user_config, user_config=local_config)
  File "/usr/lib64/portage/pym/portage/package/ebuild/_config/UseManager.py", line 52, in __init__
    self._repo_usemask_dict = self._parse_repository_files_to_dict_of_tuples("use.mask", repositories)
  File "/usr/lib64/portage/pym/portage/package/ebuild/_config/UseManager.py", line 125, in _parse_repository_files_to_dict_of_tuples
    ret[repo.name] = self._parse_file_to_tuple(os.path.join(repo.location, "profiles", file_name))
  File "/usr/lib64/portage/pym/portage/package/ebuild/_config/UseManager.py", line 71, in _parse_file_to_tuple
    eapi = read_corresponding_eapi_file(file_name)
  File "/usr/lib64/portage/pym/portage/util/__init__.py", line 390, in read_corresponding_eapi_file
    f = open(eapi_file, "r")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-16: ordinal not in range(128)

I have ran into these problems with nonASCII paths in overlay with autounmask too. See bug #262424. In fact, the reason it reappeared for me was that autounmask is not needed anymore and I tried to reenable my local overlay which is handy when you need quick way to work with ebuilds from bugzilla etc.

Reproducible: Always

Steps to Reproduce:
1. Create overlay with non ASCII name in its path and insert it into the PORTDIR_OVERLAY
2. Try to run gcc-config -l or start the distccd daemon and see errors
Actual Results:  
gcc-config, distcc rc-script don't work properly, portage $CHOST can't be found.
Comment 1 Ctibor Brančík 2012-01-12 01:24:54 UTC
Created attachment 298683 [details]
emerge --info
Comment 2 Zac Medico gentoo-dev 2012-01-12 01:38:40 UTC
This should solve the particular error that you got:

http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=31b4d0cb3a183e29fe0d745187470ded37ffd433

Make sure that your file names are encoded as UTF-8, because that's required since bug 382199.
Comment 3 Zac Medico gentoo-dev 2012-02-04 23:28:33 UTC
This is fixed in 2.1.10.45 and 2.2.0_alpha85.