]> git.ipfire.org Git - thirdparty/git.git/commitdiff
list-objects-filter-options: create copy helper
authorDerrick Stolee <derrickstolee@github.com>
Wed, 9 Mar 2022 16:01:32 +0000 (16:01 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 9 Mar 2022 18:25:26 +0000 (10:25 -0800)
As we add more embedded members with type 'struct
list_objects_filter_options', it will be important to easily perform a
deep copy across multiple such structs. Create
list_objects_filter_copy() to satisfy this need.

This method is recursive to match the recursive nature of the struct.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
list-objects-filter-options.c
list-objects-filter-options.h

index fd8d59f653ab9b04cc709f9d0f4b00f407bf7ae9..449d53af69f466d73aa8fd8cfd2c7e1f2743dcf7 100644 (file)
@@ -415,3 +415,22 @@ void partial_clone_get_default_filter_spec(
                                         &errbuf);
        strbuf_release(&errbuf);
 }
+
+void list_objects_filter_copy(
+       struct list_objects_filter_options *dest,
+       const struct list_objects_filter_options *src)
+{
+       int i;
+       struct string_list_item *item;
+
+       /* Copy everything. We will overwrite the pointers shortly. */
+       memcpy(dest, src, sizeof(struct list_objects_filter_options));
+
+       string_list_init_dup(&dest->filter_spec);
+       for_each_string_list_item(item, &src->filter_spec)
+               string_list_append(&dest->filter_spec, item->string);
+
+       ALLOC_ARRAY(dest->sub, dest->sub_alloc);
+       for (i = 0; i < src->sub_nr; i++)
+               list_objects_filter_copy(&dest->sub[i], &src->sub[i]);
+}
index da5b6737e27e36a6e198a59a070cd30f17179ceb..425c38cae9da43830e92965c1b3904c4f52b94ae 100644 (file)
@@ -132,4 +132,8 @@ void partial_clone_get_default_filter_spec(
        struct list_objects_filter_options *filter_options,
        const char *remote);
 
+void list_objects_filter_copy(
+       struct list_objects_filter_options *dest,
+       const struct list_objects_filter_options *src);
+
 #endif /* LIST_OBJECTS_FILTER_OPTIONS_H */