2009-06-20 00:32:16 +04:00
#!/usr/bin/env python
2008-07-22 16:27:55 +04:00
2009-10-22 19:05:39 +04:00
# LDAP
2009-10-07 01:49:32 +04:00
LDAPCSDK_CO_TAG = ' LDAPCSDK_6_0_6D_MOZILLA_RTM '
2009-10-22 19:05:39 +04:00
LDAPCSDK_DIRS = ( ' directory/c-sdk ' , )
2008-07-22 16:27:55 +04:00
2009-11-03 07:02:59 +03:00
# URL of the default hg repository to clone for ChatZilla.
DEFAULT_CHATZILLA_REPO = ' http://hg.mozilla.org/chatzilla/ '
DEFAULT_CHATZILLA_REV = " default "
2008-07-22 16:27:55 +04:00
2009-11-03 07:02:59 +03:00
# URL of the default hg repository to clone for DOM Inspector.
2009-10-22 19:05:39 +04:00
DEFAULT_INSPECTOR_REPO = ' http://hg.mozilla.org/dom-inspector/ '
DEFAULT_INSPECTOR_REV = " default "
2008-07-22 16:27:55 +04:00
2009-10-22 19:05:39 +04:00
# URL of the default hg repository to clone for Venkman.
DEFAULT_VENKMAN_REPO = ' http://hg.mozilla.org/venkman/ '
DEFAULT_VENKMAN_REV = " default "
2008-07-22 16:27:55 +04:00
2008-12-01 22:34:05 +03:00
DEFAULT_COMM_REV = " default "
2009-03-19 18:35:42 +03:00
2008-07-22 16:27:55 +04:00
# URL of the default hg repository to clone for Mozilla.
2010-04-22 10:38:36 +04:00
DEFAULT_MOZILLA_REPO = ' http://hg.mozilla.org/mozilla-central/ '
2010-06-09 12:55:45 +04:00
DEFAULT_MOZILLA_REV = " default "
2008-12-01 20:27:18 +03:00
2009-10-22 19:05:39 +04:00
# The set of defaults below relate to the current switching mechanism between
# trunk or branches and back again if it is required.
# The current version expected in the .treestate file for nothing to happen.
# This reflects the "[treestate] src_update_version = ..." value.
#
# src_update_version values:
# '1' : mozilla/ may have been moved to mozilla-1.9.1 (or kept the same
# depending on set-up).
# '2' : mozilla/ may have been moved back to mozilla-central.
CURRENT_TREESTATE_VERSION = ' 2 '
2008-12-01 20:27:18 +03:00
# REGEX to match against, $1 should refer to protocol scheme
2009-10-22 19:05:39 +04:00
SWITCH_MOZILLA_REPO_REGEXP = ' (ssh|http|https): \ / \ /hg \ .mozilla \ .org \ /releases/mozilla-1.9.1 \ /?$ '
# The location to back-up the existing mozilla repo to, e.g. ".mozilla-trunk"
# or ".mozilla-1.9.1".
SWITCH_MOZILLA_REPO_BACKUP_LOCATION = " .mozilla-1.9.1 "
# This is the potential location for a repository from the last time we
# switched. Can be blank for no effect.
SWITCH_MOZILLA_REPO_OLD_REPO_LOCATION = " .mozilla-trunk "
# This should be the same as DEFAULT_MOZILLA_REPO but using %s instead of http
# for the scheme.
SWITCH_MOZILLA_REPO_REPLACE = ' %s ://hg.mozilla.org/mozilla-central/ '
SWITCH_MOZILLA_BASE_REV = " GECKO_1_9_1_BASE "
2008-07-22 16:27:55 +04:00
2010-01-13 23:53:10 +03:00
import sys
# Test Python Version. 2.4 required for `import subprocess`
pyver = sys . version_info
2010-01-16 15:54:00 +03:00
if pyver [ 0 ] < = 1 or ( pyver [ 0 ] == 2 and pyver [ 1 ] < 4 ) :
2010-01-13 23:53:10 +03:00
sys . exit ( " ERROR: Python 2.4 or newer required " )
2010-01-16 15:54:00 +03:00
elif pyver [ 0 ] > = 3 :
2010-01-13 23:53:10 +03:00
sys . exit ( " ERROR: Python series 3 is not supported, use series 2 > 2.4 " )
del pyver
2009-03-19 18:35:42 +03:00
2008-07-22 16:27:55 +04:00
import os
import datetime
2010-02-17 18:52:24 +03:00
from optparse import OptionParser , OptionValueError
2008-07-22 16:27:55 +04:00
topsrcdir = os . path . dirname ( __file__ )
if topsrcdir == ' ' :
topsrcdir = ' . '
2008-12-01 20:27:18 +03:00
TREE_STATE_FILE = os . path . join ( topsrcdir , ' .treestate ' )
2008-07-22 16:27:55 +04:00
try :
from subprocess import check_call
except ImportError :
import subprocess
def check_call ( * popenargs , * * kwargs ) :
retcode = subprocess . call ( * popenargs , * * kwargs )
if retcode :
cmd = kwargs . get ( " args " )
if cmd is None :
cmd = popenargs [ 0 ]
raise Exception ( " Command ' %s ' returned non-zero exit status %i " % ( cmd , retcode ) )
2010-02-17 18:52:24 +03:00
def check_call_noisy ( cmd , retryMax = 0 , * args , * * kwargs ) :
""" Wrapper around execute_check_call() to allow retries before failing.
| cmd | , is the command to try and execute .
| retryMax | , is the maximum number of retries to attempt , 0 by default .
"""
def execute_check_call ( cmd , * args , * * kwargs ) :
2008-07-22 16:27:55 +04:00
print " Executing command: " , cmd
check_call ( cmd , * args , * * kwargs )
2010-02-17 18:52:24 +03:00
# By default (= no retries), simply pass the call on.
if retryMax == 0 :
execute_check_call ( cmd , * args , * * kwargs )
return
# Loop (1 + retryMax) times, at most.
for r in range ( 0 , 1 + retryMax ) :
# Add a retry header, not for initial call.
if r != 0 :
print >> sys . stderr , " Retrying previous command: %d of %d time(s) " % ( r , retryMax )
try :
# (Re-)Try the call.
execute_check_call ( cmd , * args , * * kwargs )
# If the call succeeded then no more retries.
break
except :
# Print the exception without its traceback.
# This traceback starts in the try block, which should be low value.
print >> sys . stderr , " The exception was: "
sys . excepthook ( sys . exc_info ( ) [ 0 ] , sys . exc_info ( ) [ 1 ] , None )
# Add a blank line.
print >> sys . stderr
else :
# Raise our own exception.
# This traceback starts at (= reports) the initial caller line.
raise Exception ( " Command ' %s ' failed %d time(s). Giving up. " % ( cmd , retryMax + 1 ) )
2008-12-01 20:27:18 +03:00
def repo_config ( ) :
2009-04-26 17:25:08 +04:00
""" Create/Update TREE_STATE_FILE as needed.
2009-10-22 19:05:39 +04:00
switch_mozilla_repo ( ) may be called if the branch that the mozilla repo is
on needs changing
2009-04-26 17:25:08 +04:00
"""
2008-12-01 20:27:18 +03:00
import ConfigParser
2009-04-26 17:25:08 +04:00
2009-10-22 19:05:39 +04:00
config_version = CURRENT_TREESTATE_VERSION
2009-04-15 12:45:45 +04:00
2009-10-22 19:05:39 +04:00
config = ConfigParser . ConfigParser ( )
2008-12-01 20:27:18 +03:00
2009-10-22 19:05:39 +04:00
# If the file exists, see if we need to move to the stable branch.
# If it doesn't exist, we assume the user hasn't pulled before (or has
# done it manually) and therefore leave his mozilla/ repo as it is.
if os . path . exists ( TREE_STATE_FILE ) :
config . read ( [ TREE_STATE_FILE ] )
2008-12-01 20:27:18 +03:00
2009-10-22 19:05:39 +04:00
if config . has_option ( ' treestate ' , ' src_update_version ' ) :
config_version = config . get ( ' treestate ' , ' src_update_version ' )
else :
# If src_update_version doesn't exist, assume this to be '1' and
# apply the update. This was because the first version of this
# migration allowed the existence of the file to equate to '1'.
config_version = ' 1 '
2009-04-26 17:25:08 +04:00
2009-10-22 19:05:39 +04:00
# Do nothing if the current version is up to date.
if config_version < CURRENT_TREESTATE_VERSION :
switch_mozilla_repo ( )
if not os . path . exists ( TREE_STATE_FILE ) or config_version < CURRENT_TREESTATE_VERSION :
if not config . has_section ( ' treestate ' ) :
config . add_section ( ' treestate ' )
config . set ( ' treestate ' , ' src_update_version ' , CURRENT_TREESTATE_VERSION )
# Write this file out
f = open ( TREE_STATE_FILE , ' w ' )
try :
config . write ( f )
finally :
f . close ( )
def switch_mozilla_repo ( ) :
""" If the mozilla/ repo matches SWITCH_MOZILLA_REPO_REGEXP then:
1 ) Backup ( unused anymore ) checkout of mozilla / .
2 a ) If SWITCH_MOZILLA_REPO_OLD_REPO_LOCATION exists , move that to mozilla / .
2 b ) Else clone the backup of mozilla / up to the SWITCH_MOZILLA_BASE_REV
revision and set the pull location to SWITCH_MOZILLA_REPO_REPLACE .
It is expected that the normal pull / update functions in this script will
update the new mozilla / repo to the latest version .
2009-04-26 17:25:08 +04:00
"""
2008-12-01 20:27:18 +03:00
mozilla_path = os . path . join ( topsrcdir , ' mozilla ' )
2009-04-26 17:25:08 +04:00
# Do nothing if there is no Mozilla directory.
2008-12-01 20:27:18 +03:00
if not os . path . exists ( mozilla_path ) :
return
import ConfigParser , re
config = ConfigParser . ConfigParser ( )
config . read ( [ os . path . join ( mozilla_path , ' .hg ' , ' hgrc ' ) ] )
if not config . has_option ( ' paths ' , ' default ' ) :
2009-04-26 17:25:08 +04:00
# Abort, not to get into a possibly inconsistent state.
sys . exit ( " Error: default path in mozilla/.hg/hgrc is undefined! " )
2008-12-01 20:27:18 +03:00
2009-10-22 19:05:39 +04:00
# Compile the Mozilla repository regex.
moz_old_regex = re . compile ( SWITCH_MOZILLA_REPO_REGEXP , re . I )
match = moz_old_regex . match ( config . get ( ' paths ' , ' default ' ) )
# Do nothing if not pulling from the one we're trying to switch from.
2008-12-01 20:27:18 +03:00
if not match :
2009-04-26 17:25:08 +04:00
return
2008-12-01 20:27:18 +03:00
config . set ( ' paths ' , ' default ' ,
2009-10-22 19:05:39 +04:00
SWITCH_MOZILLA_REPO_REPLACE % match . group ( 1 ) )
2008-12-01 20:27:18 +03:00
if config . has_option ( ' paths ' , ' default-push ' ) :
2009-10-22 19:05:39 +04:00
match = moz_old_regex . match ( config . get ( ' paths ' , ' default-push ' ) )
2009-04-26 17:25:08 +04:00
# Do not update this property if not pushing to Mozilla trunk.
if match :
2008-12-01 20:27:18 +03:00
config . set ( ' paths ' , ' default-push ' ,
2009-10-22 19:05:39 +04:00
SWITCH_MOZILLA_REPO_REPLACE % match . group ( 1 ) )
2008-12-01 20:27:18 +03:00
2010-02-05 19:08:45 +03:00
hgcloneopts = [ ]
if options . hgcloneopts :
hgcloneopts = options . hgcloneopts . split ( )
2010-03-17 16:59:43 +03:00
hgopts = [ ]
if options . hgopts :
hgopts = options . hgopts . split ( )
2009-10-22 19:05:39 +04:00
backup_mozilla_path = os . path . join ( topsrcdir , SWITCH_MOZILLA_REPO_BACKUP_LOCATION )
print " Moving mozilla to " + SWITCH_MOZILLA_REPO_BACKUP_LOCATION + " ... "
2009-04-26 17:25:08 +04:00
try :
2009-10-22 19:05:39 +04:00
os . rename ( mozilla_path , backup_mozilla_path )
2009-04-26 17:25:08 +04:00
except :
# Print the exception without its traceback.
sys . excepthook ( sys . exc_info ( ) [ 0 ] , sys . exc_info ( ) [ 1 ] , None )
sys . exit ( " Error: Mozilla directory renaming failed! " )
2009-10-22 19:05:39 +04:00
# Does the user have a pre-existing backup repository?
old_backup_repository = os . path . join ( topsrcdir , SWITCH_MOZILLA_REPO_OLD_REPO_LOCATION )
if SWITCH_MOZILLA_REPO_OLD_REPO_LOCATION != " " and \
os . path . exists ( old_backup_repository ) :
# Yes, so let's use that
print " Moving " + old_backup_repository + " to " + mozilla_path + " ... "
try :
os . rename ( old_backup_repository , mozilla_path )
except :
# Print the exception without its traceback.
sys . excepthook ( sys . exc_info ( ) [ 0 ] , sys . exc_info ( ) [ 1 ] , None )
sys . exit ( " Error: Renaming old backup directory failed! You must recover manually. " )
# Let's leave the hgrc as it was, so any repo specific config is left
# the same.
return
2009-04-26 17:25:08 +04:00
# Locally clone common repository history.
2010-02-17 23:24:59 +03:00
check_call_noisy ( [ options . hg , ' clone ' , ' -r ' , SWITCH_MOZILLA_BASE_REV ] + hgcloneopts + hgopts + [ backup_mozilla_path , mozilla_path ] ,
2010-02-17 18:52:24 +03:00
retryMax = options . retries )
2008-12-01 20:27:18 +03:00
2009-10-22 19:05:39 +04:00
# Rewrite hgrc for new local mozilla repo based on pre-existing hgrc
2008-12-01 20:27:18 +03:00
# but with new values
f = open ( os . path . join ( topsrcdir , ' mozilla ' , ' .hg ' , ' hgrc ' ) , ' w ' )
try :
config . write ( f )
finally :
f . close ( )
2009-11-03 07:02:59 +03:00
def backup_cvs_extension ( extensionName , extensionDir , extensionPath ) :
""" Backup (obsolete) cvs checkout of extensionName.
2009-04-26 17:25:08 +04:00
"""
2009-11-03 07:02:59 +03:00
# Do nothing if there is no extensionName cvs directory.
if not os . path . exists ( os . path . join ( extensionPath , ' CVS ' ) ) :
2009-03-19 18:35:42 +03:00
return
2009-11-03 07:02:59 +03:00
extensionBackupPath = extensionPath + ' -cvs '
print " Moving %s to %s -cvs... " % ( extensionDir , extensionDir )
2009-04-26 17:25:08 +04:00
try :
2009-11-03 07:02:59 +03:00
os . rename ( extensionPath , extensionBackupPath )
2009-04-26 17:25:08 +04:00
except :
# Print the exception without its traceback.
sys . excepthook ( sys . exc_info ( ) [ 0 ] , sys . exc_info ( ) [ 1 ] , None )
2009-11-03 07:02:59 +03:00
sys . exit ( " Error: %s directory renaming failed! " % extensionName )
2009-03-19 18:35:42 +03:00
2008-08-29 18:40:21 +04:00
def do_hg_pull ( dir , repository , hg , rev ) :
2010-03-17 16:59:43 +03:00
""" Clone if the dir doesn ' t exist, pull if it does.
"""
2008-07-22 16:27:55 +04:00
fulldir = os . path . join ( topsrcdir , dir )
2010-03-17 16:59:43 +03:00
2010-02-05 19:08:45 +03:00
hgcloneopts = [ ]
if options . hgcloneopts :
hgcloneopts = options . hgcloneopts . split ( )
2010-03-17 16:59:43 +03:00
hgopts = [ ]
if options . hgopts :
hgopts = options . hgopts . split ( )
2010-03-17 21:27:07 +03:00
2008-07-22 16:27:55 +04:00
if not os . path . exists ( fulldir ) :
fulldir = os . path . join ( topsrcdir , dir )
2010-02-17 18:52:24 +03:00
check_call_noisy ( [ hg , ' clone ' ] + hgcloneopts + hgopts + [ repository , fulldir ] ,
retryMax = options . retries )
2008-07-22 16:27:55 +04:00
else :
2009-07-18 22:44:35 +04:00
cmd = [ hg , ' pull ' , ' -R ' , fulldir ] + hgopts
2008-07-22 16:27:55 +04:00
if repository is not None :
cmd . append ( repository )
2010-02-17 18:52:24 +03:00
check_call_noisy ( cmd , retryMax = options . retries )
2010-03-17 16:59:43 +03:00
2008-08-29 18:40:21 +04:00
# update to specific revision
2010-03-17 16:59:43 +03:00
cmd = [ hg , ' update ' , ' -r ' , rev , ' -R ' , fulldir ] + hgopts
2008-08-29 18:40:21 +04:00
if options . verbose :
2010-03-17 16:59:43 +03:00
cmd . append ( ' -v ' )
# Explicitly never retry 'hg update': otherwise any merge failures are ignored.
2010-03-17 19:54:06 +03:00
# This command is local: a failure can't be caused by a network error.
2010-03-17 16:59:43 +03:00
check_call_noisy ( cmd , retryMax = 0 )
2008-07-22 16:27:55 +04:00
check_call ( [ hg , ' parent ' , ' -R ' , fulldir ,
' --template=Updated to revision {node} . \n ' ] )
def do_cvs_checkout ( modules , tag , cvsroot , cvs , checkoutdir ) :
2009-03-19 18:35:42 +03:00
""" Check out a CVS directory into the checkoutdir subdirectory.
2008-07-22 16:27:55 +04:00
modules is a list of directories to check out , e . g . [ ' extensions/irc ' ]
"""
for module in modules :
( parent , leaf ) = os . path . split ( module )
print " CVS checkout begin: " + datetime . datetime . utcnow ( ) . strftime ( " % Y- % m- %d % H: % M: % S UTC " )
2010-03-17 19:54:06 +03:00
revopt = ( ( tag == ' HEAD ' ) and [ ' -A ' ] ) or [ ' -r ' , tag ]
# Explicitly never retry 'cvs checkout': otherwise any merge failures are ignored.
# No way to tell whether a failure is caused by a network error or a local conflict: better be safe.
check_call_noisy ( [ cvs , ' -d ' , cvsroot , ' -q ' ,
' checkout ' , ' -P ' ] + revopt + [ ' -d ' , leaf ,
' mozilla/ %s ' % module ] ,
retryMax = 0 ,
cwd = os . path . join ( topsrcdir , checkoutdir , parent ) )
2008-07-22 16:27:55 +04:00
print " CVS checkout end: " + datetime . datetime . utcnow ( ) . strftime ( " % Y- % m- %d % H: % M: % S UTC " )
2010-02-17 18:52:24 +03:00
def check_retries_option ( option , opt_str , value , parser ) :
if value < 0 :
raise OptionValueError ( " %s option value needs to be positive (not ' %d ' ) " % ( opt_str , value ) )
setattr ( parser . values , option . dest , value )
o = OptionParser ( usage = " % prog [options] checkout " )
2008-07-22 16:27:55 +04:00
o . add_option ( " -m " , " --comm-repo " , dest = " comm_repo " ,
default = None ,
help = " URL of comm (Calendar/Mail/Suite) repository to pull from (default: use hg default in .hg/hgrc) " )
o . add_option ( " --skip-comm " , dest = " skip_comm " ,
action = " store_true " , default = False ,
help = " Skip pulling the comm (Calendar/Mail/Suite) repository. " )
2008-08-29 18:40:21 +04:00
o . add_option ( " --comm-rev " , dest = " comm_rev " ,
default = DEFAULT_COMM_REV ,
help = " Revision of comm (Calendar/Mail/Suite) repository to update to. Default: \" " + DEFAULT_COMM_REV + " \" " )
2008-07-22 16:27:55 +04:00
o . add_option ( " -z " , " --mozilla-repo " , dest = " mozilla_repo " ,
default = None ,
help = " URL of Mozilla repository to pull from (default: use hg default in mozilla/.hg/hgrc; or if that file doesn ' t exist, use \" " + DEFAULT_MOZILLA_REPO + " \" .) " )
o . add_option ( " --skip-mozilla " , dest = " skip_mozilla " ,
action = " store_true " , default = False ,
help = " Skip pulling the Mozilla repository. " )
2008-08-29 18:40:21 +04:00
o . add_option ( " --mozilla-rev " , dest = " mozilla_rev " ,
default = DEFAULT_MOZILLA_REV ,
help = " Revision of Mozilla repository to update to. Default: \" " + DEFAULT_MOZILLA_REV + " \" " )
2008-07-22 16:27:55 +04:00
2008-08-16 03:47:02 +04:00
o . add_option ( " --inspector-repo " , dest = " inspector_repo " ,
default = None ,
2009-11-03 07:02:59 +03:00
help = " URL of DOM Inspector repository to pull from (default: use hg default in mozilla/extensions/inspector/.hg/hgrc; or if that file doesn ' t exist, use \" " + DEFAULT_INSPECTOR_REPO + " \" .) " )
2008-08-16 03:47:02 +04:00
o . add_option ( " --skip-inspector " , dest = " skip_inspector " ,
action = " store_true " , default = False ,
2009-11-03 07:02:59 +03:00
help = " Skip pulling the DOM Inspector repository. " )
2008-08-29 18:40:21 +04:00
o . add_option ( " --inspector-rev " , dest = " inspector_rev " ,
default = DEFAULT_INSPECTOR_REV ,
2009-11-03 07:02:59 +03:00
help = " Revision of DOM Inspector repository to update to. Default: \" " + DEFAULT_INSPECTOR_REV + " \" " )
2008-08-16 03:47:02 +04:00
2008-09-27 02:19:18 +04:00
o . add_option ( " --skip-ldap " , dest = " skip_ldap " ,
action = " store_true " , default = False ,
help = " Skip pulling LDAP from the Mozilla CVS repository. " )
2009-03-19 18:35:42 +03:00
2009-11-03 07:02:59 +03:00
o . add_option ( " --chatzilla-repo " , dest = " chatzilla_repo " ,
default = None ,
help = " URL of ChatZilla repository to pull from (default: use hg default in mozilla/extensions/irc/.hg/hgrc; or if that file doesn ' t exist, use \" " + DEFAULT_CHATZILLA_REPO + " \" .) " )
2008-07-22 16:27:55 +04:00
o . add_option ( " --skip-chatzilla " , dest = " skip_chatzilla " ,
action = " store_true " , default = False ,
help = " Skip pulling the ChatZilla repository. " )
2009-11-03 07:02:59 +03:00
o . add_option ( " --chatzilla-rev " , dest = " chatzilla_rev " ,
default = DEFAULT_CHATZILLA_REV ,
help = " Revision of ChatZilla repository to update to. Default: \" " + DEFAULT_CHATZILLA_REV + " \" " )
2009-03-19 18:35:42 +03:00
o . add_option ( " --venkman-repo " , dest = " venkman_repo " ,
default = None ,
help = " URL of Venkman repository to pull from (default: use hg default in mozilla/extensions/venkman/.hg/hgrc; or if that file doesn ' t exist, use \" " + DEFAULT_VENKMAN_REPO + " \" .) " )
2008-07-22 16:27:55 +04:00
o . add_option ( " --skip-venkman " , dest = " skip_venkman " ,
action = " store_true " , default = False ,
help = " Skip pulling the Venkman repository. " )
2009-03-19 18:35:42 +03:00
o . add_option ( " --venkman-rev " , dest = " venkman_rev " ,
default = DEFAULT_VENKMAN_REV ,
help = " Revision of Venkman repository to update to. Default: \" " + DEFAULT_VENKMAN_REV + " \" " )
2008-07-22 16:27:55 +04:00
o . add_option ( " --hg " , dest = " hg " , default = os . environ . get ( ' HG ' , ' hg ' ) ,
help = " The location of the hg binary " )
2008-07-22 23:58:15 +04:00
o . add_option ( " -v " , " --verbose " , dest = " verbose " ,
action = " store_true " , default = False ,
help = " Enable verbose output on hg updates " )
2008-10-02 21:19:48 +04:00
o . add_option ( " --hg-options " , dest = " hgopts " ,
help = " Pass arbitrary options to hg commands (i.e. --debug, --time) " )
2010-02-05 19:08:45 +03:00
o . add_option ( " --hg-clone-options " , dest = " hgcloneopts " ,
2010-03-17 16:59:43 +03:00
help = " Pass arbitrary options to hg clone commands (i.e. --uncompressed) " )
2008-07-22 16:27:55 +04:00
2010-02-17 18:52:24 +03:00
o . add_option ( " --cvs " , dest = " cvs " , default = os . environ . get ( ' CVS ' , ' cvs ' ) ,
help = " The location of the cvs binary " )
o . add_option ( " --cvsroot " , dest = " cvsroot " ,
default = os . environ . get ( ' CVSROOT ' , ' :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot ' ) ,
help = " The CVSROOT (default: :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot " )
o . add_option ( " --retries " , dest = " retries " , type = " int " , metavar = " NUM " ,
default = 1 , help = " Number of times to retry a failed command before giving up. (default: 1) " ,
action = " callback " , callback = check_retries_option )
2009-04-15 12:45:45 +04:00
def fixup_comm_repo_options ( options ) :
""" Check options.comm_repo value.
2008-07-22 16:27:55 +04:00
2009-04-15 12:45:45 +04:00
options . comm_repo is normally None .
This is fine - - our " hg pull " command will omit the repo URL .
The exception is the initial checkout , which does an " hg clone " .
That command requires a repository URL .
2008-07-22 16:27:55 +04:00
"""
2009-04-26 17:25:08 +04:00
if options . comm_repo is None and \
not os . path . exists ( os . path . join ( topsrcdir , ' .hg ' ) ) :
2008-07-22 16:27:55 +04:00
o . print_help ( )
print
2009-04-26 17:25:08 +04:00
print " Error: the -m option is required for the initial checkout! "
2008-07-22 16:27:55 +04:00
sys . exit ( 2 )
2009-04-15 12:45:45 +04:00
def fixup_mozilla_repo_options ( options ) :
""" Handle special case: initial checkout of Mozilla.
See fixup_comm_repo_options ( ) .
"""
2009-04-26 17:25:08 +04:00
if options . mozilla_repo is None and \
not os . path . exists ( os . path . join ( topsrcdir , ' mozilla ' ) ) :
2008-07-22 16:27:55 +04:00
options . mozilla_repo = DEFAULT_MOZILLA_REPO
2009-11-03 07:02:59 +03:00
def fixup_chatzilla_repo_options ( options ) :
""" Handle special case: initial hg checkout of Chatzilla.
See fixup_comm_repo_options ( ) .
backup_cvs_extension ( ) is also called .
"""
extensionPath = os . path . join ( topsrcdir , ' mozilla ' , ' extensions ' , ' irc ' )
backup_cvs_extension ( ' Chatzilla ' , ' irc ' , extensionPath )
if options . chatzilla_repo is None and not os . path . exists ( extensionPath ) :
options . chatzilla_repo = DEFAULT_CHATZILLA_REPO
2009-04-15 12:45:45 +04:00
def fixup_inspector_repo_options ( options ) :
2009-11-03 07:02:59 +03:00
""" Handle special case: initial checkout of DOM Inspector.
2009-04-15 12:45:45 +04:00
See fixup_comm_repo_options ( ) .
"""
2009-04-26 17:25:08 +04:00
# No cvs backup needed as DOM Inspector was part (and removed from)
# Mozilla hg repository.
if options . inspector_repo is None and \
not os . path . exists ( os . path . join ( topsrcdir , ' mozilla ' , ' extensions ' , ' inspector ' ) ) :
2008-08-16 03:47:02 +04:00
options . inspector_repo = DEFAULT_INSPECTOR_REPO
2009-04-15 12:45:45 +04:00
def fixup_venkman_repo_options ( options ) :
2009-04-26 17:25:08 +04:00
""" Handle special case: initial hg checkout of Venkman.
2009-04-15 12:45:45 +04:00
See fixup_comm_repo_options ( ) .
2009-11-03 07:02:59 +03:00
backup_cvs_extension ( ) is also called .
2009-04-15 12:45:45 +04:00
"""
2009-04-26 17:25:08 +04:00
2009-11-03 07:02:59 +03:00
extensionPath = os . path . join ( topsrcdir , ' mozilla ' , ' extensions ' , ' venkman ' )
2009-04-26 17:25:08 +04:00
2009-11-03 07:02:59 +03:00
backup_cvs_extension ( ' Venkman ' , ' venkman ' , extensionPath )
if options . venkman_repo is None and not os . path . exists ( extensionPath ) :
2009-03-19 18:35:42 +03:00
options . venkman_repo = DEFAULT_VENKMAN_REPO
2008-07-22 16:27:55 +04:00
try :
( options , ( action , ) ) = o . parse_args ( )
except ValueError :
o . print_help ( )
sys . exit ( 2 )
if action in ( ' checkout ' , ' co ' ) :
2009-04-26 17:25:08 +04:00
# Update Comm repository configuration.
repo_config ( )
2008-07-22 16:27:55 +04:00
if not options . skip_comm :
2009-04-15 12:45:45 +04:00
fixup_comm_repo_options ( options )
2008-08-29 18:40:21 +04:00
do_hg_pull ( ' . ' , options . comm_repo , options . hg , options . comm_rev )
2008-07-22 16:27:55 +04:00
if not options . skip_mozilla :
2009-04-15 12:45:45 +04:00
fixup_mozilla_repo_options ( options )
2008-08-29 18:40:21 +04:00
do_hg_pull ( ' mozilla ' , options . mozilla_repo , options . hg , options . mozilla_rev )
2008-07-22 16:27:55 +04:00
2009-03-19 18:35:42 +03:00
# Check whether destination directory exists for these extensions.
if ( not options . skip_chatzilla or not options . skip_inspector or \
not options . skip_venkman ) and \
not os . path . exists ( os . path . join ( topsrcdir , ' mozilla ' , ' extensions ' ) ) :
# Don't create the directory: Mozilla repository should provide it...
2009-04-26 17:25:08 +04:00
sys . exit ( " Error: mozilla/extensions directory does not exist; " + \
" ChatZilla, DOM Inspector and/or Venkman cannot be checked out! " )
2009-03-19 18:35:42 +03:00
2009-11-03 07:02:59 +03:00
if not options . skip_chatzilla :
fixup_chatzilla_repo_options ( options )
do_hg_pull ( os . path . join ( ' mozilla ' , ' extensions ' , ' irc ' ) , options . chatzilla_repo , options . hg , options . chatzilla_rev )
2008-08-16 03:47:02 +04:00
if not options . skip_inspector :
2009-04-15 12:45:45 +04:00
fixup_inspector_repo_options ( options )
2008-08-29 18:40:21 +04:00
do_hg_pull ( os . path . join ( ' mozilla ' , ' extensions ' , ' inspector ' ) , options . inspector_repo , options . hg , options . inspector_rev )
2008-08-16 03:47:02 +04:00
2009-01-19 19:16:43 +03:00
if not options . skip_ldap :
do_cvs_checkout ( LDAPCSDK_DIRS , LDAPCSDK_CO_TAG , options . cvsroot , options . cvs , ' ' )
2008-07-22 16:27:55 +04:00
if not options . skip_venkman :
2009-04-15 12:45:45 +04:00
fixup_venkman_repo_options ( options )
2009-03-19 18:35:42 +03:00
do_hg_pull ( os . path . join ( ' mozilla ' , ' extensions ' , ' venkman ' ) , options . venkman_repo , options . hg , options . venkman_rev )
2008-07-22 16:27:55 +04:00
else :
o . print_help ( )
sys . exit ( 2 )