@@ -112,6 +112,8 @@ def update_server(self):
112
112
"""
113
113
"""
114
114
115
+ changed = False
116
+
115
117
# Helper methods
116
118
def updated_ids (items ):
117
119
for value in items .itervalues ():
@@ -123,38 +125,64 @@ def removed_ids(items):
123
125
if "updated" not in value :
124
126
yield value ["id" ]
125
127
128
+ def has_updated_ids (items ):
129
+ for _ in updated_ids (items ):
130
+ return True
131
+ return False
132
+
133
+ def has_removed_ids (items ):
134
+ for _ in updated_ids (items ):
135
+ return True
136
+ return False
137
+
138
+ def should_update (items ):
139
+ return has_updated_ids (items ) or has_removed_ids (items )
140
+
126
141
# Update the server
127
142
server = self .provider .server
128
143
129
- # Databases
130
- server .databases .update_ids ([self .database_id ])
131
-
132
144
# Items
133
- database = server .databases [self .database_id ]
134
- database .items .remove_ids (removed_ids (self .items_by_remote_id ))
135
- database .items .update_ids (updated_ids (self .items_by_remote_id ))
145
+ if should_update (self .items_by_remote_id ):
146
+ database = server .databases [self .database_id ]
147
+ database .items .remove_ids (removed_ids (self .items_by_remote_id ))
148
+ database .items .update_ids (updated_ids (self .items_by_remote_id ))
149
+
150
+ changed = True
136
151
137
152
# Base container and container items
138
- database .containers .update_ids ([self .base_container_id ])
139
- base_container = database .containers [self .base_container_id ]
140
- base_container .container_items .remove_ids (
141
- removed_ids (self .base_container_items_by_item_id ))
142
- base_container .container_items .update_ids (
143
- updated_ids (self .base_container_items_by_item_id ))
153
+ if should_update (self .base_container_items_by_item_id ):
154
+ database .containers .update_ids ([self .base_container_id ])
155
+ base_container = database .containers [self .base_container_id ]
156
+ base_container .container_items .remove_ids (
157
+ removed_ids (self .base_container_items_by_item_id ))
158
+ base_container .container_items .update_ids (
159
+ updated_ids (self .base_container_items_by_item_id ))
160
+
161
+ changed = True
144
162
145
163
# Other containers and container items
146
- database .containers .remove_ids (
147
- removed_ids (self .containers_by_remote_id ))
148
- database .containers .update_ids (
149
- updated_ids (self .containers_by_remote_id ))
150
-
151
- for container in self .containers_by_remote_id .itervalues ():
152
- if "updated" not in container :
153
- updated_ids = container ["container_items" ]
154
- container = database .containers [container ["id" ]]
155
-
156
- container .container_items .remove_ids (container .container_items )
157
- container .container_items .update_ids (updated_ids )
164
+ if should_update (self .containers_by_remote_id ):
165
+ database .containers .remove_ids (
166
+ removed_ids (self .containers_by_remote_id ))
167
+ database .containers .update_ids (
168
+ updated_ids (self .containers_by_remote_id ))
169
+
170
+ for container in self .containers_by_remote_id .itervalues ():
171
+ if "updated" not in container :
172
+ updated_ids = container ["container_items" ]
173
+ container = database .containers [container ["id" ]]
174
+
175
+ container .container_items .remove_ids (
176
+ container .container_items )
177
+ container .container_items .update_ids (updated_ids )
178
+
179
+ changed = True
180
+
181
+ # Only update database if any of the above parts have changed.
182
+ if changed :
183
+ server .databases .update_ids ([self .database_id ])
184
+
185
+ return changed
158
186
159
187
def sync_versions (self ):
160
188
"""
0 commit comments