On Tuesday, 21 January 2020 15:47:52 CET Miro Hrončok wrote:
On 31. 12. 19 11:24, Miro Hrončok wrote:
> Hello. I was hit by a infamous "replace a symlink to a directory with a
> directory" problem in
https://bugzilla.redhat.com/show_bug.cgi?id=1787079
>
>
> /usr/lib/python3.8/site-packages/notebook/static/components/moment
>
>
> This was a symbolic link, but now it is a directory. The error is:
>
> Error: Transaction test error:
>
> file
>
> /usr/lib/python3.8/site-packages/notebook/static/components/moment/min/loc
> ales.js from
install of python3-notebook-6.0.2-2.fc32.noarch conflicts
> with file from package js-moment-2.18.1-6.fc30.noarch
>
> file
>
> /usr/lib/python3.8/site-packages/notebook/static/components/moment/min/mom
> ent-with-locales.js
from install of python3-notebook-6.0.2-2.fc32.noarch
> conflicts with file from package js-moment-2.18.1-6.fc30.noarch
>
> file
>
> /usr/lib/python3.8/site-packages/notebook/static/components/moment/moment.
> js
from install of python3-notebook-6.0.2-2.fc32.noarch conflicts with
> file from package js-moment-2.18.1-6.fc30.noarch
>
> file /usr/lib/python3.8/site-packages/notebook/static/components/moment
> from
> install of python3-notebook-6.0.2-2.fc32.noarch conflicts with file from
> package
python3-notebook-6.0.2-1.fc32.noarch
>
>
> When I add:
>
> $ rpm -q --scripts -p python3-notebook-6.0.2-3.fc32.noarch.rpm
> pretrans scriptlet (using <lua>):
> path =
> "/usr/lib/python3.8/site-packages/notebook/static/components/moment"
st
> = posix.stat(path)
> if st and st.type == "link" then
>
> os.remove(path)
>
> end
>
> Code:
https://src.fedoraproject.org/rpms/python-notebook/pull-request/17
>
> I still get:
>
> Error: Transaction test error:
>
> file
>
> /usr/lib/python3.8/site-packages/notebook/static/components/moment/min/loc
> ales.js from
install of python3-notebook-6.0.2-3.fc32.noarch conflicts
> with file from package js-moment-2.18.1-6.fc30.noarch
>
> file
>
> /usr/lib/python3.8/site-packages/notebook/static/components/moment/min/mom
> ent-with-locales.js
from install of python3-notebook-6.0.2-3.fc32.noarch
> conflicts with file from package js-moment-2.18.1-6.fc30.noarch
>
> file
>
> /usr/lib/python3.8/site-packages/notebook/static/components/moment/moment.
> js
from install of python3-notebook-6.0.2-3.fc32.noarch conflicts with
> file from package js-moment-2.18.1-6.fc30.noarch
>
>
> What am I doing wrong?
>
>
>
> Note that I have tried to add this workaround instead:
>
>
> mv moment moment.bundled
> ln -vfs moment.bundled moment
>
>
> But that clears the update path from 6.0.2-1, but breaks it from 6.0.2-2.
>
> Error: Transaction test error:
>
> file /usr/lib/python3.8/site-packages/notebook/static/components/moment
> from
> install of python3-notebook-6.0.2-3.fc32.noarch conflicts with file from
> package
python3-notebook-6.0.2-2.fc32.noarch
>
>
> And I would need to add the other (uglier) scriptlet to replace a
> directory with
a symbolic link :(
Does anybody know what's wrong with this? I am clueless. Thanks.
--
Miro Hrončok
--
Phone: +420777974800
IRC: mhroncok
_______________________________________________
packaging mailing list -- packaging(a)lists.fedoraproject.org
To unsubscribe send an email to packaging-leave(a)lists.fedoraproject.org
Fedora Code of Conduct:
https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List
Guidelines:
https://fedoraproject.org/wiki/Mailing_list_guidelines List
Archives:
https://lists.fedoraproject.org/archives/list/packaging@lists.fedoraproject
.org
Workaround:
=====================================================================
%global pypi_name notebook
Name: python-%{pypi_name}
%global _docdir_fmt %{name}
# Updating this package? Update the list of bundled things bellow
Version: 6.0.2
# a tag like rc1, set to %%{nil} if stable
%global tag %{nil}
# upstream version, like 1.2.3rc1
%global uversion %{version}%{tag}
Release: 3%{tag}%{?dist}
Summary: A web-based notebook environment for interactive computing
License: BSD
URL:
http://jupyter.org
Source0: %pypi_source %{pypi_name} %{uversion}
# Patch to use the TeX fonts from the MathJax package rather than STIXWeb
# See BZ: 1581899, 1580129
Patch0: 0001-Use-MathJax-TeX-fonts-rather-than-STIXWeb.patch
BuildArch: noarch
BuildRequires: python3-setuptools
BuildRequires: python3-devel
BuildRequires: git-core
# rebuilding js and css
BuildRequires: /usr/bin/node
# Tests:
BuildRequires: pandoc
BuildRequires: python3-dateutil
BuildRequires: python3-ipykernel >= 4.8
BuildRequires: python3-ipython_genutils
BuildRequires: python3-jupyter-client >= 5.2.0
BuildRequires: python3-jupyter-core >= 4.4.0
BuildRequires: python3-nbconvert
BuildRequires: python3-nbformat
BuildRequires: python3-nose
BuildRequires: python3-nose-exclude
BuildRequires: python3-nose_warnings_filters
BuildRequires: python3-pandocfilters
BuildRequires: python3-prometheus_client
BuildRequires: python3-send2trash
BuildRequires: python3-terminado >= 0.8.1
BuildRequires: python3-testpath
BuildRequires: python3-tornado
BuildRequires: python3-traitlets >= 4.2.1
# Docs:
BuildRequires: python3-nbsphinx
BuildRequires: python3-sphinx
BuildRequires: python3-sphinx_rtd_theme
BuildRequires: python3-sphinxcontrib-github-alt
BuildRequires: python3-ipython-sphinx
%?python_enable_dependency_generator
%global _description \
The Jupyter Notebook is a web application that allows you to create and \
share documents that contain live code, equations, visualizations, and \
explanatory text. The Notebook has support for multiple programming \
languages, sharing, and interactive widgets.
%description %_description
%package -n python3-%{pypi_name}
Summary: A web-based notebook environment for interactive computing
%{?python_provide:%python_provide python3-%{pypi_name}}
%{?python_provide:%python_provide python3-jupyter-%{pypi_name}}
%{?python_provide:%python_provide python3-ipython-%{pypi_name}}
Provides: python3-jupyter-%{pypi_name} = %{version}-%{release}
Provides: python3-ipython-%{pypi_name} = %{version}-%{release}
Obsoletes: python3-ipython-%{pypi_name} < 4
Provides: %{pypi_name} = %{version}-%{release}
Provides: jupyter-%{pypi_name} = %{version}-%{release}
Requires: fontawesome-fonts
Requires: fontawesome-fonts-web
Requires: mathjax >= 2.6
Requires: js-backbone >= 1.2
Requires: js-marked >= 0.3
Requires: js-underscore >= 1.8.3
# Versions from bower.json
Provides: bundled(bootstrap) = 3.4
Provides: bundled(bootstrap-tour) = 0.9.0
Provides: bundled(codemirror) = 5.48.4
Provides: bundled(create-react-class) = 15.6.3
Provides: bundled(es6-promise) = 1.0
Provides: bundled(google-caja) = 5669
Provides: bundled(jed) = 1.1.1
Provides: bundled(jquery) = 3.4.1
Provides: bundled(jquery-typeahead) = 2.0.0
Provides: bundled(jquery-ui) = 1.12
Provides: bundled(moment) = 2.19.3
Provides: bundled(react) = 16.0.0
Provides: bundled(requirejs) = 2.2
Provides: bundled(requirejs-text) = 2.0.15
Provides: bundled(requirejs-plugins) = 1.0.3
Provides: bundled(text-encoding) = 0.1
Provides: bundled(xterm.js) = 2.9.2
# See
https://bugzilla.redhat.com/show_bug.cgi?id=1580129
#Provides: bundled(mathjax) = 2.7.4
%description -n python3-%{pypi_name} %_description
%package -n python-%{pypi_name}-doc
Summary: notebook documentation
%description -n python-%{pypi_name}-doc
Documentation for notebook
%prep
%autosetup -n %{pypi_name}-%{uversion} -S git
%build
%py3_build
# generate html docs
sphinx-build-3 -D intersphinx_timeout=1 docs/source html
# remove the sphinx-build leftovers
rm -rf html/.{doctrees,buildinfo}
%install
%py3_install
#
https://github.com/jupyter/notebook/issues/2373
rm -f %{buildroot}%{_bindir}/less-watch
# unbundle stuff
pushd %{buildroot}%{python3_sitelib}/%{pypi_name}/static/components
rm -r font-awesome/fonts
ln -vfs %{_datadir}/fonts/fontawesome font-awesome/fonts
#temporarily kept bundled to workaround #1580129
rm -r MathJax
ln -vfs %{_datadir}/javascript/mathjax MathJax
rm -r backbone
ln -vfs %{_datadir}/javascript/backbone backbone
rm -r marked/lib
ln -vfs %{_datadir}/javascript/marked marked/lib
rm -r underscore
ln -vfs %{_datadir}/javascript/underscore underscore
popd
mv %{buildroot}%{python3_sitelib}/%{pypi_name}/static/components/moment %
{buildroot}%{python3_sitelib}/%{pypi_name}/static/components/moment2
%check
# Workaround: OSError: [Errno 18] Invalid cross-device link: b'/tmp/...' ->
b'/builddir/.local/share/Trash/files/...'
mkdir .tmp
export TMPDIR=$(pwd)/.tmp
nosetests-3 -v --exclude-dir notebook/tests/selenium
# This was previously unbundled, but no more
# See
https://docs.fedoraproject.org/en-US/packaging-guidelines/
Directory_Replacement/
%pretrans -n python3-%{pypi_name} -p <lua>
path = "%{python3_sitelib}/%{pypi_name}/static/components/moment"
st = posix.stat(path)
if st and st.type == "link" then
os.remove(path)
end
%posttrans -n python3-%{pypi_name} -p <lua>
originalpath = "%{python3_sitelib}/%{pypi_name}/static/components/moment"
path = "%{python3_sitelib}/%{pypi_name}/static/components/moment2"
st = posix.stat(path)
if st and st.type == "directory" then
os.rename(path, originalpath)
end
%files -n python3-%{pypi_name}
%doc README.md
%license LICENSE
%{_bindir}/jupyter-bundlerextension
%{_bindir}/jupyter-nbextension
%{_bindir}/jupyter-serverextension
%{_bindir}/jupyter-notebook
%{python3_sitelib}/%{pypi_name}-%{uversion}-py*.egg-info
%{python3_sitelib}/%{pypi_name}/
%ghost %{python3_sitelib}/%{pypi_name}/static/components/moment
%files -n python-%{pypi_name}-doc
%doc html
%license LICENSE
%changelog
=====================================================================
You will get message like this at update/uninstall but there are not fatal:
warning: file /usr/lib/python3.8/site-packages/notebook/static/components/
moment2/moment.js: remove failed: No such file or directory
warning: file /usr/lib/python3.8/site-packages/notebook/static/components/
moment2/min/moment.min.js: remove failed: No such file or directory
warning: file /usr/lib/python3.8/site-packages/notebook/static/components/
moment2/min/moment-with-locales.min.js: remove failed: No such file or
directory
warning: file /usr/lib/python3.8/site-packages/notebook/static/components/
moment2/min/moment-with-locales.js: remove failed: No such file or directory
warning: file /usr/lib/python3.8/site-packages/notebook/static/components/
moment2/min/locales.min.js: remove failed: No such file or directory
warning: file /usr/lib/python3.8/site-packages/notebook/static/components/
moment2/min/locales.js: remove failed: No such file or directory
warning: file /usr/lib/python3.8/site-packages/notebook/static/components/
moment2/min: remove failed: No such file or directory
warning: file /usr/lib/python3.8/site-packages/notebook/static/components/
moment2: remove failed: No such file or directory
This work because we are triggering the beingRemoved and have RPMTAG_PRETRANS
path of the code which cause rConflicts to be 0:
if (beingRemoved) {
rConflicts = handleRemovalConflict(fi, fx, otherFi, ofx);
if (rConflicts && rpmteHaveTransScript(p, RPMTAG_PRETRANS)) {
if (rpmtsFlags(ts) & RPMTRANS_FLAG_TEST)
rConflicts = 0;
}
}
Still I think the issue should be reported upstream.
Don't forget the %ghost directive so that the correct path is effectively
handled by rpm on future removal/upgrade.