8047925: Add mercurial version checks to get_source.sh
authormduigou
Tue, 24 Jun 2014 15:21:47 -0700
changeset 25041 9dd97886fae6
parent 25040 09052d7f1467
child 25042 970302bcc736
8047925: Add mercurial version checks to get_source.sh Reviewed-by: tbell, mikael
get_source.sh
--- a/get_source.sh	Mon Jun 23 14:08:45 2014 -0700
+++ b/get_source.sh	Tue Jun 24 15:21:47 2014 -0700
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -25,9 +25,48 @@
 # questions.
 #
 
-# Get clones of all nested repositories
-sh ./common/bin/hgforest.sh clone "$@" || exit 1
+# Version check
+
+# required
+reqdmajor=1
+reqdminor=5
+reqdrev=0
+
+# requested
+rqstmajor=2
+rqstminor=6
+rqstrev=3
+
+# installed
+hgwhere="`which hg 2> /dev/null | grep -v '^no hg in '`"
+if [ "x$hgwhere" = "x" ]; then
+  echo "ERROR: Could not locate Mercurial command" >&2
+  exit 126
+fi
+
+hgversion="`hg --version 2> /dev/null | sed -n -e 's@^Mercurial Distributed SCM (version \(.*\))\$@\1@p'`"
+if [ "x${hgversion}" = "x" ] ; then
+  echo "ERROR: Could not determine Mercurial version" >&2
+  exit 126
+fi
+
+hgmajor="`echo $hgversion | cut -f 1 -d .`"
+hgminor="`echo $hgversion | cut -f 2 -d .`"
+hgrev="`echo $hgversion.0 | cut -f 3 -d .`" # rev is omitted for minor and major releases
+
+# Require
+if [ $hgmajor -lt $reqdmajor -o \( $hgmajor -eq $reqdmajor -a $hgminor -lt $reqdminor \) -o \( $hgmajor -eq $reqdmajor -a $hgminor -eq $reqdminor -a $hgrev -lt $reqdrev \) ] ; then
+  echo "ERROR: Mercurial version $reqdmajor.$reqdminor.$reqdrev or later is required. $hgwhere is version $hgversion" >&2
+  exit 126
+fi
+
+# Request
+if [ $hgmajor -lt $rqstmajor -o \( $hgmajor -eq $rqstmajor -a $hgminor -lt $rqstminor \) -o \( $hgmajor -eq $rqstmajor -a $hgminor -eq $rqstminor -a $hgrev -lt $rqstrev \) ] ; then
+  echo "WARNING: Mercurial version $rqstmajor.$rqstminor.$rqstrev or later is recommended. $hgwhere is version $hgversion" >&2
+fi
+
+# Get clones of all absent nested repositories (harmless if already exist)
+sh ./common/bin/hgforest.sh clone "$@" || exit $?
 
 # Update all existing repositories to the latest sources
 sh ./common/bin/hgforest.sh pull -u
-