Bug#911629: spyder: unhandled symlink to directory conversion: /usr/share/doc/spyder/html

Andreas Beckmann anbe at debian.org
Mon Oct 22 20:38:11 BST 2018


Package: spyder
Version: 3.2.6+dfsg1-2
Severity: serious
User: debian-qa at lists.debian.org
Usertags: piuparts

Hi,

an upgrade test with piuparts revealed that your package installs files
over existing symlinks and possibly overwrites files owned by other
packages. This usually means an old version of the package shipped a
symlink but that was later replaced by a real (and non-empty)
directory. This kind of overwriting another package's files cannot be
detected by dpkg.

This was observed on the following upgrade paths:

  stretch -> buster

For /usr/share/doc/PACKAGE this may not be problematic as long as both
packages are installed, ship byte-for-byte identical files and are
upgraded in lockstep. But once one of the involved packages gets
removed, the other one will lose its documentation files, too,
including the copyright file, which is a violation of Policy 12.5:
https://www.debian.org/doc/debian-policy/ch-docs.html#copyright-information

For other overwritten locations anything interesting may happen.

Note that dpkg intentionally does not replace directories with symlinks
and vice versa, you need the maintainer scripts to do this.
See in particular the end of point 4 in
https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html#details-of-unpack-phase-of-installation-or-upgrade

It is recommended to use the dpkg-maintscript-helper commands
'dir_to_symlink' and 'symlink_to_dir' (available since dpkg 1.17.14)
to perform the conversion, ideally using d/$PACKAGE.maintscript.
Do not forget to add 'Pre-Depends: ${misc:Pre-Depends}' in d/control.
See dpkg-maintscript-helper(1) and dh_installdeb(1) for details.


>From the attached log (scroll to the bottom...):

4m37.9s INFO: dirname part contains a symlink:
  /usr/share/doc/spyder/html/_images (spyder-doc) != /usr/share/doc/spyder-doc/html/_images (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/arrayeditor.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/arrayeditor.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/console.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/console.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/dicteditor.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/dicteditor.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/editor1.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/editor1.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/editor2.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/editor2.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/editor3.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/editor3.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/explorer.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/explorer.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/explorer_menu1.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/explorer_menu1.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/explorer_menu2.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/explorer_menu2.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/findinfiles.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/findinfiles.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/git_install_dialog.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/git_install_dialog.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/help_plain.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/help_plain.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/help_rich.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/help_rich.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/help_source.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/help_source.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/historylog.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/historylog.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/internalconsole.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/internalconsole.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/ipythonconsole.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/ipythonconsole.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/ipythonconsolemenu.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/ipythonconsolemenu.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/ipythonkernelconnect.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/ipythonkernelconnect.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/listeditor.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/listeditor.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/new_project.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/new_project.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/onlinehelp.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/onlinehelp.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/projectexplorer.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/projectexplorer.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/projectexplorer2.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/projectexplorer2.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/pylint.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/pylint.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/texteditor.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/texteditor.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/variableexplorer-imshow.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/variableexplorer-imshow.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/variableexplorer-plot.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/variableexplorer-plot.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_images/variableexplorer1.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_images/variableexplorer1.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/console.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/console.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/debugging.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/debugging.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/editor.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/editor.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/fileexplorer.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/fileexplorer.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/findinfiles.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/findinfiles.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/help.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/help.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/historylog.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/historylog.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/index.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/index.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/installation.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/installation.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/internalconsole.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/internalconsole.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/ipythonconsole.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/ipythonconsole.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/manpage.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/manpage.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/onlinehelp.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/onlinehelp.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/options.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/options.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/overview.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/overview.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/projects.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/projects.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/pylint.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/pylint.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_sources/variableexplorer.rst.txt (spyder-doc) != /usr/share/doc/spyder-doc/html/_sources/variableexplorer.rst.txt (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static (spyder-doc) != /usr/share/doc/spyder-doc/html/_static (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/ajax-loader.gif (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/ajax-loader.gif (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/basic.css (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/basic.css (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/comment-bright.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/comment-bright.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/comment-close.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/comment-close.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/comment.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/comment.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/contents.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/contents.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/doctools.js (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/doctools.js (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/down-pressed.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/down-pressed.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/down.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/down.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/favicon.ico.gz (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/favicon.ico.gz (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/file.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/file.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/jquery.js (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/jquery.js (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/minus.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/minus.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/navigation.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/navigation.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/plus.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/plus.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/pygments.css (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/pygments.css (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/searchtools.js (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/searchtools.js (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/sphinxdoc.css (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/sphinxdoc.css (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/spyder_bbg.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/spyder_bbg.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/underscore.js (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/underscore.js (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/up-pressed.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/up-pressed.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/_static/up.png (spyder-doc) != /usr/share/doc/spyder-doc/html/_static/up.png (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/console.html (spyder-doc) != /usr/share/doc/spyder-doc/html/console.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/debugging.html (spyder-doc) != /usr/share/doc/spyder-doc/html/debugging.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/editor.html (spyder-doc) != /usr/share/doc/spyder-doc/html/editor.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/fileexplorer.html (spyder-doc) != /usr/share/doc/spyder-doc/html/fileexplorer.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/findinfiles.html (spyder-doc) != /usr/share/doc/spyder-doc/html/findinfiles.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/genindex.html (spyder-doc) != /usr/share/doc/spyder-doc/html/genindex.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/help.html (spyder-doc) != /usr/share/doc/spyder-doc/html/help.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/historylog.html (spyder-doc) != /usr/share/doc/spyder-doc/html/historylog.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/index.html (spyder-doc) != /usr/share/doc/spyder-doc/html/index.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/installation.html (spyder-doc) != /usr/share/doc/spyder-doc/html/installation.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/internalconsole.html (spyder-doc) != /usr/share/doc/spyder-doc/html/internalconsole.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/ipythonconsole.html (spyder-doc) != /usr/share/doc/spyder-doc/html/ipythonconsole.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/manpage.html (spyder-doc) != /usr/share/doc/spyder-doc/html/manpage.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/objects.inv (spyder-doc) != /usr/share/doc/spyder-doc/html/objects.inv (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/onlinehelp.html (spyder-doc) != /usr/share/doc/spyder-doc/html/onlinehelp.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/options.html (spyder-doc) != /usr/share/doc/spyder-doc/html/options.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/overview.html (spyder-doc) != /usr/share/doc/spyder-doc/html/overview.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/projects.html (spyder-doc) != /usr/share/doc/spyder-doc/html/projects.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/pylint.html (spyder-doc) != /usr/share/doc/spyder-doc/html/pylint.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/search.html (spyder-doc) != /usr/share/doc/spyder-doc/html/search.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/searchindex.js (spyder-doc) != /usr/share/doc/spyder-doc/html/searchindex.js (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html
  /usr/share/doc/spyder/html/variableexplorer.html (spyder-doc) != /usr/share/doc/spyder-doc/html/variableexplorer.html (?)
    /usr/share/doc/spyder/html -> ../spyder-doc/html


cheers,

Andreas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: spyder_3.2.6+dfsg1-2.log.gz
Type: application/gzip
Size: 118104 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/debian-science-maintainers/attachments/20181022/8dbeba4c/attachment-0001.gz>


More information about the debian-science-maintainers mailing list