--- a/buildframework/helium/sf/python/pythoncore/lib/ccm/__init__.py Wed Sep 29 17:48:06 2010 +0100
+++ b/buildframework/helium/sf/python/pythoncore/lib/ccm/__init__.py Sun Oct 10 15:22:15 2010 +0300
@@ -202,10 +202,11 @@
if mresult != None:
project = self._session.create(mresult.group(1))
self._output[project] = []
- mresult = re.match(r"^(.*)\s+(\w+#\d+)\s+(.+)$", line)
+ mresult = re.match(r"^(.*?)\s+(\w+#\d+(?:,\s+\w+#\d+)*)\s+(.+)$", line)
if mresult != None and project != None:
- self._output[project].append({'object': self._session.create(mresult.group(1)),
- 'task': self._session.create("Task %s" % mresult.group(2)),
+ for task in mresult.group(2).split(','):
+ self._output[project].append({'object': self._session.create(mresult.group(1)),
+ 'task': self._session.create("Task %s" % task),
'comment': mresult.group(3)})
mresult = re.match(r"^(\w+#\d+)\s+(.+)$", line)
if mresult != None and project != None:
@@ -340,7 +341,6 @@
match_warning = re.compile(r"^Warning:(.*)")
match_failed = re.compile(r"(Update failed)")
- # TODO: cleanup the parsing to do that in a more efficient way.
for line in output.splitlines():
_logger.info(line)
res = match_object_update.match(line)
@@ -723,9 +723,6 @@
def __repr__(self):
return self.__str__()
-
- def __del__(self):
- self.close()
def purposes(self, role=None):
""" Returns available purposes. """
@@ -922,7 +919,7 @@
try:
for session in self._free_sessions:
- session.role = session._set_role(role)
+ session.role = role
finally:
self._lock_pool = False
self._pool_lock.notifyAll()
@@ -1349,11 +1346,13 @@
def _getrelease(self):
""" Get the release of the current object. Returns a Releasedef object. """
- self._release = Releasedef(self._session, self['release'])
+ if self._release == None and (self['release'] != None and self['release'] != ''):
+ self._release = Releasedef(self._session, self['release'])
return self._release
def _setrelease(self, release):
""" Set the release of the current object. """
+ self._release = release
self['release'] = release['displayname']
def refresh(self):
@@ -1381,7 +1380,7 @@
if result.status != None and result.status != 0:
raise CCMException("Error setting basline of project '%s'\n%s" % (self.objectname, result.output))
- def set_update_method(self, name, recurse = False):
+ def set_update_method(self, name, recurse=False):
""" Set the update method for the project (and subproject if recurse is True). """
assert name != None, "name must not be None."
assert len(name) > 0, "name must not be an empty string."
@@ -1392,7 +1391,7 @@
if result.status != None and result.status != 0:
raise CCMException("Error setting reconfigure properties to %s for project '%s'\nStatus: %s\n%s" % (name, self.objectname, result.status, result.output))
- def apply_update_properties(self, baseline = True, tasks_and_folders = True, recurse=True):
+ def apply_update_properties(self, baseline=True, tasks_and_folders=True, recurse=True):
""" Apply update properties to subprojects. """
args = ""
if not baseline:
@@ -1423,7 +1422,7 @@
return result.output
raise CCMException("Error creation snapshot of %s,\n%s" % (self.objectname, result.output), result)
- def checkout(self, release, version=None, purpose=None, subprojects=True):
+ def checkout(self, release, version=None, purpose=None, subprojects=True, path=None):
""" Create a checkout of this project.
This will only checkout the project in Synergy. It does not create a work area.
@@ -1448,6 +1447,9 @@
self._session.role = get_role_for_purpose(self._session, purpose)
args += " -purpose \"%s\"" % purpose
+ if path:
+ args += " -path \"%s\"" % path
+
if subprojects:
args += " -subprojects"
result = self._session.execute("checkout -project \"%s\" -release \"%s\" -no_wa %s" \
@@ -1456,47 +1458,7 @@
self._session.role = role
if result.project == None:
raise CCMException("Error checking out project %s,\n%s" % (self.objectname, result.output), result)
- return result
-
- def create_release_tag(self, release, new_tag):
- """ creates new release tag """
- role = self._session.role
-
- if role is None:
- self._session.role = "developer"
- role = self._session.role
-
- args = "release -create %s -from %s -bl %s -active -allow_parallel_check_out" % (new_tag, release, release)
- self._session.role = "build_mgr"
-
- result = self._session.execute(" %s" \
- % (args), Result(self._session))
- self._session.role = role
-
- return result.output
-
- def delete_release_tag(self, release, new_tag):
- """ deletes new release tag """
-
- role = self._session.role
- if role is None:
- self._session.role = "developer"
- role = self._session.role
-
-
- self._session.role = "build_mgr"
-
- result = self._session.execute("pg -l -r %s -u" \
- % (new_tag), Result(self._session))
- result = self._session.execute("pg -d \"%s\" -m" \
- % (result.output), Result(self._session))
- result = self._session.execute("release -d %s -force" \
- % (new_tag), Result(self._session))
-
- self._session.role = role
-
- return result.output
-
+ return result
def work_area(self, maintain, recursive=None, relative=None, path=None, pst=None, wat=False):
""" Configure the work area. This allow to enable it or disable it, set the path, recursion... """
@@ -1629,6 +1591,44 @@
return self.name
component = property(_getcomponent)
+
+ def create_tag(self, new_tag):
+ """ creates new release tag """
+ role = self._session.role
+
+ if role is None:
+ self._session.role = "developer"
+ role = self._session.role
+
+ args = "release -create %s -from %s -bl %s -active -allow_parallel_check_out" % (new_tag, self.objectname, self.objectname)
+ self._session.role = "build_mgr"
+
+ result = self._session.execute(" %s" \
+ % (args), Result(self._session))
+ self._session.role = role
+
+ return result.output
+
+ def delete_tag(self, new_tag):
+ """ deletes new release tag """
+
+ role = self._session.role
+ if role is None:
+ self._session.role = "developer"
+ role = self._session.role
+
+ self._session.role = "build_mgr"
+
+ result = self._session.execute("pg -l -r %s -u" \
+ % (new_tag), Result(self._session))
+ result = self._session.execute("pg -d \"%s\" -m" \
+ % (result.output), Result(self._session))
+ result = self._session.execute("release -d \"%s\" -force" \
+ % (new_tag), Result(self._session))
+
+ self._session.role = role
+
+ return result.output
class Folder(CCMObject):
@@ -1751,7 +1751,6 @@
objects = property(_getobjects)
def __unicode__(self):
- # TODO: use optimised query that makes only 1 ccm query with suitable format
if self.__unicode_str_text == None:
self.__unicode_str_text = u'%s: %s' % (self['displayname'], self['task_synopsis'])
return self.__unicode_str_text
@@ -1771,6 +1770,7 @@
release = property(get_release_tag, set_release_tag)
+
class UpdateTemplate:
""" Allow to access Update Template property using Release and Purpose. """
def __init__(self, releasedef, purpose):