Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pmerge: fix file <-> dir merge override error handling #291

Open
radhermit opened this issue Oct 26, 2020 · 0 comments
Open

pmerge: fix file <-> dir merge override error handling #291

radhermit opened this issue Oct 26, 2020 · 0 comments
Labels

Comments

@radhermit
Copy link
Contributor

Currently when merging a package that tries to replace an existing dir with a file or vice versa something similar to the following traceback is thrown:

Traceback (most recent call last):
  File "/usr/lib/python-exec/python3.7/pmerge", line 4, in <module>
    scripts.run(basename(__file__))
  File "/usr/lib/python3.7/site-packages/pkgcore/scripts/__init__.py", line 34, in run
    sys.exit(tool())
  File "/usr/lib/python3.7/site-packages/snakeoil/cli/tool.py", line 79, in __call__
    ret = self.main()
  File "/usr/lib/python3.7/site-packages/snakeoil/cli/tool.py", line 182, in main
    self.handle_exec_exception(e)
  File "/usr/lib/python3.7/site-packages/snakeoil/cli/tool.py", line 167, in main
    exitstatus = func(self.options, self.out, self.err)
  File "/usr/lib/python3.7/site-packages/pkgcore/scripts/pmerge.py", line 957, in main
    ret = i.finish()
  File "/usr/lib/python3.7/site-packages/snakeoil/currying.py", line 50, in callit
    return func(*(args + moreargs), **morekwargs)
  File "/usr/lib/python3.7/site-packages/snakeoil/dependant_methods.py", line 70, in _ensure_deps
    r = getattr(self, dep).sd_raw_func(self, *a, **kw)
  File "/usr/lib/python3.7/site-packages/pkgcore/operations/domain.py", line 163, in transfer
    merge_phase()
  File "/usr/lib/python3.7/site-packages/pkgcore/merge/engine.py", line 304, in execute_hook
    trigger(self, self.csets)
  File "/usr/lib/python3.7/site-packages/pkgcore/merge/triggers.py", line 131, in __call__
    return self.trigger(engine, *self._get_csets(required_csets, csets))
  File "/usr/lib/python3.7/site-packages/pkgcore/merge/triggers.py", line 432, in trigger
    return op(merging_cset, callback=engine.observer.installing_fs_obj)
  File "/usr/lib/python3.7/site-packages/pkgcore/fs/ops.py", line 287, in merge_contents
    copyfile(x, mkdirs=True)
  File "/usr/lib/python3.7/site-packages/pkgcore/fs/ops.py", line 134, in default_copyfile
    raise CannotOverwrite(obj, existing)
pkgcore.fs.ops.CannotOverwrite: cannot write /usr/bin due to /usr/bin existing
WARNING pkgcore: MutatedPkg(installed pkg: dev-ml/lablgl-1.05-r1::vdb,
               : source repo 'gentoo', overrides=('bdepend', 'depend',
               : 'rdepend', 'pdepend')) -> built ebuild:
               : dev-ml/lablgl-1.06 replacement was underway, but
               : wasn't completed

Instead we should either make a more friendly error message without a traceback or handle it how portage does, i.e. merge the clashing file/dir renamed to something else and show a warning.

@radhermit radhermit added the bug label Oct 26, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant