dev-vcs/git: update to 2.24.1

BUG=chromium:1106153
TEST=CQ passes

Change-Id: I4668eccf97831468bcec14ef30c03d887dcf6008
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/overlays/portage-stable/+/1967578
Reviewed-by: Will Bradley <wbbradley@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/overlays/portage-stable/+/2341016
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/overlays/portage-stable/+/2342002
(cherry picked from commit 43aef4eb09601ebfe0b68904e110b0205b217d1b)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/overlays/portage-stable/+/2342651
(cherry picked from commit 9122a3d6400b0b31b3f2239052002fec3362a216)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/overlays/portage-stable/+/2342696
(cherry picked from commit 17cdea42c144c32aaa2d90f9036ac6262269208e)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/overlays/portage-stable/+/2342733
(cherry picked from commit 3029b006af981a9ee213c552052f9c72977453da)
(cherry picked from commit c426b2e7046faf45f8ea23779a7d3b38eac5b637)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/overlays/portage-stable/+/2348875
diff --git a/dev-vcs/git/Manifest b/dev-vcs/git/Manifest
index f0aec64..5f140f6 100644
--- a/dev-vcs/git/Manifest
+++ b/dev-vcs/git/Manifest
@@ -1,3 +1,3 @@
-DIST git-2.21.0.tar.xz 5491296 BLAKE2B c5e66f4d4045f99bb4306e8f096ae9299908383df78bdf2a954cd415f4778eb59ea0ee7d501689313617de7dc1d2ee4ae15ab70dee564add5de877109073ddff SHA512 83f57c3950a07f6773a3aea66611d22daba0e5599e5d8f0751a16f6fdbeab0f3844d942a39a5642051212df99d1d4513253c36829b1454b4f0977cc6026fd973
-DIST git-htmldocs-2.21.0.tar.xz 1234956 BLAKE2B d8ef32acbad7eeb8758f711e09c380dbf3ca72526067b3a86ed0865e37351c4fac1f0c7e845e7b0c27a1d955c64622f10c999389446b53191acdc05a44647847 SHA512 4537b3f67d03050e5daefaa6f274d3acdf6e116dc8c7f76566b33100e76a445c3e3894b5ff63b5ddb024e1c691a3bf08acea42dbec681da1b0f1de2e5736c9c4
-DIST git-manpages-2.21.0.tar.xz 440096 BLAKE2B 6cbedf6e497b0d13c62003b166293a0d438d163255bce845eaf75e08a3eec49060c314e73d24c1c015101868d9149e9b0cd1c2e8cb3ce2245b8acae5701fe8ba SHA512 61e01cd312dbade8aac0144e32edc5eea2708b274273c207889a291cea18d131c9c2d83cc405ba8a955d387fd1e6dd74b7bdae4003f2062501073a0844122d30
+DIST git-2.24.1.tar.xz 5772304 BLAKE2B 45e49325221cd0407968b4e2ff7bcab7ea021863119ae29fec5c7a9ff10461b5af0ea05f587647c7d4965c38e25f1140f194be72ff5f1bea8851c0485effbfa2 SHA512 010c13d4023c142876d0e075a394b74bef422944d8ca602325d0b2b47bf28b1d534283c7f295751113c83fdfcc0c91f97090e8f906560d44b04a94607fd8fcf7
+DIST git-htmldocs-2.24.1.tar.xz 1307992 BLAKE2B 80b39d2fcf47d20a584109572414ff8d275245afb80c3946e2fa62346fdaee3b1c873a0dccfb44af52290756d26d5e53021a1bf1ace7ada34e50e03244f05e92 SHA512 4da610ba1ee307e4f53414e324ef63ab25cf3945a74bf813aeacd4cf714710eab31776c2402c9567f1a3805e3d8576a158c78a72722c0178fb7c2dec2dcebf5a
+DIST git-manpages-2.24.1.tar.xz 453752 BLAKE2B 51a549099205341bfec5a7998e5f66e9fc78ffd05fd04e745401a8bcc5bffcb64f26a64c7e24c9822bc2d62d000ea2b13779ffe19f065124a8e42b306fb5a2d3 SHA512 ee1e70fdbfc6eae97dc3b3180fa119b0d1189db7cae3e45b8baa9311d0c1162a5b46824a785e91288522a9fd00b8e4ff07590f4e4722a08955d6a9d048cc3a90
diff --git a/dev-vcs/git/files/git-2.18.0_rc1-optional-cvs.patch b/dev-vcs/git/files/git-2.18.0_rc1-optional-cvs.patch
deleted file mode 100644
index 2e213c0..0000000
--- a/dev-vcs/git/files/git-2.18.0_rc1-optional-cvs.patch
+++ /dev/null
@@ -1,460 +0,0 @@
-From 7b0d0d066a5f869f86f2be125d63ae98c1451feb Mon Sep 17 00:00:00 2001
-From: Robin Johnson <robbat2@gentoo.org>
-Date: Wed, 6 Jun 2018 16:25:13 +0200
-Subject: [PATCH] Makefile: Add NO_CVS define to disable all CVS interface
- utilities
-
-Forward-ported from 1.7.12 to current git.git v1.8.4
-Forward-ported from v1.8.4 to v1.8.5.1
-Forward-ported from v1.8.5.3 to v1.9.0_rc3
-Forward-ported from 1.9.0_rc3 to current git.git v2.0.0_rc0
-Forward-ported from v2.0.0_rc0 to v2.0.0
-Forward-ported from v2.0.0 to v2.2.2
-Forward-ported from v2.2.2 to v2.8.4
-Forward-ported from v2.8.4 to v2.10.0
-Forward-ported from v2.10.0 to v2.12.0
-Forward-ported from v2.12.0 to v2.17.0-rc1
-Forward-ported from v2.17.0-rc1 to v2.18.0-rc1
-
-Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
----
- Makefile                           | 49 ++++++++++++++++++++++--------
- t/t9200-git-cvsexportcommit.sh     |  5 +++
- t/t9400-git-cvsserver-server.sh    |  8 ++++-
- t/t9401-git-cvsserver-crlf.sh      | 15 ++++++---
- t/t9600-cvsimport.sh               | 41 ++++++++++++++++---------
- t/t9601-cvsimport-vendor-branch.sh | 11 +++++++
- t/t9602-cvsimport-branches-tags.sh | 11 +++++++
- t/t9603-cvsimport-patchsets.sh     | 11 +++++++
- t/test-lib.sh                      |  1 +
- 9 files changed, 119 insertions(+), 33 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 1d27f36365..b30a14e263 100644
---- a/Makefile
-+++ b/Makefile
-@@ -312,6 +312,8 @@ all::
- # Define SANE_TEXT_GREP to "-a" if you use recent versions of GNU grep
- # and egrep that are pickier when their input contains non-ASCII data.
- #
-+# Define NO_CVS if you do not want any CVS interface utilities.
-+#
- # The TCL_PATH variable governs the location of the Tcl interpreter
- # used to optimize git-gui for your system.  Only used if NO_TCLTK
- # is not set.  Defaults to the bare 'tclsh'.
-@@ -589,6 +591,7 @@ LIB_OBJS =
- PROGRAM_OBJS =
- PROGRAMS =
- SCRIPT_PERL =
-+SCRIPT_PERL_CVS =
- SCRIPT_PYTHON =
- SCRIPT_SH =
- SCRIPT_LIB =
-@@ -626,12 +629,13 @@ SCRIPT_LIB += git-sh-i18n
- 
- SCRIPT_PERL += git-add--interactive.perl
- SCRIPT_PERL += git-archimport.perl
--SCRIPT_PERL += git-cvsexportcommit.perl
--SCRIPT_PERL += git-cvsimport.perl
--SCRIPT_PERL += git-cvsserver.perl
- SCRIPT_PERL += git-send-email.perl
- SCRIPT_PERL += git-svn.perl
- 
-+SCRIPT_PERL_CVS += git-cvsexportcommit.perl
-+SCRIPT_PERL_CVS += git-cvsimport.perl
-+SCRIPT_PERL_CVS += git-cvsserver.perl
-+
- SCRIPT_PYTHON += git-p4.py
- 
- NO_INSTALL += git-remote-testgit
-@@ -639,24 +643,26 @@ NO_INSTALL += git-remote-testgit
- # Generated files for scripts
- SCRIPT_SH_GEN = $(patsubst %.sh,%,$(SCRIPT_SH))
- SCRIPT_PERL_GEN = $(patsubst %.perl,%,$(SCRIPT_PERL))
-+SCRIPT_PERL_CVS_GEN = $(patsubst %.perl,%,$(SCRIPT_PERL_CVS))
- SCRIPT_PYTHON_GEN = $(patsubst %.py,%,$(SCRIPT_PYTHON))
- 
- SCRIPT_SH_INS = $(filter-out $(NO_INSTALL),$(SCRIPT_SH_GEN))
- SCRIPT_PERL_INS = $(filter-out $(NO_INSTALL),$(SCRIPT_PERL_GEN))
-+SCRIPT_PERL_CVS_INS = $(filter-out $(NO_INSTALL),$(SCRIPT_PERL_CVS_GEN))
- SCRIPT_PYTHON_INS = $(filter-out $(NO_INSTALL),$(SCRIPT_PYTHON_GEN))
- 
- # Individual rules to allow e.g.
- # "make -C ../.. SCRIPT_PERL=contrib/foo/bar.perl build-perl-script"
- # from subdirectories like contrib/*/
- .PHONY: build-perl-script build-sh-script build-python-script
--build-perl-script: $(SCRIPT_PERL_GEN)
-+build-perl-script: $(SCRIPT_PERL_GEN) $(SCRIPT_PERL_CVS_GEN)
- build-sh-script: $(SCRIPT_SH_GEN)
- build-python-script: $(SCRIPT_PYTHON_GEN)
- 
- .PHONY: install-perl-script install-sh-script install-python-script
- install-sh-script: $(SCRIPT_SH_INS)
- 	$(INSTALL) $^ '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
--install-perl-script: $(SCRIPT_PERL_INS)
-+install-perl-script: $(SCRIPT_PERL_INS) $(SCRIPT_PERL_CVS_INS)
- 	$(INSTALL) $^ '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
- install-python-script: $(SCRIPT_PYTHON_INS)
- 	$(INSTALL) $^ '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
-@@ -665,12 +671,13 @@ install-python-script: $(SCRIPT_PYTHON_INS)
- clean-sh-script:
- 	$(RM) $(SCRIPT_SH_GEN)
- clean-perl-script:
--	$(RM) $(SCRIPT_PERL_GEN)
-+	$(RM) $(SCRIPT_PERL_GEN) $(SCRIPT_PERL_CVS_GEN)
- clean-python-script:
- 	$(RM) $(SCRIPT_PYTHON_GEN)
- 
- SCRIPTS = $(SCRIPT_SH_INS) \
- 	  $(SCRIPT_PERL_INS) \
-+	  $(SCRIPT_PERL_CVS_INS) \
- 	  $(SCRIPT_PYTHON_INS) \
- 	  git-instaweb
- 
-@@ -2076,13 +2083,27 @@ git.res: git.rc GIT-VERSION-FILE
- 	  -DGIT_VERSION="\\\"$(GIT_VERSION)\\\"" -i $< -o $@
- 
- # This makes sure we depend on the NO_PERL setting itself.
--$(SCRIPT_PERL_GEN): GIT-BUILD-OPTIONS
-+$(SCRIPT_PERL_GEN) $(SCRIPT_PERL_CVS_GEN): GIT-BUILD-OPTIONS
-+
-+_SCRIPT_PERL_GEN =
-+_SCRIPT_PERL_NOGEN =
- 
- # Used for substitution in Perl modules. Disabled when using RUNTIME_PREFIX
- # since the locale directory is injected.
- perl_localedir_SQ = $(localedir_SQ)
- 
- ifndef NO_PERL
-+_SCRIPT_PERL_GEN = $(SCRIPT_PERL_GEN)
-+
-+ifndef NO_CVS
-+_SCRIPT_PERL_GEN += $(SCRIPT_PERL_CVS_GEN)
-+else
-+_SCRIPT_PERL_NOGEN += $(SCRIPT_PERL_CVS_GEN)
-+_REASON = NO_CVS
-+_REASON_CONTENT = $(NO_CVS)
-+endif # NO_CVS
-+
-+$(_SCRIPT_PERL_GEN):
- PERL_HEADER_TEMPLATE = perl/header_templates/fixed_prefix.template.pl
- PERL_DEFINES = $(PERL_PATH_SQ):$(PERLLIB_EXTRA_SQ):$(perllibdir_SQ)
- 
-@@ -2103,7 +2124,7 @@ endif
- 
- PERL_DEFINES += $(gitexecdir) $(perllibdir) $(localedir)
- 
--$(SCRIPT_PERL_GEN): % : %.perl GIT-PERL-DEFINES GIT-PERL-HEADER GIT-VERSION-FILE
-+$(_SCRIPT_PERL_GEN): % : %.perl GIT-PERL-DEFINES GIT-PERL-HEADER GIT-VERSION-FILE
- 	$(QUIET_GEN)$(RM) $@ $@+ && \
- 	sed -e '1{' \
- 	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
-@@ -2149,14 +2170,18 @@ git-instaweb: git-instaweb.sh GIT-SCRIPT-DEFINES
- 	chmod +x $@+ && \
- 	mv $@+ $@
- else # NO_PERL
--$(SCRIPT_PERL_GEN) git-instaweb: % : unimplemented.sh
-+_SCRIPT_PERL_NOGEN += $(SCRIPT_PERL_GEN) $(SCRIPT_PERL_CVS_GEN) git-instaweb
-+_REASON = NO_PERL
-+_REASON_CONTENT = $(NO_PERL)
-+endif # NO_PERL
-+
-+$(_SCRIPT_PERL_NOGEN): % : unimplemented.sh
- 	$(QUIET_GEN)$(RM) $@ $@+ && \
- 	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
--	    -e 's|@@REASON@@|NO_PERL=$(NO_PERL)|g' \
-+	    -e 's|@@REASON@@|$(_REASON)=$(_REASON_CONTENT)|g' \
- 	    unimplemented.sh >$@+ && \
- 	chmod +x $@+ && \
- 	mv $@+ $@
--endif # NO_PERL
- 
- # This makes sure we depend on the NO_PYTHON setting itself.
- $(SCRIPT_PYTHON_GEN): GIT-BUILD-OPTIONS
-@@ -2396,7 +2421,7 @@ LOCALIZED_SH = $(SCRIPT_SH)
- LOCALIZED_SH += git-parse-remote.sh
- LOCALIZED_SH += git-rebase--interactive.sh
- LOCALIZED_SH += git-sh-setup.sh
--LOCALIZED_PERL = $(SCRIPT_PERL)
-+LOCALIZED_PERL = $(SCRIPT_PERL) $(SCRIPT_PERL_CVS)
- 
- ifdef XGETTEXT_INCLUDE_TESTS
- LOCALIZED_C += t/t0200/test.c
-diff --git a/t/t9200-git-cvsexportcommit.sh b/t/t9200-git-cvsexportcommit.sh
-index 1319415ba8..34ac8e28e2 100755
---- a/t/t9200-git-cvsexportcommit.sh
-+++ b/t/t9200-git-cvsexportcommit.sh
-@@ -11,6 +11,11 @@ if ! test_have_prereq PERL; then
- 	test_done
- fi
- 
-+if ! test_have_prereq CVS; then
-+	skip_all='skipping git cvsexportcommit tests, cvs not available'
-+	test_done
-+fi
-+
- cvs >/dev/null 2>&1
- if test $? -ne 1
- then
-diff --git a/t/t9400-git-cvsserver-server.sh b/t/t9400-git-cvsserver-server.sh
-index 06742748e9..51d474d94b 100755
---- a/t/t9400-git-cvsserver-server.sh
-+++ b/t/t9400-git-cvsserver-server.sh
-@@ -11,9 +11,15 @@ cvs CLI client via git-cvsserver server'
- . ./test-lib.sh
- 
- if ! test_have_prereq PERL; then
--	skip_all='skipping git cvsserver tests, perl not available'
-+	skip_all='skipping git-cvsserver tests, perl not available'
- 	test_done
- fi
-+
-+if ! test_have_prereq CVS; then
-+	skip_all='skipping git-cvsserver tests, cvs not available'
-+	test_done
-+fi
-+
- cvs >/dev/null 2>&1
- if test $? -ne 1
- then
-diff --git a/t/t9401-git-cvsserver-crlf.sh b/t/t9401-git-cvsserver-crlf.sh
-index 84787eee9a..eecba88527 100755
---- a/t/t9401-git-cvsserver-crlf.sh
-+++ b/t/t9401-git-cvsserver-crlf.sh
-@@ -57,15 +57,20 @@ check_status_options() {
-     return $stat
- }
- 
--cvs >/dev/null 2>&1
--if test $? -ne 1
-+if ! test_have_prereq PERL
- then
--    skip_all='skipping git-cvsserver tests, cvs not found'
-+    skip_all='skipping git-cvsserver tests, perl not available'
-     test_done
- fi
--if ! test_have_prereq PERL
-+if ! test_have_prereq CVS
- then
--    skip_all='skipping git-cvsserver tests, perl not available'
-+    skip_all='skipping git-cvsserver tests, cvs not available'
-+    test_done
-+fi
-+cvs >/dev/null 2>&1
-+if test $? -ne 1
-+then
-+    skip_all='skipping git-cvsserver tests, cvs not found'
-     test_done
- fi
- perl -e 'use DBI; use DBD::SQLite' >/dev/null 2>&1 || {
-diff --git a/t/t9600-cvsimport.sh b/t/t9600-cvsimport.sh
-index 804ce3850f..c53c50e432 100755
---- a/t/t9600-cvsimport.sh
-+++ b/t/t9600-cvsimport.sh
-@@ -8,14 +8,25 @@ if ! test_have_prereq NOT_ROOT; then
- 	test_done
- fi
- 
--test_expect_success PERL 'setup cvsroot environment' '
-+if ! test_have_prereq PERL
-+then
-+    skip_all='skipping git cvsimport tests, perl not available'
-+    test_done
-+fi
-+if ! test_have_prereq CVS
-+then
-+    skip_all='skipping git cvsimport tests, cvs not available'
-+    test_done
-+fi
-+
-+test_expect_success 'setup cvsroot environment' '
- 	CVSROOT=$(pwd)/cvsroot &&
- 	export CVSROOT
- '
- 
--test_expect_success PERL 'setup cvsroot' '$CVS init'
-+test_expect_success 'setup cvsroot' '$CVS init'
- 
--test_expect_success PERL 'setup a cvs module' '
-+test_expect_success 'setup a cvs module' '
- 
- 	mkdir "$CVSROOT/module" &&
- 	$CVS co -d module-cvs module &&
-@@ -47,23 +58,23 @@ EOF
- 	)
- '
- 
--test_expect_success PERL 'import a trivial module' '
-+test_expect_success 'import a trivial module' '
- 
- 	git cvsimport -a -R -z 0 -C module-git module &&
- 	test_cmp module-cvs/o_fortuna module-git/o_fortuna
- 
- '
- 
--test_expect_success PERL 'pack refs' '(cd module-git && git gc)'
-+test_expect_success 'pack refs' '(cd module-git && git gc)'
- 
--test_expect_success PERL 'initial import has correct .git/cvs-revisions' '
-+test_expect_success 'initial import has correct .git/cvs-revisions' '
- 
- 	(cd module-git &&
- 	 git log --format="o_fortuna 1.1 %H" -1) > expected &&
- 	test_cmp expected module-git/.git/cvs-revisions
- '
- 
--test_expect_success PERL 'update cvs module' '
-+test_expect_success 'update cvs module' '
- 	(cd module-cvs &&
- 	cat <<EOF >o_fortuna &&
- O Fortune,
-@@ -91,7 +102,7 @@ EOF
- 	)
- '
- 
--test_expect_success PERL 'update git module' '
-+test_expect_success 'update git module' '
- 
- 	(cd module-git &&
- 	git config cvsimport.trackRevisions true &&
-@@ -102,7 +113,7 @@ test_expect_success PERL 'update git module' '
- 
- '
- 
--test_expect_success PERL 'update has correct .git/cvs-revisions' '
-+test_expect_success 'update has correct .git/cvs-revisions' '
- 
- 	(cd module-git &&
- 	 git log --format="o_fortuna 1.1 %H" -1 HEAD^ &&
-@@ -110,7 +121,7 @@ test_expect_success PERL 'update has correct .git/cvs-revisions' '
- 	test_cmp expected module-git/.git/cvs-revisions
- '
- 
--test_expect_success PERL 'update cvs module' '
-+test_expect_success 'update cvs module' '
- 
- 	(cd module-cvs &&
- 		echo 1 >tick &&
-@@ -119,7 +130,7 @@ test_expect_success PERL 'update cvs module' '
- 	)
- '
- 
--test_expect_success PERL 'cvsimport.module config works' '
-+test_expect_success 'cvsimport.module config works' '
- 
- 	(cd module-git &&
- 		git config cvsimport.module module &&
-@@ -131,7 +142,7 @@ test_expect_success PERL 'cvsimport.module config works' '
- 
- '
- 
--test_expect_success PERL 'second update has correct .git/cvs-revisions' '
-+test_expect_success 'second update has correct .git/cvs-revisions' '
- 
- 	(cd module-git &&
- 	 git log --format="o_fortuna 1.1 %H" -1 HEAD^^ &&
-@@ -140,7 +151,7 @@ test_expect_success PERL 'second update has correct .git/cvs-revisions' '
- 	test_cmp expected module-git/.git/cvs-revisions
- '
- 
--test_expect_success PERL 'import from a CVS working tree' '
-+test_expect_success 'import from a CVS working tree' '
- 
- 	$CVS co -d import-from-wt module &&
- 	(cd import-from-wt &&
-@@ -153,12 +164,12 @@ test_expect_success PERL 'import from a CVS working tree' '
- 
- '
- 
--test_expect_success PERL 'no .git/cvs-revisions created by default' '
-+test_expect_success 'no .git/cvs-revisions created by default' '
- 
- 	! test -e import-from-wt/.git/cvs-revisions
- 
- '
- 
--test_expect_success PERL 'test entire HEAD' 'test_cmp_branch_tree master'
-+test_expect_success 'test entire HEAD' 'test_cmp_branch_tree master'
- 
- test_done
-diff --git a/t/t9601-cvsimport-vendor-branch.sh b/t/t9601-cvsimport-vendor-branch.sh
-index 827d39f5bf..d730a41f67 100755
---- a/t/t9601-cvsimport-vendor-branch.sh
-+++ b/t/t9601-cvsimport-vendor-branch.sh
-@@ -34,6 +34,17 @@
- test_description='git cvsimport handling of vendor branches'
- . ./lib-cvs.sh
- 
-+if ! test_have_prereq PERL
-+then
-+    skip_all='skipping git cvsimport tests, perl not available'
-+    test_done
-+fi
-+if ! test_have_prereq CVS
-+then
-+    skip_all='skipping git cvsimport tests, cvs not available'
-+    test_done
-+fi
-+
- setup_cvs_test_repository t9601
- 
- test_expect_success PERL 'import a module with a vendor branch' '
-diff --git a/t/t9602-cvsimport-branches-tags.sh b/t/t9602-cvsimport-branches-tags.sh
-index e1db323f54..68f097401f 100755
---- a/t/t9602-cvsimport-branches-tags.sh
-+++ b/t/t9602-cvsimport-branches-tags.sh
-@@ -6,6 +6,17 @@
- test_description='git cvsimport handling of branches and tags'
- . ./lib-cvs.sh
- 
-+if ! test_have_prereq PERL
-+then
-+    skip_all='skipping git cvsimport tests, perl not available'
-+    test_done
-+fi
-+if ! test_have_prereq CVS
-+then
-+    skip_all='skipping git cvsimport tests, cvs not available'
-+    test_done
-+fi
-+
- setup_cvs_test_repository t9602
- 
- test_expect_success PERL 'import module' '
-diff --git a/t/t9603-cvsimport-patchsets.sh b/t/t9603-cvsimport-patchsets.sh
-index c4c3c49546..9b2957d4f0 100755
---- a/t/t9603-cvsimport-patchsets.sh
-+++ b/t/t9603-cvsimport-patchsets.sh
-@@ -14,6 +14,17 @@
- test_description='git cvsimport testing for correct patchset estimation'
- . ./lib-cvs.sh
- 
-+if ! test_have_prereq PERL
-+then
-+    skip_all='skipping git cvsimport tests, perl not available'
-+    test_done
-+fi
-+if ! test_have_prereq CVS
-+then
-+    skip_all='skipping git cvsimport tests, cvs not available'
-+    test_done
-+fi
-+
- setup_cvs_test_repository t9603
- 
- test_expect_failure PERL 'import with criss cross times on revisions' '
-diff --git a/t/test-lib.sh b/t/test-lib.sh
-index 28315706be..6e2f99cdbb 100644
---- a/t/test-lib.sh
-+++ b/t/test-lib.sh
-@@ -1064,6 +1064,7 @@ case $uname_s in
- esac
- 
- ( COLUMNS=1 && test $COLUMNS = 1 ) && test_set_prereq COLUMNS_CAN_BE_1
-+test -z "$NO_CVS" && test_set_prereq CVS
- test -z "$NO_PERL" && test_set_prereq PERL
- test -z "$NO_PTHREADS" && test_set_prereq PTHREADS
- test -z "$NO_PYTHON" && test_set_prereq PYTHON
--- 
-2.17.1
-
diff --git a/dev-vcs/git/files/git-2.21.0-quiet-submodules.patch b/dev-vcs/git/files/git-2.21.0-quiet-submodules.patch
deleted file mode 100644
index adb0dfd..0000000
--- a/dev-vcs/git/files/git-2.21.0-quiet-submodules.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From git-owner@vger.kernel.org Wed Apr 10 11:18:40 2019
-Date: 10 Apr 2019 18:18:35 +0700
-Message-ID: <20190410111834.GA25638@ash>
-From: "Duy Nguyen" <pclouds@gmail.com>
-Sender: git-owner@vger.kernel.org
-Subject: Re: regression AGAIN in output of git-pull --rebase --recurse-submodules=yes --quiet
-References: <robbat2-20180120T054223-685328376Z@orbis-terrarum.net>
- <robbat2-20190410T062730-540884809Z@orbis-terrarum.net>
-List-ID: <git.vger.kernel.org>
-
-...
-
-If you run this with GIT_TRACE=1, you can see that --quiet is passed
-to submodule--helper correctly.
-
-trace: built-in: git submodule--helper foreach --quiet git pull --quiet origin master
-
-The problem here is the option parser of this command would try to
-parse all options, so it considers both --quiet the same thing and are
-to tell "submodule--foreach" to be quiet, the second --quiet is not
-part of the "git pull" command anymore.
-
-So the fix would be to pass "--" to stop option parsing.
-submodule--helper should not parse options it does not understand
-anyway. Something like this should work.
-
--- 8< --
-diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
-index 6bcc4f1bd7..6394222628 100644
---- a/builtin/submodule--helper.c
-+++ b/builtin/submodule--helper.c
-@@ -571,7 +571,7 @@ static int module_foreach(int argc, const char **argv, const char *prefix)
- 	};
- 
- 	argc = parse_options(argc, argv, prefix, module_foreach_options,
--			     git_submodule_helper_usage, PARSE_OPT_KEEP_UNKNOWN);
-+			     git_submodule_helper_usage, 0);
- 
- 	if (module_list_compute(0, NULL, prefix, &pathspec, &list) < 0)
- 		return 1;
-diff --git a/git-submodule.sh b/git-submodule.sh
-index 2c0fb6d723..a967b2890d 100755
---- a/git-submodule.sh
-+++ b/git-submodule.sh
-@@ -346,7 +346,7 @@ cmd_foreach()
- 		shift
- 	done
- 
--	git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper foreach ${GIT_QUIET:+--quiet} ${recursive:+--recursive} "$@"
-+	git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper foreach ${GIT_QUIET:+--quiet} ${recursive:+--recursive} -- "$@"
- }
- 
- #
--- 8< --
-
-I'm a bit reluctant to follow up with a proper patch because I can't
-digest the t5572-submodule-pull.sh tests. And we definitely need to
-add a test case about --quiet to make sure it won't happen again.
---
-Duy
-
diff --git a/dev-vcs/git/git-2.21.0.ebuild b/dev-vcs/git/git-2.24.1.ebuild
similarity index 89%
rename from dev-vcs/git/git-2.21.0.ebuild
rename to dev-vcs/git/git-2.24.1.ebuild
index ec630a5..e2379ea 100644
--- a/dev-vcs/git/git-2.21.0.ebuild
+++ b/dev-vcs/git/git-2.24.1.ebuild
@@ -6,10 +6,11 @@
 GENTOO_DEPEND_ON_PERL=no
 
 # bug #329479: git-remote-testgit is not multiple-version aware
-PYTHON_COMPAT=( python2_7 )
+PYTHON_COMPAT=( python{2_7,3_4} )
+
 PLOCALES="bg ca de es fr is it ko pt_PT ru sv vi zh_CN"
 if [[ ${PV} == *9999 ]]; then
-	SCM="git-r3"
+	inherit git-r3
 	EGIT_REPO_URI="git://git.kernel.org/pub/scm/git/git.git"
 	# Please ensure that all _four_ 9999 ebuilds get updated; they track the 4 upstream branches.
 	# See https://git-scm.com/docs/gitworkflows#_graduation
@@ -26,31 +27,31 @@
 	esac
 fi
 
-inherit toolchain-funcs elisp-common l10n perl-module bash-completion-r1 python-single-r1 systemd ${SCM}
+inherit toolchain-funcs elisp-common l10n perl-module bash-completion-r1 python-single-r1 systemd
 
 MY_PV="${PV/_rc/.rc}"
 MY_P="${PN}-${MY_PV}"
 
-DOC_VER=${MY_PV}
+DOC_VER="${MY_PV}"
 
 DESCRIPTION="stupid content tracker: distributed VCS designed for speed and efficiency"
 HOMEPAGE="https://www.git-scm.com/"
 if [[ ${PV} != *9999 ]]; then
 	SRC_URI_SUFFIX="xz"
-	SRC_URI_KORG="mirror://kernel/software/scm/git"
+	SRC_URI_KORG="https://www.kernel.org/pub/software/scm/git"
 	[[ "${PV/rc}" != "${PV}" ]] && SRC_URI_KORG+='/testing'
 	SRC_URI="${SRC_URI_KORG}/${MY_P}.tar.${SRC_URI_SUFFIX}
 			${SRC_URI_KORG}/${PN}-manpages-${DOC_VER}.tar.${SRC_URI_SUFFIX}
 			doc? (
 			${SRC_URI_KORG}/${PN}-htmldocs-${DOC_VER}.tar.${SRC_URI_SUFFIX}
 			)"
-	[[ "${PV}" = *_rc* ]] || \
+	[[ "${PV}" == *_rc* ]] || \
 	KEYWORDS="*"
 fi
 
 LICENSE="GPL-2"
 SLOT="0"
-IUSE="+blksha1 +curl cgi doc emacs gnome-keyring +gpg highlight +iconv libressl mediawiki mediawiki-experimental +nls +pcre pcre-jit +perl +python ppcsha1 tk +threads +webdav xinetd cvs subversion test"
+IUSE="+blksha1 +curl cgi doc emacs gnome-keyring +gpg highlight +iconv libressl mediawiki mediawiki-experimental +nls +pcre pcre-jit perforce +perl +ppcsha1 tk +threads +webdav xinetd cvs subversion test"
 
 # Common to both DEPEND and RDEPEND
 CDEPEND="
@@ -97,7 +98,7 @@
 			dev-perl/TermReadKey
 		)
 	)
-	python? ( ${PYTHON_DEPS} )
+	perforce? ( ${PYTHON_DEPS} )
 "
 
 # This is how info docs are created with Git:
@@ -108,11 +109,12 @@
 	doc? (
 		app-text/asciidoc
 		app-text/docbook2X
-		sys-apps/texinfo
 		app-text/xmlto
+		sys-apps/texinfo
 	)
 	nls? ( sys-devel/gettext )
-	test? (	app-crypt/gnupg	)"
+	test? (	app-crypt/gnupg	)
+"
 
 # Live ebuild builds man pages and HTML docs, additionally
 if [[ ${PV} == *9999 ]]; then
@@ -131,14 +133,19 @@
 	subversion? ( perl )
 	webdav? ( curl )
 	pcre-jit? ( pcre )
-	python? ( ${PYTHON_REQUIRED_USE} )
+	perforce? ( ${PYTHON_REQUIRED_USE} )
 "
 
+RESTRICT="!test? ( test )"
+
 PATCHES=(
 	# bug #350330 - automagic CVS when we don't want it is bad.
-	"${FILESDIR}"/git-2.18.0_rc1-optional-cvs.patch
+	"${FILESDIR}"/git-2.22.0_rc0-optional-cvs.patch
 
 	"${FILESDIR}"/git-2.2.0-svn-fe-linking.patch
+
+	# Make submodule output quiet
+	"${FILESDIR}"/git-2.21.0-quiet-submodules-testcase.patch
 )
 
 pkg_setup() {
@@ -147,7 +154,7 @@
 		ewarn "with USE=dso, there may be weird crashes in git-svn. You"
 		ewarn "have been warned."
 	fi
-	if use python ; then
+	if use perforce ; then
 		python-single-r1_pkg_setup
 	fi
 }
@@ -155,14 +162,16 @@
 # This is needed because for some obscure reasons future calls to make don't
 # pick up these exports if we export them in src_unpack()
 exportmakeopts() {
-	local myopts=(
+	local extlibs myopts
+
+	myopts=(
 		ASCIIDOC_NO_ROFF=YesPlease
 		$(usex cvs '' NO_CVS=YesPlease)
 		$(usex elibc_musl NO_REGEX=YesPlease '')
 		$(usex iconv '' NO_ICONV=YesPlease)
 		$(usex nls '' NO_GETTEXT=YesPlease)
 		$(usex perl 'INSTALLDIRS=vendor NO_PERL_CPAN_FALLBACKS=YesPlease' NO_PERL=YesPlease)
-		$(usex python '' NO_PYTHON=YesPlease)
+		$(usex perforce '' NO_PYTHON=YesPlease)
 		$(usex subversion '' NO_SVN_TESTS=YesPlease)
 		$(usex threads '' NO_PTHREAD=YesPlease)
 		$(usex tk '' NO_TCLTK=YesPlease)
@@ -232,12 +241,14 @@
 			NEEDS_LIBICONV=YesPlease
 			HAVE_CLOCK_MONOTONIC=1
 		)
-		grep -q getdelim "${ROOT%/}"/usr/include/stdio.h && \
+		if grep -q getdelim "${EROOT}"/usr/include/stdio.h ; then
 			myopts+=( HAVE_GETDELIM=1 )
+		fi
 	fi
 
-	has_version '>=app-text/asciidoc-8.0' \
-		&& myopts+=( ASCIIDOC8=YesPlease )
+	if has_version '>=app-text/asciidoc-8.0' ; then
+		myopts+=( ASCIIDOC8=YesPlease )
+	fi
 
 	# Bug 290465:
 	# builtin-fetch-pack.c:816: error: 'struct stat' has no member named 'st_mtim'
@@ -297,7 +308,7 @@
 git_emake() {
 	# bug #320647: PYTHON_PATH
 	local PYTHON_PATH=""
-	use python && PYTHON_PATH="${PYTHON}"
+	use perforce && PYTHON_PATH="${PYTHON}"
 	emake ${MY_MAKEOPTS} \
 		prefix="${EPREFIX}"/usr \
 		htmldir="${EPREFIX}"/usr/share/doc/${PF}/html \
@@ -365,8 +376,11 @@
 		git_emake EXTLIBS="${EXTLIBS} ${nlsiconv[@]}" \
 			|| die "emake svn-fe failed"
 		if use doc ; then
-			git_emake svn-fe.{1,html} \
-				|| die "emake svn-fe.1 svn-fe.html failed"
+			# svn-fe.1 requires the full USE=doc dependency stack
+			git_emake svn-fe.1 \
+				|| die "emake svn-fe.1 failed"
+			git_emake svn-fe.html \
+				|| die "svn-fe.html failed"
 		fi
 		popd &>/dev/null || die
 	fi
@@ -378,8 +392,9 @@
 	fi
 
 	pushd contrib/subtree &>/dev/null || die
-	git_emake
-	use doc && git_emake doc
+	git_emake git-subtree
+	# git-subtree.1 requires the full USE=doc dependency stack
+	use doc && git_emake git-subtree.html git-subtree.1
 	popd &>/dev/null || die
 
 	pushd contrib/diff-highlight &>/dev/null || die
@@ -395,9 +410,7 @@
 }
 
 src_install() {
-	git_emake \
-		install || \
-		die "make install failed"
+	git_emake install || die "make install failed"
 
 	if [[ ${CHOST} == *-darwin* ]]; then
 		dobin contrib/credential/osxkeychain/git-credential-osxkeychain
@@ -435,7 +448,7 @@
 		#elisp-install ${PN}/compat contrib/emacs/vc-git.{el,elc}
 		# don't add automatically to the load-path, so the sitefile
 		# can do a conditional loading
-		touch "${ED%/}${SITELISP}/${PN}/compat/.nosearch"
+		touch "${ED}${SITELISP}/${PN}/compat/.nosearch"
 		elisp-site-file-install "${FILESDIR}"/${SITEFILE}
 	fi
 
@@ -447,9 +460,10 @@
 
 	# git-subtree
 	pushd contrib/subtree &>/dev/null || die
-	git_emake install || die "Failed to emake install git-subtree"
+	git_emake install || die "Failed to emake install for git-subtree"
 	if use doc ; then
-		git_emake install-man install-doc || die "Failed to emake install-doc install-mangit-subtree"
+		# Do not move git subtree install-man outside USE=doc!
+		git_emake install-man install-html || die "Failed to emake install-html install-man for git-subtree"
 	fi
 	newdoc README README.git-subtree
 	dodoc git-subtree.txt
@@ -486,6 +500,7 @@
 		dobin svn-fe
 		dodoc svn-fe.txt
 		if use doc ; then
+			# Do not move svn-fe.1 outside USE=doc!
 			doman svn-fe.1
 			docinto html
 			dodoc svn-fe.html
@@ -522,7 +537,7 @@
 	for i in "${contrib_objects[@]}" ; do
 		cp -rf \
 			"${S}"/contrib/${i} \
-			"${ED%/}"/usr/share/${PN}/contrib \
+			"${ED}"/usr/share/${PN}/contrib \
 			|| die "Failed contrib ${i}"
 	done
 
@@ -531,26 +546,26 @@
 		# but upstream installs in /usr/share/gitweb
 		# so we will install a symlink and use their location for compat with other
 		# distros
-		dosym /usr/share/gitweb /usr/share/${PN}/gitweb
+		dosym ../gitweb /usr/share/${PN}/gitweb
 
 		# INSTALL discusses configuration issues, not just installation
 		docinto /
 		newdoc  "${S}"/gitweb/INSTALL INSTALL.gitweb
 		newdoc  "${S}"/gitweb/README README.gitweb
 
-		for d in "${ED%/}"/usr/lib{,64}/perl5/ ; do
+		for d in "${ED}"/usr/lib{,64}/perl5/ ; do
 			if test -d "${d}" ; then find "${d}" \
 				-name .packlist \
 				-delete || die
 			fi
 		done
 	else
-		rm -rf "${ED%/}"/usr/share/gitweb
+		rm -rf "${ED}"/usr/share/gitweb
 	fi
 
 	if ! use subversion ; then
-		rm -f "${ED%/}"/usr/libexec/git-core/git-svn \
-			"${ED%/}"/usr/share/man/man1/git-svn.1*
+		rm -f "${ED}"/usr/libexec/git-core/git-svn \
+			"${ED}"/usr/share/man/man1/git-svn.1*
 	fi
 
 	if use xinetd ; then
@@ -571,8 +586,8 @@
 	# we could remove sources in src_prepare, but install does not
 	# handle missing locale dir well
 	rm_loc() {
-		if [[ -e "${ED%/}/usr/share/locale/${1}" ]]; then
-			rm -r "${ED%/}/usr/share/locale/${1}" || die
+		if [[ -e "${ED}/usr/share/locale/${1}" ]]; then
+			rm -r "${ED}/usr/share/locale/${1}" || die
 		fi
 	}
 	l10n_for_each_disabled_locale_do rm_loc
@@ -682,7 +697,7 @@
 	nonfatal git_emake aggregate-results
 
 	# And bail if there was a problem
-	[ ${rc} -eq 0 ] || die "tests failed. Please file a bug."
+	[[ ${rc} -eq 0 ]] || die "tests failed. Please file a bug."
 }
 
 showpkgdeps() {
diff --git a/dev-vcs/git/metadata.xml b/dev-vcs/git/metadata.xml
index f769088..53353ad 100644
--- a/dev-vcs/git/metadata.xml
+++ b/dev-vcs/git/metadata.xml
@@ -32,6 +32,7 @@
     <flag name="mediawiki">Support pulling and pushing from MediaWiki</flag>
     <flag name="mediawiki-experimental">Add experimental patches for improved MediaWiki support</flag>
     <flag name="pcre-jit">Enable JIT for pcre</flag>
+    <flag name="perforce">Add support for Perforce version control system (requires manual installation of Perforce client)</flag>
     <flag name="ppcsha1">Make use of a bundled routine that is optimized for the PPC arch</flag>
     <flag name="subversion">Include git-svn for <pkg>dev-vcs/subversion</pkg> support</flag>
     <flag name="tk">Include the 'gitk' and 'git gui' tools</flag>