[augeas-devel] [PATCH 2 of 2] Fix insertion before the first child

David Lutterkort dlutter at redhat.com
Thu Jul 17 04:06:32 UTC 2008


2 files changed, 34 insertions(+), 4 deletions(-)
src/augeas.c                    |    6 +++---
tests/modules/pass_ins_test.aug |   32 +++++++++++++++++++++++++++++++-


# HG changeset patch
# User David Lutterkort <dlutter at redhat.com>
# Date 1216248737 25200
# Node ID 2846f10d64be3cb642dbf1f45b087a0a46aeb065
# Parent  a090ab78da11d32de54d1572f8ab115c3120854e
Fix insertion before the first child

Inserting a node as the new first child was completely broken.

Bug reported by Raphael Pinson.

diff -r a090ab78da11 -r 2846f10d64be src/augeas.c
--- a/src/augeas.c	Wed Jul 16 15:28:40 2008 -0700
+++ b/src/augeas.c	Wed Jul 16 15:52:17 2008 -0700
@@ -627,11 +627,11 @@
 
     struct segment *seg = last_segment(p);
     if (before) {
-        struct tree *siblings = seg_siblings(p, seg);
-        if (siblings == *tree) {
+        if (seg == p->segments) {
             list_insert_before(new, seg->tree, *tree);
         } else {
-            list_insert_before(new, seg->tree, siblings);
+            struct tree *parent = seg_parent(p, seg);
+            list_insert_before(new, seg->tree, parent->children);
         }
     } else {
         new->next = seg->tree->next;
diff -r a090ab78da11 -r 2846f10d64be tests/modules/pass_ins_test.aug
--- a/tests/modules/pass_ins_test.aug	Wed Jul 16 15:28:40 2008 -0700
+++ b/tests/modules/pass_ins_test.aug	Wed Jul 16 15:52:17 2008 -0700
@@ -2,7 +2,8 @@
 
   let eol = del "\n" "\n"
   let word = /[a-z0-9]+/
-  let lns = [ key word . del /[ \t]+/ " " . store word . eol ]*
+  let sep = del /[ \t]+/ " "
+  let lns = [ key word . sep . store word . eol ]*
 
   let s = "key value1\nkey value2\n"
   let t = "key value1\nnewkey newvalue\nkey value2\n"
@@ -16,3 +17,32 @@
     insb "newkey" "key[2]";
     set "newkey" "newvalue"
   = t
+
+  test lns put s after
+    insb "newkey" "key[1]";
+    set "newkey" "newvalue"
+  = "newkey newvalue\n" . s
+
+  (* Now test insertion inside the tree *)
+
+  let lns2 = [ key word . eol . lns ]
+
+  let s2 = "outer\n" . s
+  let t2 = "outer\n" . t
+
+  test lns2 put s2 after
+    insa "newkey" "outer/key[1]";
+    set "outer/newkey" "newvalue"
+  = t2
+
+  test lns2 put s2 after
+    insb "newkey" "outer/key[2]";
+    set "outer/newkey" "newvalue"
+  = t2
+
+
+  test lns2 put s2 after
+    insb "newkey" "outer/key[1]";
+    set "outer/newkey" "newvalue"
+  = "outer\nnewkey newvalue\n" . s
+




More information about the augeas-devel mailing list