maintainer-scripts: Speed up git clone in gcc_release

Message ID 20200226223512.GZ2155@tucnak
State New
Headers show
Series
  • maintainer-scripts: Speed up git clone in gcc_release
Related show

Commit Message

Jakub Jelinek Feb. 26, 2020, 10:35 p.m.
Hi!

When doing the 8.4-rc1, I've noticed (probably also because of the dying
disk on sourceware) that git clone is extremely slow, and furthermore when
all of us have some local snapshots, it is a waste of resources to download
everything again.  Especially for the -f runs when we'll need to wait until
git tag -s asks us for a gpg password interactively.

The following patch adds an option through which one can point the script
at a local gcc .git directory from which it can --dissociate --reference ...
during cloning to speed it up.

Tested with the 8.4-rc1, ok for trunk and after a while release branches?

2020-02-26  Jakub Jelinek  <jakub@redhat.com>

	* gcc_release: Add support for -b local-git-repo argument.


	Jakub

Comments

Joseph Myers Feb. 27, 2020, 2:02 a.m. | #1
On Wed, 26 Feb 2020, Jakub Jelinek wrote:

> Hi!

> 

> When doing the 8.4-rc1, I've noticed (probably also because of the dying

> disk on sourceware) that git clone is extremely slow, and furthermore when

> all of us have some local snapshots, it is a waste of resources to download

> everything again.  Especially for the -f runs when we'll need to wait until

> git tag -s asks us for a gpg password interactively.

> 

> The following patch adds an option through which one can point the script

> at a local gcc .git directory from which it can --dissociate --reference ...

> during cloning to speed it up.

> 

> Tested with the 8.4-rc1, ok for trunk and after a while release branches?


OK.

-- 
Joseph S. Myers
joseph@codesourcery.com

Patch

--- maintainer-scripts/gcc_release.jj	2020-01-13 13:53:24.158187355 +0100
+++ maintainer-scripts/gcc_release	2020-02-26 22:43:34.286172860 +0100
@@ -9,7 +9,7 @@ 
 # Contents:
 #   Script to create a GCC release.
 #
-# Copyright (c) 2001-2018 Free Software Foundation.
+# Copyright (c) 2001-2020 Free Software Foundation.
 #
 # This file is part of GCC.
 #
@@ -78,6 +78,7 @@  Options:
   -p previous-tarball  Location of a previous tarball (to generate diff files).
   -t tag               Tag to mark the release in git.
   -u username          Username for upload operations.
+  -b local-git-repo    Local git repository to speed up cloning.
 EOF
     exit 1
 }
@@ -103,8 +104,14 @@  build_sources() {
   changedir "${WORKING_DIRECTORY}"
 
   # Check out the sources.
-  ${GIT} clone -q -b "${GITBRANCH}" "${GITROOT}" "`basename ${SOURCE_DIRECTORY}`" || \
-      error "Could not check out release sources"
+  if [ -n "${GIT_REFERENCE}" ]; then
+    ${GIT} clone -q --dissociate --reference "${GIT_REFERENCE}" \
+		 -b "${GITBRANCH}" "${GITROOT}" "`basename ${SOURCE_DIRECTORY}`" || \
+        error "Could not check out release sources"
+  else
+    ${GIT} clone -q -b "${GITBRANCH}" "${GITROOT}" "`basename ${SOURCE_DIRECTORY}`" || \
+        error "Could not check out release sources"
+  fi
 
   # If this is a final release, make sure that the ChangeLogs
   # and version strings are updated.
@@ -567,6 +574,9 @@  TAG=""
 # The old tarballs from which to generate diffs.
 OLD_TARS=""
 
+# Local gcc git checkout to speed up git cloning.
+GIT_REFERENCE=""
+
 # The directory that will be used to construct the release.  The
 # release itself will be placed in a subdirectory of this directory.
 DESTINATION=${HOME}
@@ -613,7 +623,7 @@  TAR="${TAR:-tar}"
 ########################################################################
 
 # Parse the options.
-while getopts "d:fr:u:t:p:s:l" ARG; do
+while getopts "d:fr:u:t:p:s:lb:" ARG; do
     case $ARG in
     d)    DESTINATION="${OPTARG}";;
     r)    RELEASE="${OPTARG}";;
@@ -631,6 +641,7 @@  while getopts "d:fr:u:t:p:s:l" ARG; do
           if [ ! -f ${OPTARG} ]; then
 	    error "-p argument must name a tarball"
 	  fi;;
+    b)    GIT_REFERENCE="${OPTARG}";;
     \?)   usage;;
     esac
 done