Update gcc_release for move to git.
authorJoseph Myers <joseph@codesourcery.com>
Mon, 13 Jan 2020 12:45:31 +0000 (12:45 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Mon, 13 Jan 2020 12:45:31 +0000 (12:45 +0000)
This patch updates the gcc_release script, used for snapshots and
releases, to use git instead of SVN.

The parts of the changes used in building snapshots have been tested.
The parts used for building releases have not, so it's likely further
fixes may turn out to be needed there when releases are first built
from git.

* gcc_release: Use git instead of SVN.
* crontab: Update gcc_release calls.

maintainer-scripts/ChangeLog
maintainer-scripts/crontab
maintainer-scripts/gcc_release

index dafbbd714f06dfdae3eb4e9305df92a0a01407d3..cadcad35a1a15094a2d47c08c1f14f44ced1cfd7 100644 (file)
@@ -1,3 +1,8 @@
+2020-01-13  Joseph Myers  <joseph@codesourcery.com>
+
+       * gcc_release: Use git instead of SVN.
+       * crontab: Update gcc_release calls.
+
 2020-01-13  Joseph Myers  <joseph@codesourcery.com>
 
        * update_version_git: New file.
index f064d6fb45ebbdfc10ad1a466355db90dc844206..0cf342fdf3a8ebeb315b81ab15c9e24258d0fa2d 100644 (file)
@@ -1,6 +1,6 @@
 16  0 * * * sh /home/gccadmin/scripts/update_version_git
 50  0 * * * sh /home/gccadmin/scripts/update_web_docs_svn
 55  0 * * * sh /home/gccadmin/scripts/update_web_docs_libstdcxx_svn
-32 22 * * 5 sh /home/gccadmin/scripts/gcc_release -s 8:branches/gcc-8-branch -l -d /sourceware/snapshot-tmp/gcc all
-32 22 * * 6 sh /home/gccadmin/scripts/gcc_release -s 9:branches/gcc-9-branch -l -d /sourceware/snapshot-tmp/gcc all
-32 22 * * 7 sh /home/gccadmin/scripts/gcc_release -s 10:trunk -l -d /sourceware/snapshot-tmp/gcc all
+32 22 * * 5 sh /home/gccadmin/scripts/gcc_release -s 8:releases/gcc-8 -l -d /sourceware/snapshot-tmp/gcc all
+32 22 * * 6 sh /home/gccadmin/scripts/gcc_release -s 9:releases/gcc-9 -l -d /sourceware/snapshot-tmp/gcc all
+32 22 * * 7 sh /home/gccadmin/scripts/gcc_release -s 10:master -l -d /sourceware/snapshot-tmp/gcc all
index 10da704f95ff2e11ce08f580c43983bc3ce77773..8be870154f7fb50c373de632b705af90116f0865 100755 (executable)
@@ -64,19 +64,19 @@ inform() {
 usage() {
 cat <<EOF
 gcc_release -r release [-f] [further options]
-gcc_release -s name:svnbranch [further options]
+gcc_release -s name:gitbranch [further options]
 
 Options:
 
   -r release           Version of the form X.Y or X.Y.Z.
-  -s name:svnbranch    Create a snapshot, not a real release.
+  -s name:gitbranch    Create a snapshot, not a real release.
 
   -d destination       Local working directory where we will build the release
                        (default=${HOME}).
   -f                   Create a final release (and update ChangeLogs,...).
   -l                   Indicate that we are running on gcc.gnu.org.
   -p previous-tarball  Location of a previous tarball (to generate diff files).
-  -t tag               Tag to mark the release in SVN.
+  -t tag               Tag to mark the release in git.
   -u username          Username for upload operations.
 EOF
     exit 1
@@ -102,14 +102,15 @@ build_sources() {
     || error "Could not create \`${WORKING_DIRECTORY}'"
   changedir "${WORKING_DIRECTORY}"
 
+  # Check out the sources.
+  ${GIT} clone -q -b "${GITBRANCH}" "${GITROOT}" "`basename ${SOURCE_DIRECTORY}`" || \
+      error "Could not check out release sources"
+
   # If this is a final release, make sure that the ChangeLogs
   # and version strings are updated.
   if [ ${FINAL} -ne 0 ]; then
     inform "Updating ChangeLogs and version files"
 
-    ${SVN} -q co "${SVNROOT}/${SVNBRANCH}" "`basename ${SOURCE_DIRECTORY}`" ||\
-           error "Could not check out release sources"
-
     grep -q "gcc-${RELEASE_MAJOR}/index.html gcc-${RELEASE_MAJOR}/changes.html" \
         ${SOURCE_DIRECTORY}/contrib/gennews ||\
           error "New release not listed in contrib/gennews"
@@ -139,7 +140,7 @@ build_sources() {
 
     rm -f NEWS
 
-    svnciargs=""
+    commit_files=""
     for x in `changedir ${SOURCE_DIRECTORY} && \
              find . -name ChangeLog`; do
       # Update this ChangeLog file only if it does not yet contain the
@@ -154,7 +155,7 @@ ${LONG_DATE}  Release Manager
 EOF
        mv ${SOURCE_DIRECTORY}/${x}.new ${SOURCE_DIRECTORY}/${x} \
          || error "Could not update ${x}"
-       svnciargs="${svnciargs} ${x}"
+       commit_files="${commit_files} ${x}"
       fi
     done
 
@@ -169,7 +170,7 @@ EOF
        (changedir ${SOURCE_DIRECTORY}/gcc && \
         echo ${RELEASE} > BASE-VER) || \
        error "Could not update BASE-VER"
-       svnciargs="${svnciargs} gcc/BASE-VER"
+       commit_files="${commit_files} gcc/BASE-VER"
       else
        error "Release number ${RELEASE} does not immediately follow BASE-VER"
       fi
@@ -177,16 +178,15 @@ EOF
     (changedir ${SOURCE_DIRECTORY}/gcc && \
      : > DEV-PHASE) || \
     error "Could not update DEV-PHASE"
-    svnciargs="${svnciargs} gcc/DEV-PHASE"
+    commit_files="${commit_files} gcc/DEV-PHASE"
 
     (changedir ${SOURCE_DIRECTORY} && \
-     ${SVN} -q ci -m 'Update ChangeLog and version files for release' ${svnciargs}) || \
+     ${GIT} commit -q -m 'Update ChangeLog and version files for release' ${commit_files} && \
+     ${GIT} push) || \
     error "Could not commit ChangeLog and version file updates"
 
     # Make sure we tag the sources for a final release.
-    TAG="tags/gcc_`echo ${RELEASE} | tr . _`_release"
-
-    rm -rf ${SOURCE_DIRECTORY}
+    TAG="releases/gcc-${RELEASE}"
   fi
 
   # Tag the sources.
@@ -195,30 +195,43 @@ EOF
     # We don't want to overwrite an existing tag.  So, if the tag
     # already exists, issue an error message; the release manager can
     # manually remove the tag if appropriate.
-    echo "${SVN} ls ${SVNROOT}/${TAG}/ChangeLog" 
-    if ${SVN} ls "${SVNROOT}/${TAG}/ChangeLog"; then 
+    if (changedir ${SOURCE_DIRECTORY} && \
+       ${GIT} rev-parse "refs/tags/${TAG}" > /dev/null 2>&1); then
       error "Tag ${TAG} already exists"
     fi
-    ${SVN} -m "Tagging source as ${TAG}" cp "${SVNROOT}/${SVNBRANCH}" "${SVNROOT}/${TAG}" || \
+    (changedir ${SOURCE_DIRECTORY} && \
+     ${GIT} tag -s -m "GCC ${RELEASE} release" "${TAG}" && \
+     ${GIT} push origin tag "${TAG}") || \
       error "Could not tag sources"
-    SVNBRANCH=${TAG}
+    GITBRANCH=${TAG}
   fi
-  SVNREV=`${SVN} info "${SVNROOT}/${SVNBRANCH}"|awk '/Revision:/ {print $2}'`
 
-  # Export the current sources.
-  inform "Retrieving sources (svn export -r ${SVNREV} ${SVNROOT}/${SVNBRANCH})"
+  GITREV=`cd ${SOURCE_DIRECTORY} && ${GIT} rev-parse HEAD`
+  inform "Sources are commit ${GITREV}"
+
+  # Make sure there are no uncommitted changes in the sources.
+  status=${WORKING_DIRECTORY}/gitstatus.$$
+  (changedir ${SOURCE_DIRECTORY} && \
+   ${GIT} status --porcelain --ignored > "$status") || \
+    error "Could not get source directory status"
+  if [ -s "$status" ]; then
+    cat "$status"
+    error "Source directory has unexpected changes"
+  fi
+  rm "$status"
 
-  ${SVN} -q export -r${SVNREV} "${SVNROOT}/${SVNBRANCH}" "`basename ${SOURCE_DIRECTORY}`" ||\
-    error "Could not retrieve sources"
+  # Remove .git from the sources.
+  rm -rf "${SOURCE_DIRECTORY}/.git" || \
+    error "Could not remove .git from sources"
 
   # Run gcc_update on them to set up the timestamps nicely, and (re)write
-  # the LAST_UPDATED file containing the SVN tag/revision used.
+  # the LAST_UPDATED file containing the git tag/revision used.
   changedir "gcc-${RELEASE}"
   contrib/gcc_update --touch
-  echo "Obtained from SVN: ${SVNBRANCH} revision ${SVNREV}" > LAST_UPDATED
+  echo "Obtained from git: ${GITBRANCH} revision ${GITREV}" > LAST_UPDATED
 
   # For a prerelease or real release, we need to generate additional
-  # files not present in SVN.
+  # files not present in git.
   changedir "${SOURCE_DIRECTORY}"
   if [ $SNAPSHOT -ne 1 ]; then
     # Generate the documentation.
@@ -433,8 +446,8 @@ announce_snapshot() {
   https://gcc.gnu.org/pub/gcc/snapshots/"${RELEASE}"/
 and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.
 
-This snapshot has been generated from the GCC "${BRANCH}" SVN branch
-with the following options: "svn://gcc.gnu.org/svn/gcc/${SVNBRANCH} revision ${SVNREV}"
+This snapshot has been generated from the GCC "${BRANCH}" git branch
+with the following options: "git://gcc.gnu.org/git/gcc.git branch ${GITBRANCH} revision ${GITREV}"
 
 You'll find:
 " > ${SNAPSHOT_README}
@@ -457,8 +470,8 @@ for testing purposes.</p>
 we highly recommend you join the GCC developers list.  Details for
 how to sign up can be found on the GCC project home page.</p>
 
-<p>This snapshot has been generated from the GCC "${BRANCH}" SVN branch
-with the following options: <code>"svn://gcc.gnu.org/svn/gcc/${SVNBRANCH} revision ${SVNREV}"</code></p>
+<p>This snapshot has been generated from the GCC "${BRANCH}" git branch
+with the following options: <code>"git://gcc.gnu.org/git/gcc.git branch ${GITBRANCH} revision ${GITREV}"</code></p>
 
 <table>" > ${SNAPSHOT_INDEX}
        
@@ -511,13 +524,13 @@ export LC_ALL
 DATE=`date "+%Y%m%d"`
 LONG_DATE=`date "+%Y-%m-%d"`
 
-SVN=${SVN:-svn}
-# The CVS server containing the GCC repository.
-SVN_SERVER="gcc.gnu.org"
+GIT=${GIT:-git}
+# The server containing the GCC repository.
+GIT_SERVER="gcc.gnu.org"
 # The path to the repository on that server.
-SVN_REPOSITORY="/svn/gcc"
+GIT_REPOSITORY="/git/gcc.git"
 # The username to use when connecting to the server.
-SVN_USERNAME="${USER}"
+GIT_USERNAME="${USER}"
 
 # The machine to which files will be uploaded.
 GCC_HOSTNAME="gcc.gnu.org"
@@ -546,7 +559,7 @@ BRANCH=""
 
 # The name of the branch from which the release should be made, as used
 # for our version control system.
-SVNBRANCH=""
+GITBRANCH=""
 
 # The tag to apply to the sources used for the release.
 TAG=""
@@ -605,11 +618,11 @@ while getopts "d:fr:u:t:p:s:l" ARG; do
     d)    DESTINATION="${OPTARG}";;
     r)    RELEASE="${OPTARG}";;
     t)    TAG="${OPTARG}";;
-    u)    SVN_USERNAME="${OPTARG}";;
+    u)    GIT_USERNAME="${OPTARG}";;
     f)    FINAL=1;;
     s)    SNAPSHOT=1
           BRANCH=${OPTARG%:*}
-          SVNBRANCH=${OPTARG#*:}
+          GITBRANCH=${OPTARG#*:}
           ;;
     l)    LOCAL=1
          SCP=cp
@@ -643,7 +656,7 @@ while [ $# -ne 0 ]; do
 done
 
 # Perform consistency checking.
-if [ ${LOCAL} -eq 0 ] && [ -z ${SVN_USERNAME} ]; then
+if [ ${LOCAL} -eq 0 ] && [ -z ${GIT_USERNAME} ]; then
   error "No username specified"
 fi
 
@@ -673,12 +686,8 @@ if [ $SNAPSHOT -eq 0 ]; then
   fi
 
   # Compute the name of the branch, which is based solely on the major
-  # and minor release numbers.
-  if [ ${RELEASE_MAJOR} -ge 5 ]; then
-    SVNBRANCH="branches/gcc-${RELEASE_MAJOR}-branch"
-  else
-    SVNBRANCH="branches/gcc-${RELEASE_MAJOR}_${RELEASE_MINOR}-branch"
-  fi
+  # release number.
+  GITBRANCH="releases/gcc-${RELEASE_MAJOR}"
 
   # If this is not a final release, set various parameters accordingly.
   if [ ${FINAL} -ne 1 ]; then
@@ -707,13 +716,13 @@ fi
 WORKING_DIRECTORY="${DESTINATION}/gcc-${RELEASE}"
 SOURCE_DIRECTORY="${WORKING_DIRECTORY}/gcc-${RELEASE}"
 
-# Set up SVNROOT.
+# Set up GITROOT.
 if [ $LOCAL -eq 0 ]; then
-    SVNROOT="svn+ssh://${SVN_USERNAME}@${SVN_SERVER}${SVN_REPOSITORY}"
+    GITROOT="git+ssh://${GIT_USERNAME}@${GIT_SERVER}${GIT_REPOSITORY}"
 else
-    SVNROOT="file:///svn/gcc"
+    GITROOT="/git/gcc.git"
 fi
-export SVNROOT
+export GITROOT
 
 ########################################################################
 # Main Program