|
|
60de42 |
From 302b5ff8e1f1cc086b78658206670743ec04881a Mon Sep 17 00:00:00 2001
|
|
|
60de42 |
From: Ken Gaillot <kgaillot@redhat.com>
|
|
|
60de42 |
Date: Thu, 12 Jan 2017 09:11:08 -0600
|
|
|
60de42 |
Subject: [PATCH 1/2] Low: libcrmcommon: add convenience function for copying
|
|
|
60de42 |
XML element
|
|
|
60de42 |
|
|
|
60de42 |
---
|
|
|
60de42 |
include/crm/common/xml.h | 18 ++++++++++++++++++
|
|
|
60de42 |
1 file changed, 18 insertions(+)
|
|
|
60de42 |
|
|
|
60de42 |
diff --git a/include/crm/common/xml.h b/include/crm/common/xml.h
|
|
|
60de42 |
index 150055b..a948915 100644
|
|
|
60de42 |
--- a/include/crm/common/xml.h
|
|
|
60de42 |
+++ b/include/crm/common/xml.h
|
|
|
60de42 |
@@ -210,6 +210,24 @@ crm_element_name(xmlNode *xml)
|
|
|
60de42 |
|
|
|
60de42 |
const char *crm_element_value(xmlNode * data, const char *name);
|
|
|
60de42 |
|
|
|
60de42 |
+/*!
|
|
|
60de42 |
+ * \brief Copy an element from one XML object to another
|
|
|
60de42 |
+ *
|
|
|
60de42 |
+ * \param[in] obj1 Source XML
|
|
|
60de42 |
+ * \param[in,out] obj2 Destination XML
|
|
|
60de42 |
+ * \param[in] element Name of element to copy
|
|
|
60de42 |
+ *
|
|
|
60de42 |
+ * \return Pointer to copied value (from source)
|
|
|
60de42 |
+ */
|
|
|
60de42 |
+static inline const char *
|
|
|
60de42 |
+crm_copy_xml_element(xmlNode *obj1, xmlNode *obj2, const char *element)
|
|
|
60de42 |
+{
|
|
|
60de42 |
+ const char *value = crm_element_value(obj1, element);
|
|
|
60de42 |
+
|
|
|
60de42 |
+ crm_xml_add(obj2, element, value);
|
|
|
60de42 |
+ return value;
|
|
|
60de42 |
+}
|
|
|
60de42 |
+
|
|
|
60de42 |
void xml_validate(const xmlNode * root);
|
|
|
60de42 |
|
|
|
60de42 |
gboolean xml_has_children(const xmlNode * root);
|
|
|
60de42 |
--
|
|
|
60de42 |
1.8.3.1
|
|
|
60de42 |
|
|
|
60de42 |
|
|
|
60de42 |
From 20a74b9d377c812abca651cb7ed7b4625ead76b1 Mon Sep 17 00:00:00 2001
|
|
|
60de42 |
From: Ken Gaillot <kgaillot@redhat.com>
|
|
|
60de42 |
Date: Thu, 12 Jan 2017 12:48:40 -0600
|
|
|
60de42 |
Subject: [PATCH 2/2] Fix: tools: properly ignore version with crm_diff
|
|
|
60de42 |
--no-version
|
|
|
60de42 |
|
|
|
60de42 |
Previously, crm_diff --no-version would remove the <version> information from
|
|
|
60de42 |
the generated patch, but it would still generate a change to update the
|
|
|
60de42 |
version. Now, it doesn't generate that change.
|
|
|
60de42 |
|
|
|
60de42 |
Based on patch originally provided by Andrew Beekhof <andrew@beekhof.net>
|
|
|
60de42 |
---
|
|
|
60de42 |
tools/xml_diff.c | 30 ++++++++++++++++++++++--------
|
|
|
60de42 |
1 file changed, 22 insertions(+), 8 deletions(-)
|
|
|
60de42 |
|
|
|
60de42 |
diff --git a/tools/xml_diff.c b/tools/xml_diff.c
|
|
|
60de42 |
index cd3cb29..b27bd13 100644
|
|
|
60de42 |
--- a/tools/xml_diff.c
|
|
|
60de42 |
+++ b/tools/xml_diff.c
|
|
|
60de42 |
@@ -158,6 +158,13 @@ main(int argc, char **argv)
|
|
|
60de42 |
crm_help('?', EX_USAGE);
|
|
|
60de42 |
}
|
|
|
60de42 |
|
|
|
60de42 |
+ if (apply && no_version) {
|
|
|
60de42 |
+ fprintf(stderr, "warning: -u/--no-version ignored with -p/--patch\n");
|
|
|
60de42 |
+ } else if (as_cib && no_version) {
|
|
|
60de42 |
+ fprintf(stderr, "error: -u/--no-version incompatible with -c/--cib\n");
|
|
|
60de42 |
+ return 1;
|
|
|
60de42 |
+ }
|
|
|
60de42 |
+
|
|
|
60de42 |
if (raw_1) {
|
|
|
60de42 |
object_1 = string2xml(xml_file_1);
|
|
|
60de42 |
|
|
|
60de42 |
@@ -199,6 +206,21 @@ main(int argc, char **argv)
|
|
|
60de42 |
return rc;
|
|
|
60de42 |
}
|
|
|
60de42 |
} else {
|
|
|
60de42 |
+ int lpc = 0;
|
|
|
60de42 |
+ const char *vfields[] = {
|
|
|
60de42 |
+ XML_ATTR_GENERATION_ADMIN,
|
|
|
60de42 |
+ XML_ATTR_GENERATION,
|
|
|
60de42 |
+ XML_ATTR_NUMUPDATES,
|
|
|
60de42 |
+ };
|
|
|
60de42 |
+
|
|
|
60de42 |
+ /* If we're ignoring the version, make the version information
|
|
|
60de42 |
+ * identical, so it isn't detected as a change. */
|
|
|
60de42 |
+ if (no_version) {
|
|
|
60de42 |
+ for (lpc = 0; lpc < DIMOF(vfields); lpc++) {
|
|
|
60de42 |
+ crm_copy_xml_element(object_1, object_2, vfields[lpc]);
|
|
|
60de42 |
+ }
|
|
|
60de42 |
+ }
|
|
|
60de42 |
+
|
|
|
60de42 |
xml_track_changes(object_2, NULL, object_2, FALSE);
|
|
|
60de42 |
xml_calculate_changes(object_1, object_2);
|
|
|
60de42 |
crm_log_xml_debug(object_2, xml_file_2?xml_file_2:"target");
|
|
|
60de42 |
@@ -247,19 +269,11 @@ main(int argc, char **argv)
|
|
|
60de42 |
XML_TAG_DIFF_ADDED,
|
|
|
60de42 |
};
|
|
|
60de42 |
|
|
|
60de42 |
- const char *vfields[] = {
|
|
|
60de42 |
- XML_ATTR_GENERATION_ADMIN,
|
|
|
60de42 |
- XML_ATTR_GENERATION,
|
|
|
60de42 |
- XML_ATTR_NUMUPDATES,
|
|
|
60de42 |
- };
|
|
|
60de42 |
-
|
|
|
60de42 |
for (i = 0; i < DIMOF(tags); i++) {
|
|
|
60de42 |
xmlNode *tmp = NULL;
|
|
|
60de42 |
|
|
|
60de42 |
tmp = find_xml_node(output, tags[i], FALSE);
|
|
|
60de42 |
if (tmp) {
|
|
|
60de42 |
- int lpc = 0;
|
|
|
60de42 |
-
|
|
|
60de42 |
for (lpc = 0; lpc < DIMOF(vfields); lpc++) {
|
|
|
60de42 |
xml_remove_prop(tmp, vfields[lpc]);
|
|
|
60de42 |
}
|
|
|
60de42 |
--
|
|
|
60de42 |
1.8.3.1
|
|
|
60de42 |
|