@@ -406,7 +406,10 @@ lyd_diff_add(const struct lyd_node *node, enum lyd_diff_op op, const char *orig_
406406
407407 dup = diff_parent ;
408408 } else {
409- diff_opts = LYD_DUP_NO_META | LYD_DUP_WITH_PARENTS | LYD_DUP_WITH_FLAGS | LYD_DUP_NO_LYDS ;
409+ diff_opts = LYD_DUP_NO_META | LYD_DUP_WITH_PARENTS | LYD_DUP_WITH_FLAGS ;
410+ if (lysc_is_userordered (node -> schema )) {
411+ diff_opts |= LYD_DUP_NO_LYDS ;
412+ }
410413 if ((op != LYD_DIFF_OP_REPLACE ) || !lysc_is_userordered (node -> schema ) || (node -> schema -> flags & LYS_CONFIG_R )) {
411414 /* move applies only to the user-ordered list, no descendants */
412415 diff_opts |= LYD_DUP_RECURSIVE ;
@@ -2865,6 +2868,7 @@ lyd_diff_merge_r(const struct lyd_node *src_diff, struct lyd_node *diff_parent,
28652868 struct lyd_node * child , * diff_node = NULL ;
28662869 enum lyd_diff_op src_op , cur_op ;
28672870 struct ly_ht * child_dup_inst = NULL ;
2871+ uint32_t diff_opts ;
28682872
28692873 /* get source node operation */
28702874 LY_CHECK_RET (lyd_diff_get_op (src_diff , & src_op , NULL ));
@@ -2932,8 +2936,11 @@ lyd_diff_merge_r(const struct lyd_node *src_diff, struct lyd_node *diff_parent,
29322936 } else {
29332937add_diff :
29342938 /* add new diff node with all descendants */
2935- LY_CHECK_RET (lyd_dup_single (src_diff , diff_parent , LYD_DUP_RECURSIVE | LYD_DUP_WITH_FLAGS | LYD_DUP_NO_LYDS ,
2936- & diff_node ));
2939+ diff_opts = LYD_DUP_RECURSIVE | LYD_DUP_WITH_FLAGS ;
2940+ if (lysc_is_userordered (src_diff -> schema )) {
2941+ diff_opts |= LYD_DUP_NO_LYDS ;
2942+ }
2943+ LY_CHECK_RET (lyd_dup_single (src_diff , diff_parent , diff_opts , & diff_node ));
29372944
29382945 /* insert node into diff if not already */
29392946 if (!diff_parent ) {
@@ -3455,7 +3462,7 @@ lyd_diff_reverse_all(const struct lyd_node *src_diff, struct lyd_node **diff)
34553462 }
34563463
34573464 /* duplicate diff */
3458- LY_CHECK_GOTO (rc = lyd_dup_siblings (src_diff , NULL , LYD_DUP_RECURSIVE | LYD_DUP_NO_LYDS , diff ), cleanup );
3465+ LY_CHECK_GOTO (rc = lyd_dup_siblings (src_diff , NULL , LYD_DUP_RECURSIVE , diff ), cleanup );
34593466
34603467 /* find 'yang' module */
34613468 mod = ly_ctx_get_module_implemented (LYD_CTX (src_diff ), "yang" );
0 commit comments