* Engine is now appended to instance name (wording.appendEngine)
* Parts of the instance name can be used in forcedCfg. For example
on an instance called stable-master-pgsql %instancename:1% is replaced
with 'master'
* New flag 'purpose' replaces 'integration'. Purpose can be 'integration',
'stable' or 'review'. Instance names reflect this.
* A type of instance can be specified to `mdk backport` (i.e., 'integration',
'review' or 'stable'. If none is given the type of the current instance is
used.
- ['-i', '--integration'],
- 'action': 'store_true',
- 'help': 'backport to integration instances'
+ 'action': 'store',
+ 'choices': ['integration', 'review', 'stable'],
+ 'default': 'stable',
+ 'help': 'which instances to backport to',
+ 'metavar': 'instances'
M = None
branch = args.branch
versions = args.versions
M = None
branch = args.branch
versions = args.versions
- integration = args.integration
+ backportto = args.backport_to
# If we don't have a branch, we need an instance
M = self.Wp.resolve(args.name)
# If we don't have a branch, we need an instance
M = self.Wp.resolve(args.name)
- integration = M.isIntegration()
+ if M.isIntegration():
+ backportto = 'integration'
+
+ if M.isStable():
+ backportto = 'stable'
+
+ if M.isReview():
+ backportto = 'review'
def stashPop(stash):
"""Small helper to pop the stash has we have to do it in some different places"""
def stashPop(stash):
"""Small helper to pop the stash has we have to do it in some different places"""
for v in versions:
# Gets the instance to cherry-pick to
for v in versions:
# Gets the instance to cherry-pick to
- name = self.Wp.generateInstanceName(v, integration=integration)
+ name = self.Wp.generateInstanceName(v, purpose=backportto)
if not self.Wp.isMoodle(name):
logging.warning('Could not find instance %s for version %s' % (name, v))
continue
if not self.Wp.isMoodle(name):
logging.warning('Could not find instance %s for version %s' % (name, v))
continue
- ['-t', '--integration'],
- 'action': 'store_true',
- 'help': 'create an instance from integration'
+ 'action': 'store',
+ 'choices': ['integration', 'review', 'stable'],
+ 'default': 'stable',
+ 'help': 'specify what this instance is for',
+ 'metavar': 'purpose'
'version': version,
'suffix': suffix,
'engine': engine,
'version': version,
'suffix': suffix,
'engine': engine,
- 'integration': args.integration,
+ 'purpose': args.purpose,
'identifier': args.identifier,
'install': install,
'run': args.run
'identifier': args.identifier,
'install': install,
'run': args.run
engine = args.engine
version = args.version
engine = args.engine
version = args.version
- name = self.Wp.generateInstanceName(version, integration=args.integration, suffix=args.suffix, identifier=args.identifier)
+ name = self.Wp.generateInstanceName(version, engine=engine, purpose=args.purpose, suffix=args.suffix, identifier=args.identifier)
# Wording version
versionNice = version
# Wording version
versionNice = version
versionNice = self.C.get('wording.master')
# Generating names
versionNice = self.C.get('wording.master')
# Generating names
+ if args.purpose == 'integration':
fullname = self.C.get('wording.integration') + ' ' + versionNice + ' ' + self.C.get('wording.%s' % engine)
fullname = self.C.get('wording.integration') + ' ' + versionNice + ' ' + self.C.get('wording.%s' % engine)
+
+ if args.purpose == 'stable':
fullname = self.C.get('wording.stable') + ' ' + versionNice + ' ' + self.C.get('wording.%s' % engine)
fullname = self.C.get('wording.stable') + ' ' + versionNice + ' ' + self.C.get('wording.%s' % engine)
+ if args.purpose == 'review':
+ fullname = self.C.get('wording.review') + ' ' + versionNice + ' ' + self.C.get('wording.%s' % engine)
+
# Append the suffix
if args.suffix:
fullname += ' ' + args.suffix.replace('-', ' ').replace('_', ' ').title()
# Append the suffix
if args.suffix:
fullname += ' ' + args.suffix.replace('-', ' ').replace('_', ' ').title()
kwargs = {
'name': name,
'version': version,
kwargs = {
'name': name,
'version': version,
- 'integration': args.integration
+ 'purpose': args.purpose,
+ 'engine': engine
}
try:
M = self.Wp.create(**kwargs)
}
try:
M = self.Wp.create(**kwargs)
if type(value) == bool:
value = 'true' if value else 'false'
elif type(value) != int:
if type(value) == bool:
value = 'true' if value else 'false'
elif type(value) != int:
- value = "'" + str(value).replace('%instancename%', self.identifier) + "'"
+ value = str(value).replace('%instancename%', self.identifier)
+ value = re.sub(r'%instancename:(\d*)%',
+ lambda m: self.identifier.split(C.get('wording.prefixSeparator'))[int(m.group(1))],
+ value)
+ value = "'" + value + "'"
try:
if isinstance(cfgValue, basestring):
cfgValue = cfgValue.replace('%instancename%', self.identifier)
try:
if isinstance(cfgValue, basestring):
cfgValue = cfgValue.replace('%instancename%', self.identifier)
+ cfgValue = re.sub(r'%instancename:(\d*)%',
+ lambda m: self.identifier.split(C.get('wording.prefixSeparator'))[int(m.group(1))],
+ cfgValue)
logging.info('Setting up forced $CFG->%s to \'%s\' in config.php', cfgKey, cfgValue)
self.addConfig(cfgKey, cfgValue)
logging.info('Setting up forced $CFG->%s to \'%s\' in config.php', cfgKey, cfgValue)
self.addConfig(cfgKey, cfgValue)
return False
def isStable(self):
return False
def isStable(self):
- """Assume an instance is stable if not integration"""
- return not self.isIntegration()
+ """Returns whether an instance is a stable one or not"""
+ name = self.identifier.split(C.get('wording.prefixSeparator'))[0]
+ return name == C.get('wording.prefixStable')
+
+ def isReview(self):
+ """Returns whether an instance is a review one or not"""
+ name = self.identifier.split(C.get('wording.prefixSeparator'))[0]
+ return name == C.get('wording.prefixReview')
def _load(self):
"""Loads the information"""
def _load(self):
"""Loads the information"""
logging.info('Have a break, this operation is slow...')
process('%s clone --mirror %s %s' % (C.get('git'), C.get('remotes.integration'), cacheIntegration))
logging.info('Have a break, this operation is slow...')
process('%s clone --mirror %s %s' % (C.get('git'), C.get('remotes.integration'), cacheIntegration))
- def create(self, name=None, version='master', integration=False, useCacheAsRemote=False):
+ def create(self, name=None, version='master', purpose='stable', engine=C.get('defaultEngine'), useCacheAsRemote=False):
"""Creates a new instance of Moodle.
The parameter useCacheAsRemote has been deprecated.
"""
"""Creates a new instance of Moodle.
The parameter useCacheAsRemote has been deprecated.
"""
- name = self.generateInstanceName(version, integration=integration)
+ name = self.generateInstanceName(version, purpose=purpose)
if name == self.mdkDir:
raise Exception('A Moodle instance cannot be called \'%s\', this is a reserved word.' % self.mdkDir)
if name == self.mdkDir:
raise Exception('A Moodle instance cannot be called \'%s\', this is a reserved word.' % self.mdkDir)
+ if purpose == 'integration':
+ integration = True
+
installDir = self.getPath(name)
wwwDir = self.getPath(name, 'www')
dataDir = self.getPath(name, 'data')
installDir = self.getPath(name)
wwwDir = self.getPath(name, 'www')
dataDir = self.getPath(name, 'data')
if DB and dbname and DB.dbexists(dbname):
DB.dropdb(dbname)
if DB and dbname and DB.dbexists(dbname):
DB.dropdb(dbname)
- def generateInstanceName(self, version, integration=False, suffix='', identifier=None):
+ def generateInstanceName(self, version, engine=C.get('defaultEngine'), purpose='stable', suffix='', identifier=None):
"""Creates a name (identifier) from arguments"""
if identifier != None:
"""Creates a name (identifier) from arguments"""
if identifier != None:
prefixVersion = version
# Generating name
prefixVersion = version
# Generating name
- if integration:
- name = C.get('wording.prefixIntegration') + prefixVersion
- else:
- name = C.get('wording.prefixStable') + prefixVersion
+ sep = C.get('wording.prefixSeparator');
+ if purpose == 'integration':
+ name = C.get('wording.prefixIntegration') + sep + prefixVersion
+
+ if purpose == 'review':
+ name = C.get('wording.prefixReview') + sep + prefixVersion
+
+ if purpose == 'stable':
+ name = C.get('wording.prefixStable') + sep + prefixVersion
+
+ if C.get('wording.appendEngine'):
+ name += sep + engine
# Append the suffix
if suffix != None and suffix != '':
# Append the suffix
if suffix != None and suffix != '':