Prepare Mercurial for Py2 & Py3

- separate lang into the own subpackage as files are shared between
  mercurial for both pythons
- extensions are now prepared and working only under Python2
- the core mercurial is prepared in mercurial-python3 subpackage providing
  the hg3 executable
- Relates: #1737931
This commit is contained in:
Petr Stodulka 2019-08-05 21:39:10 +02:00
parent b7dea994db
commit 53899096c8
4 changed files with 124 additions and 13 deletions

37
0001-setup-hg3.patch Normal file
View File

@ -0,0 +1,37 @@
From 313f85a013b487149bff441411d4b643d0cea6c2 Mon Sep 17 00:00:00 2001
From: Petr Stodulka <pstodulk@redhat.com>
Date: Thu, 15 Aug 2019 01:20:11 +0200
Subject: [PATCH] create hg3 bin/script to keep Py2 & Py3 mercurial
installable..
This can be removed completely once the mercurial for Python2 is
removed
---
setup.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/setup.py b/setup.py
index 99556ce..5e30421 100644
--- a/setup.py
+++ b/setup.py
@@ -207,6 +207,8 @@ def write_if_changed(path, content):
fh.write(content)
scripts = ['hg']
+if 'HGPYTHON3' in os.environ:
+ scripts = ['hg3']
if os.name == 'nt':
# We remove hg.bat if we are able to build hg.exe.
scripts.append('contrib/win32/hg.bat')
@@ -311,6 +313,8 @@ def findhg():
hgenv['HGPLAIN'] = '1'
hgenv['LANGUAGE'] = 'C'
hgcmd = ['hg']
+ if 'HGPYTHON3' in os.environ:
+ hgcmd = ['hg3']
# Run a simple "hg log" command just to see if using hg from the user's
# path works and can successfully interact with this repository. Windows
# gives precedence to hg.exe in the current directory, so fall back to the
--
2.21.0

View File

@ -3,7 +3,7 @@ diff -r 9d3628141c21 contrib/hg-ssh
+++ b/contrib/hg-ssh Tue Mar 05 07:26:54 2019 -0500
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python2
+#!/usr/bin/env python3
#
# Copyright 2005-2007 by Intevation GmbH <intevation@intevation.de>
#

13
hgk_python3.patch Normal file
View File

@ -0,0 +1,13 @@
diff --git a/hgext/hgk.py b/hgext/hgk.py
index 3da626e..61239e8 100644
--- a/hgext/hgk.py
+++ b/hgext/hgk.py
@@ -335,7 +335,7 @@ def revtree(ui, args, repo, full="tree", maxnr=0, parents=False):
('[OPTION]... REV...'))
def revlist(ui, repo, *revs, **opts):
"""print revisions"""
- if opts['header']:
+ if opts[u'header']:
full = "commit"
else:
full = None

View File

@ -1,4 +1,5 @@
%{!?python2_sitearch: %define python2_sitearch %(%{__python2} -c "from distutils.sysconfig import get_python2_lib; print get_python2_lib(1)")}
%{!?python3_sitearch: %define python3_sitearch %(%{__python3} -c "from distutils.sysconfig import get_python3_lib; print(get_python3_lib(1))")}
Summary: Mercurial -- a distributed SCM
Name: mercurial
@ -16,10 +17,13 @@ URL: http://www.selenic.com/mercurial/
Source0: http://www.selenic.com/mercurial/release/%{name}-%{upstreamversion}.tar.gz
Source1: mercurial-site-start.el
Patch0: contrib-hg-ssh.patch
Patch1: hgk_python3.patch
Patch2: 0001-setup-hg3.patch
BuildRequires: python2 python2-devel bash-completion
BuildRequires: emacs-nox emacs-el pkgconfig gettext python2-docutils
BuildRequires: gcc
Requires: python2 emacs-filesystem
Requires: %{name}-lang = %{version}-%{release}
Provides: hg = %{version}-%{release}
Obsoletes: emacs-mercurial <= 3.4.1, emacs-mercurial-el <= 3.4.1
Provides: emacs-mercurial <= 3.4.1, emacs-mercurial-el <= 3.4.1
@ -36,11 +40,22 @@ Extensions: http://www.selenic.com/mercurial/wiki/index.cgi/CategoryExtension
# If the emacs-el package has installed a pkgconfig file, use that to determine
%package py3
Summary: Mercurial -- a distributed SCM for Python3
Provides: hg3 = %{version}-%{release}
Requires: python3 emacs-filesystem
BuildRequires: python3 python3-devel bash-completion
BuildRequires: emacs-nox emacs-el pkgconfig gettext python3-docutils
Requires: %{name}-lang = %{version}-%{release}
%description py3
Subpackage with mercurial for Python3. This is beta version with own problems.
%package hgk
Summary: Hgk interface for mercurial
Requires: hg = %{version}-%{release}, tk
%description hgk
A Mercurial extension for displaying the change history graphically
using Tcl/Tk. Displays branches and merges in an easily
@ -51,6 +66,7 @@ Adds the "hg view" command. See
http://www.selenic.com/mercurial/wiki/index.cgi/UsingHgk for more
documentation.
%package chg
Summary: A fast client for Mercurial command server running on Unix. It saves time of slow Python startup.
Requires: hg = %{version}-%{release}
@ -65,25 +81,44 @@ Mercurial. When you type chg, a C program connects to that background process
and executes Mercurial commands.
%package lang
Summary: Locales for mercurial
%description lang
Locales for mercurial.
%prep
%setup -q -n %{name}-%{upstreamversion}
# Patch files to use python2 instead of (since lately) non existent python binary.
sed -ri 's|python\b|python2|' %{_builddir}/%{name}-%{version}/Makefile %{_builddir}/%{name}-%{version}/doc/Makefile
# NOTE: Use PYTHON envar instead of pathing Makefiles
# sed -ri 's|python\b|python2|' %{_builddir}/%{name}-%{version}/Makefile %{_builddir}/%{name}-%{version}/doc/Makefile
%patch0 -p1 -b .contrib-hg-ssh
# NOTE: The patch1 cannot be applied here as it has to be kept as it is for py2 version..
# %%patch1 -p1 -b .hgk_python3
%patch2 -p1 -b .create_hg3
%build
make all
# copy hg to hg3 to be able to create /usr/bin/hg3 script
cp -a hg hg3
PYTHON=%{__python3} HGPYTHON3=1 make all
PYTHON=%{__python2} make all
#TODO: Now just for Py2, version for Py3 will need probably more fixes
# in installer - and possibly some renames..
pushd contrib/chg
make
popd
%install
# NOTE: this is nasty, but if we want to have parallel Py2/Py3 mercurial..
# ignoring now stuff related to *_completion, extensions
rm -rf $RPM_BUILD_ROOT
HGPYTHON3=1 %{__python3} setup.py install -O1 --root $RPM_BUILD_ROOT --prefix %{_prefix} --record=%{name}3.files
%{__python2} setup.py install -O1 --root $RPM_BUILD_ROOT --prefix %{_prefix} --record=%{name}.files
make install-doc DESTDIR=$RPM_BUILD_ROOT MANDIR=%{_mandir}
grep -v -e 'hgk.py*' -e %{python3_sitearch}/mercurial/ -e %{python3_sitearch}/hgext/ < %{name}3.files > %{name}3-base.files
grep -v -e 'hgk.py*' -e %{python2_sitearch}/mercurial/ -e %{python2_sitearch}/hgext/ < %{name}.files > %{name}-base.files
grep 'hgk.py*' < %{name}3.files > %{name}3-hgk.files
grep 'hgk.py*' < %{name}.files > %{name}-hgk.files
install -D -m 755 contrib/hgk $RPM_BUILD_ROOT%{_libexecdir}/mercurial/hgk
@ -134,25 +169,31 @@ cacerts = /etc/pki/tls/certs/ca-bundle.crt
EOF
install -m 644 certs.rc $RPM_BUILD_ROOT/%{_sysconfdir}/mercurial/hgrc.d
# NOTE: It looks that locales will have to be moved into the separate subpackage,
# despite the original path, locales should not be dependend on the version of
# python, so we can use one or the other for both mercurials
#mv $RPM_BUILD_ROOT%{python3_sitearch}/mercurial/locale $RPM_BUILD_ROOT%{_datadir}/locale
mv $RPM_BUILD_ROOT%{python2_sitearch}/mercurial/locale $RPM_BUILD_ROOT%{_datadir}/locale
rm -rf $RPM_BUILD_ROOT%{python3_sitearch}/mercurial/locale
rm -rf $RPM_BUILD_ROOT%{python2_sitearch}/mercurial/locale
%find_lang hg
grep -v locale %{name}-base.files > %{name}-base-filtered.files
grep -v locale %{name}3-base.files > %{name}3-base-filtered.files
%files -f %{name}-base-filtered.files -f hg.lang
%files -f %{name}-base-filtered.files
%doc CONTRIBUTORS COPYING doc/README doc/hg*.txt doc/hg*.html *.cgi contrib/*.fcgi contrib/*.wsgi
%doc %attr(644,root,root) %{_mandir}/man?/hg*.gz
%doc %attr(644,root,root) contrib/*.svg
%{_datadir}/zsh/site-functions/_mercurial
%{_bindir}/hg-ssh
%{_datadir}/bash-completion/
%dir %{_datadir}/zsh/
%{_datadir}/zsh/site-functions/
%dir %{_datadir}/zsh/site-functions/
%dir %{_sysconfdir}/mercurial
%dir %{_sysconfdir}/mercurial/hgrc.d
%{_bindir}/hg-ssh
%{_datadir}/bash-completion/
%{_datadir}/zsh/site-functions/_mercurial
%{python2_sitearch}/mercurial
%{python2_sitearch}/hgext
%{_emacs_sitelispdir}/mercurial
@ -160,6 +201,10 @@ grep -v locale %{name}-base.files > %{name}-base-filtered.files
%config(noreplace) %{_sysconfdir}/mercurial/hgrc.d/certs.rc
%files py3 -f %{name}3-base-filtered.files
%{python3_sitearch}/mercurial
%{python3_sitearch}/hgext
%files hgk -f %{name}-hgk.files
%{_libexecdir}/mercurial/
%{_sysconfdir}/mercurial/hgrc.d/hgk.rc
@ -168,11 +213,27 @@ grep -v locale %{name}-base.files > %{name}-base-filtered.files
%{_bindir}/chg
%doc %attr(644,root,root) %{_mandir}/man?/chg.*.gz
%files lang -f hg.lang
#%%check
#cd tests && %%{__python2} run-tests.py
# This will now fail everytime. Mercurial is not ported properly for Python3
# and current split of mercurial for Py2 and Py3 brings additional problems
# for extensions then pure Python3 packaging.
#cd tests && HGPYTHON3=1 %%{__python3} run-tests.py
##%%check
##cd tests && %%{__python} run-tests.py
%changelog
* Sat Oct 19 2019 Petr Stodulka <pstodulk@redhat.com> - 5.1.2-2
- first attempt to create builds for py2 & py3 version
- separate lang into the own subpackage as files are shared between
mercurial for both pythons
- extensions are now prepared and working only under Python2
- the core mercurial is prepared in mercurial-python3 subpackage providing
the hg3 executable
- Relates: #1737931
* Sat Oct 19 2019 Petr Stodulka <pstodulk@redhat.com> - 5.1.2-1
- Update to 5.1.2
- fix patching of Makefiles