From 26525f174033d9ae23a99534022b8cbe00359172 Mon Sep 17 00:00:00 2001 From: Jan Vcelak <jan.vcelak@nic.cz> Date: Mon, 22 Jul 2013 15:58:55 +0200 Subject: [PATCH] zone diff: implement knot_zone_tree_create_diff() - slightly modifies interface for zone contents diffing (shorter name, add changesets flags parameter) - new function works the same with other arguments --- src/knot/server/zones.c | 7 ++++--- src/libknot/zone/zone-diff.c | 29 ++++++++++++++++++++++++----- src/libknot/zone/zone-diff.h | 21 +++++++++++++++++---- 3 files changed, 45 insertions(+), 12 deletions(-) diff --git a/src/knot/server/zones.c b/src/knot/server/zones.c index e9ce0325f9..3e440f7e27 100644 --- a/src/knot/server/zones.c +++ b/src/knot/server/zones.c @@ -3024,9 +3024,10 @@ int zones_create_and_save_changesets(const knot_zone_t *old_zone, memset(&xfr, 0, sizeof(xfr)); xfr.zone = (knot_zone_t *)old_zone; knot_changesets_t *changesets; - int ret = knot_zone_diff_create_changesets(old_zone->contents, - new_zone->contents, - &changesets); + int ret = knot_zone_contents_create_diff(old_zone->contents, + new_zone->contents, + &changesets, + KNOT_CHANGESET_TYPE_IXFR); if (ret != KNOT_EOK) { if (ret == KNOT_ERANGE) { dbg_zones_detail("zones: create_changesets: " diff --git a/src/libknot/zone/zone-diff.c b/src/libknot/zone/zone-diff.c index fb097973ae..6a2b8c8f79 100644 --- a/src/libknot/zone/zone-diff.c +++ b/src/libknot/zone/zone-diff.c @@ -916,7 +916,7 @@ static int knot_zone_diff_load_content(const knot_zone_contents_t *zone1, } -int knot_zone_contents_diff(const knot_zone_contents_t *zone1, +static int knot_zone_contents_diff(const knot_zone_contents_t *zone1, const knot_zone_contents_t *zone2, knot_changeset_t *changeset) { @@ -963,9 +963,10 @@ static void knot_zone_diff_dump_changeset(knot_changeset_t *ch) #endif #endif -int knot_zone_diff_create_changesets(const knot_zone_contents_t *z1, - const knot_zone_contents_t *z2, - knot_changesets_t **changesets) +int knot_zone_contents_create_diff(const knot_zone_contents_t *z1, + const knot_zone_contents_t *z2, + knot_changesets_t **changesets, + uint32_t changesets_flags) { if (z1 == NULL || z2 == NULL) { dbg_zonediff("zone_diff: create_changesets: NULL arguments.\n"); @@ -975,7 +976,7 @@ int knot_zone_diff_create_changesets(const knot_zone_contents_t *z1, /* Setting type to IXFR - that's the default, DDNS triggers special * processing when applied. See #2110 and #2111. */ - int ret = knot_changeset_allocate(changesets, KNOT_CHANGESET_TYPE_IXFR); + int ret = knot_changeset_allocate(changesets, changesets_flags); if (ret != KNOT_EOK) { dbg_zonediff("zone_diff: create_changesets: " "Could not allocate changesets." @@ -1003,3 +1004,21 @@ dbg_zonediff_exec_detail( return KNOT_EOK; } + +int knot_zone_tree_create_diff(knot_zone_tree_t *t1, + knot_zone_tree_t *t2, + knot_changesets_t **changesets, + uint32_t changesets_flags) +{ + if (!t1 || !t1 || !changesets) + return KNOT_EINVAL; + + int result = knot_changeset_allocate(changesets, changesets_flags); + if (result != KNOT_EOK) + return result; + + knot_changeset_t *changeset = (*changesets)->sets; + memset(changeset, 0, sizeof(knot_changeset_t)); + + return knot_zone_diff_load_trees(t1, t2, changeset); +} diff --git a/src/libknot/zone/zone-diff.h b/src/libknot/zone/zone-diff.h index 6e0eb1d5e4..c188255c7d 100644 --- a/src/libknot/zone/zone-diff.h +++ b/src/libknot/zone/zone-diff.h @@ -17,12 +17,25 @@ #ifndef _KNOT_ZONE_DIFF_H_ #define _KNOT_ZONE_DIFF_H_ +#include <stdint.h> + #include "libknot/zone/zone-contents.h" #include "libknot/updates/changesets.h" -/*! \brief zone1 -> zone2 */ -int knot_zone_diff_create_changesets(const knot_zone_contents_t *z1, - const knot_zone_contents_t *z2, - knot_changesets_t **changesets); +/*! + * \brief Create diff between two zone trees. + * */ +int knot_zone_contents_create_diff(const knot_zone_contents_t *z1, + const knot_zone_contents_t *z2, + knot_changesets_t **changesets, + uint32_t changesets_flags); + +/*! + * \brief Create diff between two zone trees. + */ +int knot_zone_tree_create_diff(knot_zone_tree_t *t1, + knot_zone_tree_t *t2, + knot_changesets_t **changesets, + uint32_t changesets_flags); #endif // _KNOT_ZONE_DIFF_H_ -- GitLab