This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository python-x2go. commit 7cb2ca7325a2d46142d6a0e380ad89f164792307 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Wed Sep 10 12:04:15 2014 +0200 Handle duplicate profile names gracefully (i.e. append a " (1)", " (2)", ... to the session profile name). (Fixes: #500). --- debian/changelog | 2 ++ x2go/backends/profiles/base.py | 21 +++++++++++++++++++-- x2go/backends/profiles/file.py | 8 +++++++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index e437449..c8be003 100644 --- a/debian/changelog +++ b/debian/changelog @@ -90,6 +90,8 @@ python-x2go (0.5.0.0-0x2go1) UNRELEASED; urgency=low - Clean up terminal sessions properly when the clean_sessions() method of the control session has got called. - Don't use compression on TeKi sshfs mounts. + - Handle duplicate profile names gracefully (i.e. append a " (1)", + " (2)", ... to the session profile name). (Fixes: #500). * debian/control: + Add dependencies: python-requests, python-simplejson. * python-x2go.spec: diff --git a/x2go/backends/profiles/base.py b/x2go/backends/profiles/base.py index c19571f..2855d09 100644 --- a/x2go/backends/profiles/base.py +++ b/x2go/backends/profiles/base.py @@ -124,6 +124,24 @@ class X2GoSessionProfiles(): """ self.session_profiles = self. _populate_session_profiles() + # scan for duplicate profile names and handle them... + scan_profile_names = {} + for profile_id in self.session_profiles.keys(): + profile_name = self.to_profile_name(profile_id) + if profile_name not in scan_profile_names.keys(): + scan_profile_names[profile_name] = [profile_id] + else: + scan_profile_names[profile_name].append(profile_id) + _duplicates = {} + for profile_name in scan_profile_names.keys(): + if len(scan_profile_names[profile_name]) > 1: + _duplicates[profile_name] = scan_profile_names[profile_name] + for profile_name in _duplicates.keys(): + i = 1 + for profile_id in _duplicates[profile_name]: + self.update_value(None, 'name', '{name} ({i})'.format(name=profile_name, i=i), profile_id=profile_id) + i += 1 + def _populate_session_profiles(self): """\ Inherit from this class and provide the backend specific way of loading / @@ -558,10 +576,9 @@ class X2GoSessionProfiles(): raise X2GoProfileException('profile name for profile id %s must not be empty' % profile_id) else: if profile_name != current_profile_name: - try: del self._cached_profile_ids[profile_id] - except KeyError: pass if profile_name in self.profile_names: raise X2GoProfileException('a profile of name ,,%s\'\' already exists' % profile_name) + self._cached_profile_ids[profile_id] = profile_name if option == 'export' and type(value) == types.DictType: _strvalue = '"' diff --git a/x2go/backends/profiles/file.py b/x2go/backends/profiles/file.py index 39e7da1..913267d 100644 --- a/x2go/backends/profiles/file.py +++ b/x2go/backends/profiles/file.py @@ -85,13 +85,16 @@ class X2GoSessionProfiles(base.X2GoSessionProfiles, inifiles.X2GoIniFile): """ session_profiles = [ p for p in self.iniConfig.sections() if p not in self._non_profile_sections and p != 'none' ] + _session_profiles_dict = {} for session_profile in session_profiles: for key, default_value in self.defaultSessionProfile.iteritems(): if not self.iniConfig.has_option(session_profile, key): self._storeValue(session_profile, key, default_value) # update cached meta type session profile information self.get_profile_metatype(session_profile) - return session_profiles + _session_profiles_dict[session_profile] = self.get_profile_config(session_profile) + + return _session_profiles_dict def _is_mutable(self, profile_id): return True @@ -105,11 +108,14 @@ class X2GoSessionProfiles(base.X2GoSessionProfiles, inifiles.X2GoIniFile): def _delete_profile(self, profile_id): self.iniConfig.remove_section(profile_id) + try: del self.session_profiles[profile_id] + except KeyError: pass def _update_value(self, profile_id, option, value): if option == 'host': value = ','.join(value) self._X2GoIniFile__update_value(profile_id, option, value) + self.session_profiles[profile_id][option] = value def _get_profile_parameter(self, profile_id, option, key_type): return self.get(profile_id, option, key_type) -- Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/python-x2go.git