%global gitexecdir          %{_libexecdir}/git-core
Name:       git
Version:    2.23.0
Release:    11
Summary:    A popular and widely used Version Control System
License:    GPLv2+ or LGPLv2.1
URL:        https://git-scm.com/
Source0:    https://www.kernel.org/pub/software/scm/git/%{name}-%{version}.tar.xz
Source1:    https://www.kernel.org/pub/software/scm/git/%{name}-%{version}.tar.sign

Source100:  git-gui.desktop
Source101:  git@.service.in
Source102:  git.socket

Patch0:     t9300-drop-some-useless-uses-of-cat.patch
Patch1:     fast-import-tighten-parsing-of-boolean-command-line-.patch
Patch2:     fast-import-stop-creating-leading-directories-for-im.patch
Patch3:     fast-import-delay-creating-leading-directories-for-e.patch
Patch4:     CVE-2019-1348.patch
Patch5:     CVE-2019-1349.patch
Patch6:     CVE-2019-1350.patch
Patch7:     CVE-2019-1351.patch
Patch8:     path.c-document-the-purpose-of-is_ntfs_dotgit.patch
Patch9:     CVE-2019-1352.patch
Patch10:    CVE-2019-1353.patch
Patch11:    CVE-2019-1354.patch
Patch12:    CVE-2019-1387.patch
Patch13:    CVE-2019-19604.patch

BuildRequires: openssl-devel libcurl-devel expat-devel systemd asciidoc xmlto glib2-devel libsecret-devel pcre-devel desktop-file-utils
BuildRequires: python3-devel perl-generators perl-interpreter perl-Error perl(Test::More) perl-MailTools perl(Test) gdb
Requires:      less zlib openssh-clients perl(Term::ReadKey) perl-Git
Obsoletes:     %{name}-core %{name}-core-doc %{name}-subtree %{name}-p4 git-cvs < %{version}-%{release}
Provides:      %{name} <= %{version}-%{release} %{name}-core %{name}-subtree %{name}-p4

%description
Git is a free and open source distributed version control system
designed to handle everything from small to very large projects
with speed and efficiency.
Git is easy to learn and has a tiny footprint with lightning fast
performance. It outclasses SCM tools like Subversion, CVS, Perforce,
and ClearCase with features like cheap local branching, convenient
staging areas, and multiple workflows.

%package daemon
Summary:   Git server daemon
Requires:  %{name} = %{version}-%{release} systemd

%description daemon
%{summary}.


%package gui
Summary:     Graphical user interface to Git
BuildArch:      noarch
Requires:    %{name} = %{version}-%{release} tk

%description gui
%{summary}.


%package -n gitk
Summary:     TK based graphical tool for visualization of Git 
BuildArch:      noarch
Requires:    %{name} = %{version}-%{release} tk

%description -n gitk
%{summary}.


%package web
Summary:     Git web interfaces
BuildArch:      noarch
Requires:    %{name} = %{version}-%{release}
Obsoletes:   gitweb %{name}-instaweb
Provides:    gitweb %{name}-instaweb

%description web
Git web interface allows user browsing git repositories via web service.

%package svn
Summary:    Git tools for importing Subversion repositories
BuildArch:      noarch
Requires:    %{name} = %{version}-%{release} subversion perl-TermReadKey perl-Digest-MD5

%description svn
%{summary}.

%package email
Summary:        Git tools for sending patches via email
BuildArch:      noarch
Requires:       git = %{version}-%{release}
Requires:       perl-Authen-SASL perl-Net-SMTP-SSL

%description email
%{summary}.

%package -n perl-Git
Summary:        Perl interface to Git
BuildArch:      noarch
Requires:       git = %{version}-%{release}  perl(:MODULE_COMPAT_%(perl -V:version | cut -d"'" -f 2))

%description -n perl-Git
%{summary}.

%package -n perl-Git-SVN
Summary:        Perl interface to Git::SVN
BuildArch:      noarch
Requires:       git = %{version}-%{release}  perl(:MODULE_COMPAT_%(perl -V:version | cut -d"'" -f 2))

%description -n perl-Git-SVN
%{summary}.

%package help
Summary:     Man pages and documents for Git system
BuildArch:   noarch
Obsoletes:   %{name}-core-doc
Provides:    %{name}-core-doc

%description help
%{summary}.

%prep
%autosetup -n %{name}-%{version} -p1

rm -rf perl/Git/LoadCPAN{.pm,/}
grep -rlZ '^use Git::LoadCPAN::' | xargs -r0 sed -i 's/Git::LoadCPAN:://g'

sed -i '/^git-cvs/d' command-list.txt

%build
%configure

# Some options can not configure in configure script,  so give options here (config.mak included in Makefile)
cat > config.mak << EOF
CFLAGS = %{optflags}
LDFLAGS = %{__global_ldflags}
NEEDS_CRYPTO_WITH_SSL = 1
USE_LIBPCRE = 1
INSTALL_SYMLINKS = 1
GNU_ROFF = 1
GITWEB_PROJECTROOT = %{_localstatedir}/lib/git
PYTHON_PATH = %{__python3}
htmldir = %{?_pkgdocdir}
perllibdir = %{perl_vendorlib}
gitwebdir = %{_localstatedir}/www/git
NO_PERL_CPAN_FALLBACKS = 1
EOF

# Default using python3
sed -i '1s@#![ ]*/usr/bin/env python@#!%{__python3}@' \
    contrib/hooks/multimail/git_multimail.py \
    contrib/hooks/multimail/migrate-mailhook-config \
    contrib/hooks/multimail/post-receive.example

%make_build
%make_build -C contrib/subtree/
%make_build -C contrib/contacts/
%make_build -C contrib/credential/libsecret/
%make_build -C contrib/diff-highlight/

%install
%make_install install-doc
%make_install -C contrib/subtree/ install-doc
%make_install -C contrib/contacts/ install-doc

install -p -m 644 README.md %{buildroot}%{_pkgdocdir}
install -p -m 644 gitweb/INSTALL %{buildroot}%{_pkgdocdir}/INSTALL.gitweb
install -p -m 644 gitweb/README %{buildroot}%{_pkgdocdir}/README.gitweb

# install contrib to git-core
mkdir -p %{buildroot}%{_datadir}/git-core/contrib/completion
mv contrib/hooks/multimail/git_multimail{.py,}
mv contrib/hooks %{buildroot}%{_datadir}/git-core/contrib
install -p -m 644 contrib/completion/git-completion.tcsh %{buildroot}%{_datadir}/git-core/contrib/completion/
install -p -m 644 contrib/completion/git-prompt.sh %{buildroot}%{_datadir}/git-core/contrib/completion/
install -D -p -m 0755 contrib/diff-highlight/diff-highlight %{buildroot}%{_datadir}/git-core/contrib/diff-highlight

# install root path for gitweb
mkdir -p %{buildroot}%{_localstatedir}/lib/git

# install config files
desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{SOURCE100}
install -D -p -m 644 %{SOURCE101} %{buildroot}%{_unitdir}/git@.service
install -D -p -m 644 %{SOURCE102} %{buildroot}%{_unitdir}/git.socket

install -pm 755 contrib/credential/libsecret/git-credential-libsecret  %{buildroot}%{gitexecdir}
install -pm 755 contrib/credential/netrc/git-credential-netrc %{buildroot}%{gitexecdir}

rm -f %{buildroot}%{_bindir}/git-cvsserver
rm -f %{buildroot}%{gitexecdir}/git-cvs*

%find_lang %{name}
cat %{name}.lang >> git-bin-files

# split out bin for primary package
(find %{buildroot}{%{_bindir},%{gitexecdir}} -type f -o -type l | grep -vE "git-(gui|daemon|cvs|svn|instaweb|citool|send-email)" | \
sed -e s@^%{buildroot}@@) >> git-bin-files

(find %{buildroot}%{perl_vendorlib} -type f | sed -e s@^%{buildroot}@@) > perl-git-files
(find %{buildroot}%{perl_vendorlib} -mindepth 1 -type d | sed -e 's@^%{buildroot}@%dir @') >> perl-git-files
# split out perl files for Git and Git::SVN
grep Git/SVN perl-git-files > perl-git-svn-files
sed -i "/Git\/SVN/ d" perl-git-files

%check
make test

%preun daemon
%systemd_preun git@.service

%post daemon
%systemd_post git@.service

%postun daemon
%systemd_postun_with_restart git@.service

%files -f  git-bin-files
%defattr(-,root,root)
%{_datadir}/git-core/
%doc README.md
%license LGPL-2.1 COPYING

%files daemon
%defattr(-,root,root)
%{_unitdir}/git.socket
%{_unitdir}/git@.service
%{gitexecdir}/git-daemon
%{_localstatedir}/lib/git

%files gui
%defattr(-,root,root)
%{_datadir}/applications/git-gui.desktop
%{gitexecdir}/git-gui*
%{gitexecdir}/git-citool
%{_datadir}/git-gui/

%files -n gitk
%defattr(-,root,root)
%{_bindir}/gitk
%{_datadir}/gitk/

%files web
%defattr(-,root,root)
%{_pkgdocdir}/*.gitweb
%{_localstatedir}/www/git/
%{gitexecdir}/git-instaweb

%files svn
%defattr(-,root,root)
%{gitexecdir}/git-svn

%files email
%defattr(-,root,root)
%{gitexecdir}/*email*

%files -n perl-Git -f perl-git-files

%files -n perl-Git-SVN -f perl-git-svn-files

%files help
%defattr(-,root,root)
%exclude %{_pkgdocdir}/{README.md,*.gitweb}
%{_pkgdocdir}/*
%{_mandir}/man1/git*.1.*
%{_mandir}/man3/Git.*
%{_mandir}/man5/git*.5.*
%{_mandir}/man7/git*.7.*

%changelog
* Sat Mar 14 2020 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-11
- add build requires of gdb

* Mon Feb 24 2020 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-10
- delete cvs subpackage

* Mon Feb 03 2020 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-9
- fix CVE-2019-1348 CVE-2019-1349 CVE-2019-1350 CVE-2019-1351 CVE-2019-1352 
  CVE-2019-1353 CVE-2019-1354 CVE-2019-1387 CVE-2019-19604
  fix test error

* Thu Jan 09 2020 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-8
- Delete unneeded files

* Thu Dec 5 2019 shenyangyang <shenyangyang4@huawei.com> - 2.23.0-7
- Add requires and two files in  %{_libexecdir}/git-core

* Thu Dec 5 2019 shenyangyang <shenyangyang4@huawei.com> - 2.23.0-6
- Delete the perl(Error*) module that provided by perl-Git 

* Thu Oct 31 2019 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-5
- Modify installation of contrib and templates

* Wed Sep 25 2019 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-4
- Modify license

* Wed Sep 4 2019 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-3
- Split out perl-Git-SVN

* Wed Sep 4 2019 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-2
- Split Package

* Sat Aug 31 2019 openEuler Buildteam <buildteam@openeuler.org> - 2.23.0-1
- Package init
