diff --git a/SynergySession.py b/SynergySession.py index 27336f9..afa61be 100644 --- a/SynergySession.py +++ b/SynergySession.py @@ -77,8 +77,9 @@ def __init__(self, database, engine=None, command_name='ccm', ccm_ui_path='/dev/ else: self.environment['CCM_ADDR'] = ccm_addr - # Get the delimiter and store it + # Get the delimiters and store them self.delimiter = self.delim() + self.dcm_delimiter = self.dcm_delim() def setSessionID(self, sessionID): self.sessionID = sessionID @@ -140,6 +141,10 @@ def delim(self): self._reset_status() return self._run(['delim']).strip() + def dcm_delim(self): + """Returns the DCM delimiter defined in the Synergy DB""" + return self._run(['dcm','-show','-delimiter']).strip() + def stop(self): """Stops the current Synergy session""" if 'CCM_ADDR' in self.environment: diff --git a/ccm_cache.py b/ccm_cache.py index 8e9b7f1..21c6898 100644 --- a/ccm_cache.py +++ b/ccm_cache.py @@ -271,7 +271,8 @@ def get_object_from_ccm(four_part_name, ccm, ccm_cache_path): """Try to get the object's meta data from Synergy""" # convert the four-part-name to a synergy object: delim = ccm.delim() - synergy_object = SynergyObject(four_part_name, delim) + dcm_delim = ccm.dcm_delim() + synergy_object = SynergyObject(four_part_name, delim, dcm_delim) try: res = ccm.query("name='{0}' and version='{1}' and type='{2}' and instance='{3}'".format(synergy_object.get_name(), synergy_object.get_version(), synergy_object.get_type(), synergy_object.get_instance())).format("%objectname").format("%owner").format("%status").format("%create_time").format("%task").run() except SynergyException: @@ -284,7 +285,7 @@ def get_object_from_ccm(four_part_name, ccm, ccm_cache_path): for t in res[0]['task'].split(','): if t != '': if ':task:' not in t: - tasks.append(task_to_four_part(t, delim)) + tasks.append(task_to_four_part(t, delim, dcm_delim)) else: tasks.append(t) synergy_object.tasks = tasks @@ -448,9 +449,9 @@ def get_releases(object, ccm): return releases -def task_to_four_part(task, delim): +def task_to_four_part(task, delim, dcm_delim): # Task four-part-name: task-1:task:instance - split = task.split('#') + split = task.split(dcm_delim) four_part = ['task', split[1], delim, '1:task:', split[0]] return ''.join(four_part) diff --git a/configuration.conf.sample b/configuration.conf.sample index bb228eb..218bb0d 100644 --- a/configuration.conf.sample +++ b/configuration.conf.sample @@ -23,27 +23,30 @@ ; ; +[global] +heads_separator=, ; Set this to allow for non-default ccm delimiter + [synergy] -database= ; database -base_project= ; starting point for initial commit in git -heads= ; comma separated list of heads to include -master= ; end project - latest release - master branch in git -max_sessions= ; max number of sessions to hammer at synergy -ccm_cache_path= ; where to store all data and meta data from synergy (lots of space is needed) -data_file= ; pickle file to store meta data for the converter (is loaded upon start, so the conversion can resume) -log_file= ; -max_recursion_depth= ; recursion depth to give up when reached, when traversing file history between two releases -skip_binary_files= ; Don't put binary files in git history +database= ; database +base_project= ; starting point for initial commit in git +heads= ; separated list of heads to include +master= ; end project - latest release - master branch in git +max_sessions= ; max number of sessions to hammer at synergy +ccm_cache_path= ; where to store all data and meta data from synergy (lots of space is needed) +data_file= ; pickle file to store meta data for the converter (is loaded upon start, so the conversion can resume) +log_file= ; +max_recursion_depth= ; recursion depth to give up when reached, when traversing file history between two releases +skip_binary_files= ; Don't put binary files in git history [history conversion] -print_graphs=False ; print png images of the different releases when converting history -email_domain= ; email domain to use when writing commit info (if not found through ldap) +print_graphs=False ; print png images of the different releases when converting history +email_domain= ; email domain to use when writing commit info (if not found through ldap) [ldap] username= password= server= -[finger] ; Find users with finger program, can run on a remote server through ssh (keys needed) -server= ; Remote server to use -user= ; User to login in as \ No newline at end of file +[finger] ; Find users with finger program, can run on a remote server through ssh (keys needed) +server= ; Remote server to use +user= ; User to login in as diff --git a/load_configuration.py b/load_configuration.py index 692e740..2906b9a 100644 --- a/load_configuration.py +++ b/load_configuration.py @@ -36,6 +36,13 @@ def load_config_file(): config_parser = ConfigParser() config_parser.read('configuration.conf') config = {} + global_config = {} + + """ Read the global config first """ + global_config['heads_separator'] = ',' + for k,v in config_parser.items('global'): + global_config[k] = v + for k, v in config_parser.items('synergy'): if k == 'ccm_cache_path' and not v.endswith('/'): v += '/' @@ -44,18 +51,21 @@ def load_config_file(): if k == 'max_recursion_depth': v = int(v) if k == 'heads': - v = v.split(',') + v = v.split(global_config['heads_separator']) v = [i.strip() for i in v] if k == 'skip_binary_files': v = config_parser.getboolean('synergy', 'skip_binary_files') config[k]=v + for k, v in config_parser.items('history conversion'): if k == 'print_graphs': v = config_parser.getboolean('history conversion', 'print_graphs') config[k]=v + if config_parser.has_section('ldap'): for k,v in config_parser.items('ldap'): config[k]=v + if config_parser.has_section('finger'): config['finger'] = {} for k,v in config_parser.items('finger'):