Ticket #128 (reopened defect)

Opened 12 months ago

Last modified 5 months ago

Traceback merging python packages

Reported by: masterdriverz Owned by:
Priority: normal Milestone:
Component: pkgcore Version:
Keywords: Cc:

Description

I get this traceback merging some python packages (docutils and elementtree so far)

>>> Replacing dev-python/elementtree-1.2.6 with dev-python/elementtree-1.2.6-r2
Traceback (most recent call last):
  File "/usr/bin/pmerge", line 36, in <module>
    commandline.main(subcommands)
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/util/commandline.py", line 401, in main
    exitstatus = main_func(options, out, err)
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/scripts/pmerge.py", line 548, in main
    ret = i.finish()
  File "/home/chaza/bzr/snakeoil/integration/snakeoil/dependant_methods.py", line 26, in ensure_deps
    r = getattr(self, dep).raw_func(*a, **kw)
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/interfaces/repo.py", line 309, in start
    return livefs_base.start(self, engine)
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/interfaces/repo.py", line 118, in start
    self.me.sanity_check()
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/merge/engine.py", line 277, in execute_hook
    trigger(self, self.csets)
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/merge/triggers.py", line 120, in __call__
    return self.trigger(engine, *self._get_csets(required_csets, csets))
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/merge/triggers.py", line 108, in _get_csets
    return [csets[x] for x in required_csets]
  File "/home/chaza/bzr/snakeoil/integration/snakeoil/mappings.py", line 345, in __getitem__
    return x[key]
  File "/home/chaza/bzr/snakeoil/integration/snakeoil/mappings.py", line 173, in __getitem__
    v = self._vals[key] = self._val_func(key)
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/merge/engine.py", line 217, in _get_cset_source
    return self.cset_sources[key](self, self.csets)
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/merge/engine.py", line 310, in get_install_livefs_intersect
    return engine._get_livefs_intersect_cset(engine, csets, "install")
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/merge/engine.py", line 306, in _get_livefs_intersect_cset
    return contents.contentsSet(livefs.intersect(csets[cset_name]))
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/fs/contents.py", line 40, in __init__
    self._dict.update(check_instance(x) for x in initial)
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/fs/contents.py", line 40, in <genexpr>
    self._dict.update(check_instance(x) for x in initial)
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/fs/livefs.py", line 149, in intersect
    yield f(x.location)
  File "/home/chaza/bzr/pkgcore/integration/pkgcore/fs/livefs.py", line 45, in gen_obj
    stat = os.lstat(real_location)
OSError: [Errno 20] Not a directory: '/usr/lib/python2.5/site-packages/elementtree-1.2.6_20050316-py2.5.egg-info/top_level.txt'

Change History

comment:1 Changed 11 months ago by jokey

  • status changed from new to closed
  • resolution set to worksforme

this is supposed to be gone long ago

comment:2 follow-up: ↓ 3 Changed 5 months ago by masterdriverz

  • status changed from closed to reopened
  • resolution worksforme deleted

This is still alive and kicking, not sure why, but it is. For some reason random files are being appended to .egg-info paths, and the .egg-info paths are being mistaken for directories.

comment:3 in reply to: ↑ 2 Changed 5 months ago by masterdriverz

Replying to masterdriverz:

This is still alive and kicking, not sure why, but it is. For some reason random files are being appended to .egg-info paths, and the .egg-info paths are being mistaken for directories.

Well that was completely wrong. Basically /usr/lib/python2.5/site-packages/docutils-0.4-py2.5.egg-info is a file in one version of docutils, but a folder in the next. _realpath_dir.intersect calls gen_obj, which calls lstat on /usr/lib/python2.5/site-packages/docutils-0.4-py2.5.egg-info/PKG-INFO, raising OSError, with errno ENOTDIR, but we only catch ENOENT. I'm guessing we should either delete the file, or mark it for replacement, but I'm not sure which or how.

Note: See TracTickets for help on using tickets.