#
# Conditional build:
-%bcond_without tests # don't perform make test
-%bcond_with tests_cvs # perform tests which use CVS
-%bcond_without tests_svn # perform tests which use subversion
-%bcond_without doc # skip building/packaging docs/manuals (takes some time)
+%bcond_without tests # test suite
+%bcond_with tests_cvs # tests which use CVS
+%bcond_without tests_svn # tests which use subversion
+%bcond_without doc # building/packaging docs/manuals (takes some time)
%bcond_without pcre # perl-compatible regexes support
-%bcond_without gnome_keyring # build without gnome keyring support
+%bcond_without gnome_keyring # gnome keyring credentials support
+%bcond_without libsecret # libsecret credentials support
+%bcond_without tk # Tcl/Tk interface
# for AC: --without doc --without gnome_keyring --without tests
-%include /usr/lib/rpm/macros.perl
Summary: Distributed version control system focused on speed, effectivity and usability
Summary(pl.UTF-8): Rozproszony system śledzenia treści skupiony na szybkości, wydajności i użyteczności
Name: git-core
-Version: 2.1.3
+Version: 2.29.0
Release: 1
License: GPL v2
Group: Development/Tools
-Source0: http://www.kernel.org/pub/software/scm/git/git-%{version}.tar.gz
-# Source0-md5: 9dfb41c1abb4ce0f49c8484a36cadf65
+Source0: http://www.kernel.org/pub/software/scm/git/git-%{version}.tar.xz
+# Source0-md5: b07a283043e089dca8d2174d2654191b
Source1: %{name}-gitweb.conf
Source2: %{name}-gitweb-httpd.conf
Source3: %{name}-gitweb-lighttpd.conf
Source5: %{name}.inet
Source6: %{name}.init
Source7: gitolite.pl
-Patch0: %{name}-tests.patch
-Patch1: %{name}-key-bindings.patch
-Patch2: %{name}-sysconfdir.patch
-Patch3: cherry-picked-commitlog.patch
-Patch4: %{name}-svn-exit-errors.patch
+Patch0: %{name}-key-bindings.patch
+Patch1: %{name}-sysconfdir.patch
+Patch2: cherry-picked-commitlog.patch
URL: http://git-scm.com/
BuildRequires: autoconf >= 2.59
BuildRequires: automake
BuildRequires: curl-devel
BuildRequires: expat-devel
+%if "%{pld_release}" == "ac"
BuildRequires: gettext-devel
+%else
+BuildRequires: gettext-tools
+%endif
+%if %{with gnome_keyring} || %{with libsecret}
+BuildRequires: glib2-devel >= 2.0
+%endif
%if %{with gnome_keyring}
BuildRequires: libgnome-keyring-devel
-BuildRequires: pkgconfig
+%endif
+%if %{with libsecret}
+BuildRequires: libsecret-devel
%endif
BuildRequires: openssl-devel
-%{?with_pcre:BuildRequires: pcre-devel}
+%{?with_pcre:BuildRequires: pcre2-8-devel}
BuildRequires: perl-Error > 0.15
+BuildRequires: perl-MailTools
BuildRequires: perl-base
+%if %{with gnome_keyring} || %{with libsecret}
+BuildRequires: pkgconfig
+%endif
BuildRequires: python-devel
BuildRequires: rpm-perlprov >= 4.1-13
BuildRequires: rpm-pythonprov
-BuildRequires: rpmbuild(macros) >= 1.673
-BuildRequires: tcl
+BuildRequires: rpmbuild(macros) >= 1.745
+%if %{with tk}
+# wish
+BuildRequires: tk
+%endif
BuildRequires: zlib-devel
%if %{with doc}
BuildRequires: asciidoc >= 7.1.2-3
BuildRequires: xmlto
%endif
%if %{with tests}
+BuildRequires: perl-CGI
+BuildRequires: perl-Digest-MD5
+BuildRequires: perl-Encode
+BuildRequires: perl-Time-HiRes
%if %{with tests_cvs}
# tests failed sometimes when using nserver/cvsnt client so enforce pure cvs here
BuildRequires: cvs-gnu-client < 1.13
BuildRequires: cvs-gnu-client >= 1.12
%endif
-%{?with_tests_svn:BuildRequires: subversion}
+%if %{with tests_svn}
+BuildRequires: perl-subversion
+BuildRequires: subversion
+%endif
Conflicts: pdksh < 5.2.14-46
%endif
# git-sh-setup: sane_grep
Requires: grep
# git-pull: printf
Requires: coreutils
-Requires: openssh-clients
-Requires: perl-Error
-Requires: perl-Git = %{version}-%{release}
Requires: sed
Suggests: git-core-bzr
Suggests: git-core-cvs
Suggests: git-core-p4
Suggests: git-core-svn
Suggests: less
+Suggests: openssh-clients
+Suggests: perl-Git = %{version}-%{release}
Suggests: rsync
+Obsoletes: git-core-gitview
Obsoletes: python-Git
+Conflicts: perl-Git < %{version}
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
# html docs have links to txt files
%define _noautocompressdoc *.txt
+# do not generate perl dependency, git add -p support is optional
+# skip dependency generation from templates
+%define _noautoreqfiles %{_libexecdir}/%{name}/git-add--interactive %{_datadir}/%{name}/templates
+
%define webapp gitweb
%define webappdir %{_sysconfdir}/webapps/%{webapp}
%define appdir %{_datadir}/%{webapp}
%define cgibindir %{_prefix}/lib/cgi-bin
-%define gitcoredir %{_libdir}/%{name}
+%define gitcoredir %{_libexecdir}/%{name}
%description
"git" can mean anything, depending on your mood.
Summary: Documentation for git-core
Summary(pl.UTF-8): Dokumentacja do git-core
Group: Documentation
+%if "%{_rpmversion}" >= "5"
+BuildArch: noarch
+%endif
%description doc
Documentation for git-core.
%description doc -l pl.UTF-8
Dokumentacja do git-core.
-%description doc -l fr.UTF-8
-Javadoc pour git-core.
-
%package daemon-inetd
Summary: Files necessary to run git-daemon as an inetd service
Summary(pl.UTF-8): Pliki niezbędne do uruchomienia git-daemona w trybie usługi inetd
Group: Development/Tools
Requires: %{name} = %{version}-%{release}
Requires: tk
+%if "%{_rpmversion}" >= "5"
+BuildArch: noarch
+%endif
%description gitk
gitk displays changes in a repository or a selected set of commits.
%description gitweb -l pl.UTF-8
Pakiet ten dostarcza interfejs WWW do przeglądania repozytoriów gita.
-%package gitview
-Summary: A GTK+ based repository browser for git
-Summary(pl.UTF-8): Oparta na GTK+ przeglądarka repozytorium gita
-Group: Development/Tools
-Requires: %{name} = %{version}-%{release}
-Requires: python >= 1:2.4
-Requires: python-pycairo >= 1.0
-Requires: python-pygobject
-Requires: python-pygtk-gtk >= 2:2.8
-Suggests: python-gnome-desktop-gtksourceview
-
-%description gitview
-A GTK+ based repository browser for git.
-
-%description gitview -l pl.UTF-8
-Oparta na GTK+ przeglądarka repozytorium gita.
-
%package gui
Summary: Tcl/Tk interface to the Git version control system
Summary(pl.UTF-8): Napisany w Tcl/Tk interfejs do systemu kontroli wersji Git
Summary(pl.UTF-8): Narzędzia Gita do wysyłania poczty
Group: Development/Tools
Requires: %{name} = %{version}-%{release}
+Requires: perl-Error
+Requires: perl-MailTools
+Suggests: perl-Net-SMTP-SSL
%description email
Git tools for sending email.
Summary(pl.UTF-8): Perlowy interfejs do systemu kontroli wersji Git
Group: Development/Languages/Perl
Obsoletes: perl-git-core
+%if "%{_rpmversion}" >= "5"
+BuildArch: noarch
+%endif
%description -n perl-Git
This module provides Perl scripts easy way to interface the Git
%package -n gnome-keyring-git-core
Summary: GNOME Keyring authentication provider for Git
-Summary(pl.UTF-8): Moduł uwierzytelniający GNOME Keyring dla Git
+Summary(pl.UTF-8): Moduł uwierzytelniający GNOME Keyring dla Gita
Group: X11/Applications
URL: http://git-scm.com/docs/gitcredentials.html
Requires: %{name} = %{version}-%{release}
- git config --global credential.helper gnome-keyring
%description -n gnome-keyring-git-core -l pl.UTF-8
-Moduł uwierzytelniający dla Subversion pozwalający klientom git
+Moduł uwierzytelniający dla Gita pozwalający klientom git
uwierzytelniać się przy użyciu mechanizmu GNOME Keyring.
Moduł trzeba zarejestrować poleceniem:
- git config --global credential.helper gnome-keyring
+%package credential-libsecret
+Summary: GNOME authentication provider for Git using libsecret
+Summary(pl.UTF-8): Moduł uwierzytelniający GNOME dla Gita wykorzystujący libsecret
+Group: X11/Applications
+URL: http://git-scm.com/docs/gitcredentials.html
+Requires: %{name} = %{version}-%{release}
+
+%description credential-libsecret
+Authentication provider module for Git which allows git client to
+authenticate using GNOME libsecret.
+
+You need to register it with:
+- git config --global credential.helper libsecret
+
+%description credential-libsecret -l pl.UTF-8
+Moduł uwierzytelniający dla Gita pozwalający klientom git
+uwierzytelniać się przy użyciu mechanizmu GNOME libsecret.
+
+Moduł trzeba zarejestrować poleceniem:
+- git config --global credential.helper libsecret
+
%prep
%setup -q -n git-%{version}
-%patch0 -p1
-%patch1 -p0
+%patch0 -p0
+%patch1 -p1
%patch2 -p1
-%patch3 -p1
-%patch4 -p1
-%{__rm} {Documentation/technical,contrib/emacs,contrib/credential/gnome-keyring}/.gitignore
+%{__rm} {Documentation/technical,contrib/credential/gnome-keyring}/.gitignore
+
+# we build things in contrib but want to have it clean for doc purporses, too
+cp -a contrib contrib-doc
+
+%{__sed} -i -e '1s|#!/usr/bin/env python$|#!%{__python}|' git-p4.py
%build
%{__aclocal}
%{__autoconf}
%configure \
--sysconfdir=%{_sysconfdir}/git-core \
- %{?with_pcre:--with-libpcre} \
+ %{?with_pcre:--with-libpcre2} \
--with-openssl
echo "BLK_SHA1=1" >> config.mak
%{__make} \
- INSTALLDIRS=vendor \
GITWEB_CONFIG="%{webappdir}/gitweb.conf" \
GITWEB_PROJECTROOT="/var/lib/git" \
GITWEB_CSS="/gitweb/gitweb.css" \
GITWEB_LOGO="/gitweb/git-logo.png" \
GITWEB_FAVICON="/gitweb/git-favicon.png" \
+ NO_PERL_CPAN_FALLBACKS=1 \
+ perllibdir=%{perl_vendorlib} \
V=1
%{__make} -C contrib/subtree
%if %{with gnome_keyring}
-%{__make} -C contrib/credential/gnome-keyring
+%{__make} -C contrib/credential/gnome-keyring \
+ CC="%{__cc}" \
+ CFLAGS="%{rpmcflags} -Wall" \
+ LDFLAGS="%{rpmldflags}"
+%endif
+
+%if %{with libsecret}
+%{__make} -C contrib/credential/libsecret \
+ CC="%{__cc}" \
+ CFLAGS="%{rpmcflags} -Wall" \
+ LDFLAGS="%{rpmldflags}"
%endif
%if %{with doc}
-%{__make} -C Documentation \
+%{__make} doc \
MAN_BASE_URL=file://%{_docdir}/%{name}-doc-%{version}/ \
V=1
%endif
%if %{without tests_cvs}
%{__rm} t/t*cvs*.sh || :
%endif
-%{!?with_tests_svn:GIT_SKIP_TESTS='t91??'} %{__make} test
+%if %{without tests_svn}
+GIT_SKIP_TESTS="$GIT_SKIP_TESTS t91??"
+%endif
+export GIT_SKIP_TESTS
+%{__make} test \
+ NO_PERL_CPAN_FALLBACKS=1
%endif
%install
rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{%{_includedir}/%{name}/xdiff,%{_localstatedir}/lib/git}
+install -d $RPM_BUILD_ROOT{%{_includedir}/%{name}/xdiff,%{_libdir},%{_localstatedir}/lib/git}
install -d $RPM_BUILD_ROOT{%{appdir},%{cgibindir},%{webappdir}}
install -d $RPM_BUILD_ROOT/etc/{sysconfig/rc-inetd,rc.d/init.d}
install -d $RPM_BUILD_ROOT%{_sysconfdir}/%{name}
EOF
%{__make} install \
- INSTALLDIRS=vendor \
- DESTDIR=$RPM_BUILD_ROOT
+ DESTDIR=$RPM_BUILD_ROOT \
+ NO_PERL_CPAN_FALLBACKS=1 \
+ perllibdir=%{perl_vendorlib}
%if %{with doc}
-%{__make} -C Documentation install \
+%{__make} install-doc \
DESTDIR=$RPM_BUILD_ROOT
%endif
DESTDIR=$RPM_BUILD_ROOT
%if %{with doc}
-%{__make} -C contrib/subtree install-doc \
+%{__make} -C contrib/subtree install-man \
DESTDIR=$RPM_BUILD_ROOT
%endif
%if %{with gnome_keyring}
install -p contrib/credential/gnome-keyring/git-credential-gnome-keyring $RPM_BUILD_ROOT%{gitcoredir}
-# Remove built binary files, otherwise they will be installed in doc
-%{__make} -C contrib/credential/gnome-keyring clean
+%endif
+
+%if %{with libsecret}
+install -p contrib/credential/libsecret/git-credential-libsecret $RPM_BUILD_ROOT%{gitcoredir}
%endif
# bash completion
install -p contrib/remote-helpers/git-remote-{bzr,hg} $RPM_BUILD_ROOT%{gitcoredir}
# gitweb
-mv $RPM_BUILD_ROOT{%{appdir},%{cgibindir}}/gitweb.cgi
+%{__mv} $RPM_BUILD_ROOT{%{appdir},%{cgibindir}}/gitweb.cgi
ln -s %{cgibindir}/gitweb.cgi $RPM_BUILD_ROOT%{appdir}/gitweb.cgi
cp -p %{SOURCE1} $RPM_BUILD_ROOT%{webappdir}/gitweb.conf
cp -p %{SOURCE7} $RPM_BUILD_ROOT%{webappdir}/gitolite.pl
cp -p %{SOURCE2} $RPM_BUILD_ROOT%{webappdir}/httpd.conf
cp -p %{SOURCE3} $RPM_BUILD_ROOT%{webappdir}/lighttpd.conf
-# gitview
-install -p contrib/gitview/gitview $RPM_BUILD_ROOT%{_bindir}
-
# git-daemon related files
cp -p %{SOURCE4} $RPM_BUILD_ROOT/etc/sysconfig/git-daemon
cp -p %{SOURCE5} $RPM_BUILD_ROOT/etc/sysconfig/rc-inetd/git-daemon
install -p %{SOURCE6} $RPM_BUILD_ROOT/etc/rc.d/init.d/git-daemon
# paths cleanup
-sed -e 's,@libdir@,%{_libdir},g' -i $RPM_BUILD_ROOT/etc/rc.d/init.d/git-daemon
-sed -e 's,@libdir@,%{_libdir},g' -i $RPM_BUILD_ROOT/etc/sysconfig/rc-inetd/git-daemon
-
-# hardlink
-ln -f $RPM_BUILD_ROOT%{_bindir}/{git,git-receive-pack}
-ln -f $RPM_BUILD_ROOT%{_bindir}/{git,git-upload-archive}
-ln -f $RPM_BUILD_ROOT{%{gitcoredir},%{_bindir}}/git-shell
-ln -f $RPM_BUILD_ROOT{%{gitcoredir},%{_bindir}}/git-upload-pack
+sed -e 's,@libdir@/git-core,%{gitcoredir},g' -i $RPM_BUILD_ROOT/etc/rc.d/init.d/git-daemon
+sed -e 's,@libdir@/git-core,%{gitcoredir},g' -i $RPM_BUILD_ROOT/etc/sysconfig/rc-inetd/git-daemon
+
+# same file, link
+ln -sf git $RPM_BUILD_ROOT%{_bindir}/git-receive-pack
+ln -sf git $RPM_BUILD_ROOT%{_bindir}/git-upload-archive
+ln -sf ../..%{gitcoredir}/git-shell $RPM_BUILD_ROOT%{_bindir}/git-shell
+ln -sf ../..%{gitcoredir}/git-upload-pack $RPM_BUILD_ROOT%{_bindir}/git-upload-pack
+ln -sf ../..%{gitcoredir}/git $RPM_BUILD_ROOT%{_bindir}/git
+
+# convert all hardlinks to symlinks, as rpm fails to calculate it properly
+# requiring excessive free space when it may not be available
+# https://bugs.launchpad.net/pld-linux/+bug/1176337
+find $RPM_BUILD_ROOT%{gitcoredir} -samefile $RPM_BUILD_ROOT%{gitcoredir}/git > files
+for f in $(cat files); do
+ f=${f#$RPM_BUILD_ROOT%{gitcoredir}/}
+ test $f = git && continue
+ ln -snf git $RPM_BUILD_ROOT%{gitcoredir}/$f
+done
+
+# few others
+ln -snf git-gui $RPM_BUILD_ROOT%{gitcoredir}/git-citool
+ln -snf git-remote-http $RPM_BUILD_ROOT%{gitcoredir}/git-remote-https
+ln -snf git-remote-http $RPM_BUILD_ROOT%{gitcoredir}/git-remote-ftp
+ln -snf git-remote-http $RPM_BUILD_ROOT%{gitcoredir}/git-remote-ftps
# remove unneeded files
-%{__rm} $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod
-%{__rm} $RPM_BUILD_ROOT%{perl_vendorarch}/auto/Git/.packlist
%py_postclean
-mv $RPM_BUILD_ROOT%{_localedir}/pt{_PT,}
+%{__mv} $RPM_BUILD_ROOT%{_localedir}/pt{_PT,}
%find_lang git
%clean
%files -f git.lang
%defattr(644,root,root,755)
-%doc README contrib
+%doc README.md contrib-doc
%attr(755,root,root) %{_bindir}/git
%attr(755,root,root) %{_bindir}/git-receive-pack
%attr(755,root,root) %{_bindir}/git-shell
%exclude %{_mandir}/man1/git-imap-send*.1*
%exclude %{_mandir}/man1/*email*.1*
%{_mandir}/man1/git.1*
-%{_mandir}/man1/gitremote-helpers.1*
%{_mandir}/man5/gitattributes.5*
%{_mandir}/man5/githooks.5*
%{_mandir}/man5/gitignore.5*
%{_mandir}/man7/gitcore-tutorial.7*
%{_mandir}/man7/gitcredentials.7*
%{_mandir}/man7/gitdiffcore.7*
+%{_mandir}/man7/giteveryday.7*
+%{_mandir}/man7/gitfaq.7*
%{_mandir}/man7/gitglossary.7*
%{_mandir}/man7/gitnamespaces.7*
+%{_mandir}/man7/gitremote-helpers.7*
%{_mandir}/man7/gitrevisions.7*
+%{_mandir}/man7/gitsubmodules.7*
%{_mandir}/man7/gittutorial-2.7*
%{_mandir}/man7/gittutorial.7*
%{_mandir}/man7/gitworkflows.7*
%exclude %{gitcoredir}/*email*
%exclude %{gitcoredir}/*p4*
%exclude %{gitcoredir}/git-archimport
+%exclude %{gitcoredir}/git-citool
%exclude %{gitcoredir}/git-cvs*
%exclude %{gitcoredir}/git-gui
%exclude %{gitcoredir}/git-imap-send
%exclude %{gitcoredir}/git-instaweb
%exclude %{gitcoredir}/git-remote-bzr
%exclude %{gitcoredir}/git-remote-hg
-%exclude %{gitcoredir}/git-remote-testsvn
%exclude %{gitcoredir}/git-svn
%exclude %{gitcoredir}/mergetools/p4merge
%if %{with gnome_keyring}
%exclude %{gitcoredir}/git-credential-gnome-keyring
%endif
+%if %{with libsecret}
+%exclude %{gitcoredir}/git-credential-libsecret
+%endif
%if %{with doc}
%files doc
%{_libdir}/libgit.a
%{_libdir}/libgit_xdiff.a
+%if %{with tk}
%files gitk
%defattr(644,root,root,755)
%if %{with doc}
%dir %{_datadir}/gitk/lib
%dir %{_datadir}/gitk/lib/msgs
%lang(bg) %{_datadir}/gitk/lib/msgs/bg.msg
+%lang(ca) %{_datadir}/gitk/lib/msgs/ca.msg
%lang(de) %{_datadir}/gitk/lib/msgs/de.msg
%lang(es) %{_datadir}/gitk/lib/msgs/es.msg
%lang(fr) %{_datadir}/gitk/lib/msgs/fr.msg
%lang(it) %{_datadir}/gitk/lib/msgs/it.msg
%lang(ja) %{_datadir}/gitk/lib/msgs/ja.msg
%lang(pt_BR) %{_datadir}/gitk/lib/msgs/pt_br.msg
+%lang(pt_PT) %{_datadir}/gitk/lib/msgs/pt_pt.msg
%lang(ru) %{_datadir}/gitk/lib/msgs/ru.msg
%lang(sv) %{_datadir}/gitk/lib/msgs/sv.msg
%lang(vi) %{_datadir}/gitk/lib/msgs/vi.msg
+%lang(zh_CN) %{_datadir}/gitk/lib/msgs/zh_cn.msg
+%endif
%files gitweb
%defattr(644,root,root,755)
%{_mandir}/man5/gitweb.conf.5*
%endif
-%files gitview
-%defattr(644,root,root,755)
-%doc contrib/gitview/gitview.txt
-%attr(755,root,root) %{_bindir}/gitview
-
+%if %{with tk}
%files gui
%defattr(644,root,root,755)
+%attr(755,root,root) %{gitcoredir}/git-citool
%attr(755,root,root) %{gitcoredir}/git-gui
%dir %{_datadir}/git-gui
%dir %{_datadir}/git-gui/lib
%lang(it) %{_datadir}/git-gui/lib/msgs/it.msg
%lang(ja) %{_datadir}/git-gui/lib/msgs/ja.msg
%lang(nb) %{_datadir}/git-gui/lib/msgs/nb.msg
-%lang(pt_br) %{_datadir}/git-gui/lib/msgs/pt_br.msg
+%lang(pt) %{_datadir}/git-gui/lib/msgs/pt_pt.msg
+%lang(pt_BR) %{_datadir}/git-gui/lib/msgs/pt_br.msg
%lang(ru) %{_datadir}/git-gui/lib/msgs/ru.msg
%lang(sv) %{_datadir}/git-gui/lib/msgs/sv.msg
+%lang(vi) %{_datadir}/git-gui/lib/msgs/vi.msg
%lang(zh_CN) %{_datadir}/git-gui/lib/msgs/zh_cn.msg
+%endif
%files arch
%defattr(644,root,root,755)
%files svn
%defattr(644,root,root,755)
%attr(755,root,root) %{gitcoredir}/git-svn
-%attr(755,root,root) %{gitcoredir}/git-remote-testsvn
%{perl_vendorlib}/Git/SVN
%{perl_vendorlib}/Git/SVN.pm
%if %{with doc}
%dir %{perl_vendorlib}/Git
%{perl_vendorlib}/Git/I18N.pm
%{perl_vendorlib}/Git/IndexInfo.pm
-%{_mandir}/man3/Git*.3pm*
+%{perl_vendorlib}/Git/LoadCPAN.pm
+%{perl_vendorlib}/Git/Packet.pm
+%dir %{perl_vendorlib}/Git/LoadCPAN
+%{perl_vendorlib}/Git/LoadCPAN/Error.pm
+%dir %{perl_vendorlib}/Git/LoadCPAN/Mail
+%{perl_vendorlib}/Git/LoadCPAN/Mail/Address.pm
+%{?with_doc:%{_mandir}/man3/Git.3pm*}
%if %{with gnome_keyring}
%files -n gnome-keyring-git-core
%defattr(644,root,root,755)
%attr(755,root,root) %{gitcoredir}/git-credential-gnome-keyring
%endif
+
+%if %{with libsecret}
+%files credential-libsecret
+%defattr(644,root,root,755)
+%attr(755,root,root) %{gitcoredir}/git-credential-libsecret
+%endif