Summary: | MC unconditionally pushes its accounts' nicknames to the CM as aliases | ||
---|---|---|---|
Product: | Telepathy | Reporter: | Vivek Dasmohapatra <vivek> |
Component: | mission-control | Assignee: | Vivek Dasmohapatra <vivek> |
Status: | RESOLVED FIXED | QA Contact: | Telepathy bugs list <telepathy-bugs> |
Severity: | enhancement | ||
Priority: | medium | CC: | marco.barisione |
Version: | git master | Keywords: | patch |
Hardware: | Other | ||
OS: | All | ||
URL: | http://cgit.collabora.com/git/user/vivek/telepathy-mission-control/log/?h=new-aliasing-behaviour | ||
Whiteboard: | review- | ||
i915 platform: | i915 features: |
Description
Vivek Dasmohapatra
2011-07-19 10:14:27 UTC
I think the behaviour this branch implements is definitely more correct. First up: the problem with adding/changing the tests before the code changes to make them pass is that it breaks rebase. +++ b/tests/twisted/account-manager/nickname-empty-cm-alias.py @@ -0,0 +1,74 @@ +# Copyright (C) 2009 Nokia Corporation +# Copyright (C) 2009 Collabora Ltd. Wrong year. +import dbus +import dbus +import dbus.service I bet only the first of those three are needed. +from servicetest import EventPattern, tp_name_prefix, tp_path_prefix, \ The tp_*_prefix imports there are not used. +def test(q, bus, mc): + # second round: we get a canonical name from the server and our + # local name is _not_ the canonical name, so we should propagate that: +def test(q, bus, mc): + # second round: we get a canonical name from the server and our + # local name is _not_ the canonical name, so we should propagate that: “second round” of what? What does “canonical name” mean? Given that MC has a specific name for the user's own identifier—namely “normalized name”, as seen as a property on Account—I think consistently referring to it as that would be better. + account_iface = dbus.Interface(account, cs.ACCOUNT) + account_props = dbus.Interface(account, cs.PROPERTIES_IFACE) You should be able to just use 'account' and 'account.Properties' in place of these two new variables. + assert account_props.Get(cs.ACCOUNT, 'Nickname') == 'whatever' Please use assertEquals() and friends; they give more useful messages when they fail. Is tests/twisted/account-manager/nickname-empty-cm-alias.py essentially a verbatim copy of the modified version of tests/twisted/account-manager/nickname.py? Could the latter's test() be generalized to avoid the copy-pasta? + q.dbus_return(get_aliases.message, { conn.self_handle: 'myself' }, Use conn.self_ident rather than hard-coding 'myself'. +static void _take_alias (McdConnectionPrivate *priv, gchar *alias) So this … sometimes takes ownership of 'alias', and sometimes does not and hence 'alias' leaks? And the coding style of the quoted line is wrong: there should be a newline after 'void', at least. if (error != NULL) { DEBUG ("GetAliases([SelfHandle]) failed: %s", error->message); - return; + goto set_nickname; } self_handle = tp_connection_get_self_handle (proxy); - alias = g_hash_table_lookup (aliases,GUINT_TO_POINTER (self_handle)); + server_alias = g_hash_table_lookup (aliases,GUINT_TO_POINTER (self_handle)); + DEBUG ("got alias %s from cache", server_alias); - if (alias != NULL && - (priv->alias == NULL || tp_strdiff (priv->alias, alias))) +set_nickname: Blech! Why use 'goto' when you could put the three skipped lines of code into an else {} block? + DEBUG ("got alias %s from cache", server_alias); What cache? It's not been fetched from a cache, it's been fetched from the CM. + /* We didn't get an alias from the CM, use the account's value */ + if (tp_str_empty (server_alias)) + /* we did get a value, but it's the canonicalised value (eg XMPP JID) + and the account value is not the same (ie definitely from the user) */ + else if (!tp_strdiff (server_alias, canon_alias) && + tp_strdiff (server_alias, local_alias)) As far as I can tell, the bodies of these two conditions are identical. They should not be duplicated. + DEBUG ("ALIASING INTERFACE SUPPORT"); Ahem. - if (priv->has_alias_if) _mcd_connection_setup_alias (connection); The indentation should be corrected. + else if (names != NULL && names[0] != NULL) + { + DEBUG ("names[]: %p [%s ...]", names, names ? names[0] : NULL); How is the pointer address of the array relevant? I don't think this debug message is really necessary, given that _mcd_account_set_normalized_name already has one. (In reply to comment #1) > First up: the problem with adding/changing the tests before the code changes to > make them pass is that it breaks rebase. By which I mean "bisect", not "rebase". After some refactoring on Bug #55668, this became almost a one-line fix (although I took a few more lines to add some debug messages), so I fixed it there. (In reply to comment #1) > Is tests/twisted/account-manager/nickname-empty-cm-alias.py essentially a > verbatim copy of the modified version of > tests/twisted/account-manager/nickname.py? Could the latter's test() be > generalized to avoid the copy-pasta? I did this on Bug #55668. > Use conn.self_ident rather than hard-coding 'myself'. ... and this. Fixed in git for 5.15.0, as part of Bug #55668. |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.