void solve_conflict(OSyncMappingEngine *mapping) { OSyncChange *change = NULL; OSyncError *error = NULL; g_usleep(5*G_USEC_PER_SEC); change = osync_mapping_engine_nth_change(mapping, 0); osync_assert(osync_engine_mapping_solve(gengine, mapping, change, &error)); osync_assert(error == NULL); }
void conflict_handler_choose_modified(OSyncEngine *engine, OSyncMappingEngine *mapping, void *user_data) { OSyncError *error = NULL; unsigned int i; osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, engine, mapping, user_data); num_mapping_conflicts++; if (user_data) fail_unless(osync_mapping_engine_num_changes(mapping) == GPOINTER_TO_UINT(user_data), NULL); fail_unless(num_engine_end_conflicts == 0, NULL); for (i = 0; i < osync_mapping_engine_num_changes(mapping); i++) { OSyncChange *change = osync_mapping_engine_nth_change(mapping, i); if (osync_change_get_changetype(change) == OSYNC_CHANGE_TYPE_MODIFIED) { osync_assert(osync_mapping_engine_solve(mapping, change, &error)); osync_assert(error == NULL); osync_trace(TRACE_EXIT, "%s", __func__); return; } } fail(""); }
static OSyncMappingEntryEngine *_osync_mapping_engine_get_latest_entry(OSyncMappingEngine *engine, OSyncError **error) { OSyncMappingEntryEngine *latest_entry = NULL; OSyncChange *latest_change = NULL; time_t latest = 0; int i; osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, engine, error); osync_trace(TRACE_INTERNAL, "mapping number: %i", osync_mapping_engine_num_changes(engine)); for (i=0; i < osync_mapping_engine_num_changes(engine); i++) { OSyncChange *change = osync_mapping_engine_nth_change(engine, i); OSyncData *data = NULL; time_t cur = 0; if (osync_change_get_changetype(change) == OSYNC_CHANGE_TYPE_UNKNOWN) continue; data = osync_change_get_data(change); if (!osync_data_has_data(data)) continue; cur = osync_data_get_revision(data, error); if (cur < 0) goto error; /* If there are several changes/entries having the same _and_ the latest revision -> don't declare a latest_change. Since it's not guranteed that those are equal, even with the _same_ revision. */ if (cur == latest) latest_change = NULL; if (cur <= latest) continue; latest = cur; latest_change = change; } if (!latest_change) { osync_trace(TRACE_EXIT, "%s: Can't find the latest change.", __func__); return NULL; } latest_entry = _osync_mapping_engine_find_entry(engine, latest_change); if (!latest_entry) { osync_error_set(error, OSYNC_ERROR_GENERIC, "Can't find the latest entry of the latest change."); goto error; } osync_trace(TRACE_EXIT, "%s: %p", __func__, latest_entry); return latest_entry; error: osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); return NULL; }