# HG changeset patch # User Aurelien Campeas # Date 1441200286 -7200 # Node ID 743ed2b13a6f83122ba2713e0b881d5c606cd01a # Parent fa4d59b88b29f897a29a1c839fb7f1547cb2fe72 [syncschema] only add to the `synchronized` set if all possible updates have been done Otherwise a simple sync_schema(syncprops=False) turns the subsequent sync_schema() calls into a no-op. Closes #6510918. diff -r fa4d59b88b29 -r 743ed2b13a6f server/migractions.py --- a/server/migractions.py Fri Jun 19 16:05:27 2015 +0200 +++ b/server/migractions.py Wed Sep 02 15:24:46 2015 +0200 @@ -459,7 +459,8 @@ rtype = str(rtype) if rtype in self._synchronized: return - self._synchronized.add(rtype) + if syncrdefs and syncperms and syncprops: + self._synchronized.add(rtype) rschema = self.fs_schema.rschema(rtype) reporschema = self.repo.schema.rschema(rtype) if syncprops: @@ -490,7 +491,8 @@ etype = str(etype) if etype in self._synchronized: return - self._synchronized.add(etype) + if syncrdefs and syncperms and syncprops: + self._synchronized.add(etype) repoeschema = self.repo.schema.eschema(etype) try: eschema = self.fs_schema.eschema(etype) @@ -582,9 +584,10 @@ reporschema = self.repo.schema.rschema(rschema) if (subjtype, rschema, objtype) in self._synchronized: return - self._synchronized.add((subjtype, rschema, objtype)) - if rschema.symmetric: - self._synchronized.add((objtype, rschema, subjtype)) + if syncperms and syncprops: + self._synchronized.add((subjtype, rschema, objtype)) + if rschema.symmetric: + self._synchronized.add((objtype, rschema, subjtype)) rdef = rschema.rdef(subjtype, objtype) if rdef.infered: return # don't try to synchronize infered relation defs diff -r fa4d59b88b29 -r 743ed2b13a6f server/test/data/migratedapp/schema.py --- a/server/test/data/migratedapp/schema.py Fri Jun 19 16:05:27 2015 +0200 +++ b/server/test/data/migratedapp/schema.py Wed Sep 02 15:24:46 2015 +0200 @@ -108,6 +108,12 @@ class Personne(EntityType): + __permissions__ = { + 'read': ('managers', 'users'), # 'guests' was removed + 'add': ('managers', 'users'), + 'update': ('managers', 'owners'), + 'delete': ('managers', 'owners') + } __unique_together__ = [('nom', 'prenom', 'datenaiss')] nom = String(fulltextindexed=True, required=True, maxsize=64) prenom = String(fulltextindexed=True, maxsize=64) diff -r fa4d59b88b29 -r 743ed2b13a6f server/test/data/schema.py --- a/server/test/data/schema.py Fri Jun 19 16:05:27 2015 +0200 +++ b/server/test/data/schema.py Wed Sep 02 15:24:46 2015 +0200 @@ -128,6 +128,12 @@ class Personne(EntityType): + __permissions__ = { + 'read': ('managers', 'users', 'guests'), # 'guests' will be removed + 'add': ('managers', 'users'), + 'update': ('managers', 'owners'), + 'delete': ('managers', 'owners') + } __unique_together__ = [('nom', 'prenom', 'inline2')] nom = String(fulltextindexed=True, required=True, maxsize=64) prenom = String(fulltextindexed=True, maxsize=64) diff -r fa4d59b88b29 -r 743ed2b13a6f server/test/unittest_migractions.py --- a/server/test/unittest_migractions.py Fri Jun 19 16:05:27 2015 +0200 +++ b/server/test/unittest_migractions.py Wed Sep 02 15:24:46 2015 +0200 @@ -410,6 +410,9 @@ delete_concerne_rqlexpr = self._rrqlexpr_rset(cnx, 'delete', 'concerne') add_concerne_rqlexpr = self._rrqlexpr_rset(cnx, 'add', 'concerne') + # make sure properties (e.g. etype descriptions) are synced by the + # second call to sync_schema + mh.cmd_sync_schema_props_perms(syncprops=False, commit=False) mh.cmd_sync_schema_props_perms(commit=False) self.assertEqual(cnx.execute('Any D WHERE X name "Personne", X description D')[0][0],