23 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
23 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
24 # or visit www.oracle.com if you need additional information or have any |
24 # or visit www.oracle.com if you need additional information or have any |
25 # questions. |
25 # questions. |
26 # |
26 # |
27 |
27 |
|
28 to_stderr() { |
|
29 echo "$@" >&2 |
|
30 } |
|
31 |
|
32 error() { |
|
33 to_stderr "ERROR: $1" |
|
34 exit ${2:-126} |
|
35 } |
|
36 |
|
37 warning() { |
|
38 to_stderr "WARNING: $1" |
|
39 } |
|
40 |
|
41 version_field() { |
|
42 # rev is typically omitted for minor and major releases |
|
43 field=`echo ${1}.0 | cut -f ${2} -d .` |
|
44 if expr 1 + $field >/dev/null 2> /dev/null; then |
|
45 echo $field |
|
46 else |
|
47 echo -1 |
|
48 fi |
|
49 } |
|
50 |
28 # Version check |
51 # Version check |
29 |
52 |
30 # required |
53 # required |
31 reqdmajor=1 |
54 reqdmajor=1 |
32 reqdminor=5 |
55 reqdminor=4 |
33 reqdrev=0 |
56 reqdrev=0 |
34 |
57 |
35 # requested |
58 # requested |
36 rqstmajor=2 |
59 rqstmajor=2 |
37 rqstminor=6 |
60 rqstminor=6 |
38 rqstrev=3 |
61 rqstrev=3 |
39 |
62 |
|
63 |
40 # installed |
64 # installed |
41 hgwhere="`which hg 2> /dev/null | grep -v '^no hg in '`" |
65 hgwhere="`command -v hg`" |
42 if [ "x$hgwhere" = "x" ]; then |
66 if [ "x$hgwhere" = "x" ]; then |
43 echo "ERROR: Could not locate Mercurial command" >&2 |
67 error "Could not locate Mercurial command" |
44 exit 126 |
|
45 fi |
68 fi |
46 |
69 |
47 hgversion="`hg --version 2> /dev/null | sed -n -e 's@^Mercurial Distributed SCM (version \(.*\))\$@\1@p'`" |
70 hgversion="`hg --version 2> /dev/null | sed -n -e 's@^Mercurial Distributed SCM (version \([^+]*\).*)\$@\1@p'`" |
48 if [ "x${hgversion}" = "x" ] ; then |
71 if [ "x${hgversion}" = "x" ] ; then |
49 echo "ERROR: Could not determine Mercurial version" >&2 |
72 error "Could not determine Mercurial version of $hgwhere" |
50 exit 126 |
|
51 fi |
73 fi |
52 |
74 |
53 hgmajor="`echo $hgversion | cut -f 1 -d .`" |
75 hgmajor="`version_field $hgversion 1`" |
54 hgminor="`echo $hgversion | cut -f 2 -d .`" |
76 hgminor="`version_field $hgversion 2`" |
55 hgrev="`echo $hgversion.0 | cut -f 3 -d .`" # rev is omitted for minor and major releases |
77 hgrev="`version_field $hgversion 3`" |
|
78 |
|
79 if [ $hgmajor -eq -1 -o $hgminor -eq -1 -o $hgrev -eq -1 ] ; then |
|
80 error "Could not determine Mercurial version of $hgwhere from \"$hgversion\"" |
|
81 fi |
|
82 |
56 |
83 |
57 # Require |
84 # Require |
58 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 |
85 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 |
59 echo "ERROR: Mercurial version $reqdmajor.$reqdminor.$reqdrev or later is required. $hgwhere is version $hgversion" >&2 |
86 error "Mercurial version $reqdmajor.$reqdminor.$reqdrev or later is required. $hgwhere is version $hgversion" |
60 exit 126 |
|
61 fi |
87 fi |
|
88 |
62 |
89 |
63 # Request |
90 # Request |
64 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 |
91 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 |
65 echo "WARNING: Mercurial version $rqstmajor.$rqstminor.$rqstrev or later is recommended. $hgwhere is version $hgversion" >&2 |
92 warning "Mercurial version $rqstmajor.$rqstminor.$rqstrev or later is recommended. $hgwhere is version $hgversion" |
66 fi |
93 fi |
|
94 |
67 |
95 |
68 # Get clones of all absent nested repositories (harmless if already exist) |
96 # Get clones of all absent nested repositories (harmless if already exist) |
69 sh ./common/bin/hgforest.sh clone "$@" || exit $? |
97 sh ./common/bin/hgforest.sh clone "$@" || exit $? |
70 |
98 |
71 # Update all existing repositories to the latest sources |
99 # Update all existing repositories to the latest sources |