diff options
author | Andrej Shadura <andrew.shadura@collabora.co.uk> | 2019-03-25 12:13:12 +0100 |
---|---|---|
committer | Andrej Shadura <andrew.shadura@collabora.co.uk> | 2019-03-25 12:13:12 +0100 |
commit | 4265bc2bfcd48285cbfab84c7bbc90d9c29156ee (patch) | |
tree | a50af8e2bcff3afd2372afc4f3cdc4764330eb07 | |
parent | c8c4fea4d21b0f52685f186c60555f649a577bcb (diff) | |
parent | 750f92044fcccbef1464aec4c557acdbd9ad1753 (diff) |
Update upstream source from tag 'upstream/0.0_git20190304.5d29096'
Update to upstream version '0.0~git20190304.5d29096'
with Debian dir 796e24f8fdf64d95a634379fdf7564d2719a9c81
-rw-r--r-- | pkg/otbuiltin/builtin.go.h | 8 | ||||
-rw-r--r-- | pkg/otbuiltin/commit.go | 59 | ||||
-rw-r--r-- | pkg/otbuiltin/remote.go | 1 |
3 files changed, 68 insertions, 0 deletions
diff --git a/pkg/otbuiltin/builtin.go.h b/pkg/otbuiltin/builtin.go.h index 734de98..78270d5 100644 --- a/pkg/otbuiltin/builtin.go.h +++ b/pkg/otbuiltin/builtin.go.h @@ -188,4 +188,12 @@ _ostree_repo_commit_modifier_new_wrapper (OstreeRepoCommitModifierFlags flags, return ostree_repo_commit_modifier_new(flags, _commit_filter, user_data, destroy_notify); } +// Wrapper for variadic variables +static gboolean _g_variant_iter_next_twoargs(GVariantIter *iter, + const gchar *format_string, + gchar **key, + GVariant **value) +{ + return g_variant_iter_next(iter, format_string, key, value); +} #endif diff --git a/pkg/otbuiltin/commit.go b/pkg/otbuiltin/commit.go index 5883bb4..4d1f201 100644 --- a/pkg/otbuiltin/commit.go +++ b/pkg/otbuiltin/commit.go @@ -4,6 +4,7 @@ import ( "bytes" "errors" "fmt" + "sort" "strings" "time" "unsafe" @@ -47,6 +48,8 @@ type commitOptions struct { Timestamp time.Time // Override the timestamp of the commit Orphan bool // Commit does not belong to a branch Fsync bool // Specify whether fsync should be used or not. Default to true + CollectionID string // Collection ID binding + RefBinding []string // Refs binding,each element is a branch name } // Initializes a commitOptions struct and sets default values @@ -207,6 +210,8 @@ func (repo *Repo) Commit(commitPath, branch string, opts commitOptions) (string, goto out } + metadata = addRefs(metadata, options.CollectionID, options.RefBinding) + if options.NoXattrs { C._ostree_repo_append_modifier_flags(&flags, C.OSTREE_REPO_COMMIT_MODIFIER_FLAGS_SKIP_XATTRS) } @@ -407,6 +412,60 @@ out: return "", generateError(cerr) } +// Return the pointer to metadata +// Metadata is recreated only if need to add Collection ID or refBindings. +func addRefs(metadata *C.GVariant, collectionStr string, refStr []string) *C.GVariant { + builder := C.g_variant_builder_new(C._g_variant_type(C.CString("a{sv}"))) + defer C.g_variant_builder_unref(builder) + + if strings.Compare(collectionStr, "") == 0 && len(refStr) == 0 { + // Do not need to recreate metadata + goto out + } + // Add Ref bindings + if len(refStr) != 0 { + sort.Strings(refStr) + refs := C.g_ptr_array_new() + defer C.g_ptr_array_unref(refs) + for _, ref := range refStr { + refc := C.CString(ref) + C.g_ptr_array_add(refs, (C.gpointer)(refc)) + } + refs_v := C.g_variant_new_strv( + (**C.gchar)(unsafe.Pointer(refs.pdata)), + C.gssize(len(refStr))) + C._g_variant_builder_add_twoargs(builder, C.CString("{s@v}"), + C.CString(C.OSTREE_COMMIT_META_KEY_REF_BINDING), + C.g_variant_new_variant(refs_v)) + } + + // Add Collection ID binding + if strings.Compare(collectionStr, "") != 0 { + collection_id := C.g_variant_new_string((*C.gchar)(C.CString(collectionStr))) + C._g_variant_builder_add_twoargs(builder, C.CString("{sv}"), + C.CString(C.OSTREE_COMMIT_META_KEY_COLLECTION_BINDING), + collection_id) + } + + // Add previous metadata pairs + if unsafe.Pointer(metadata) != nil { + var iter C.GVariantIter + var key *C.gchar + var value *C.GVariant + C.g_variant_iter_init(&iter, metadata) + for C._g_variant_iter_next_twoargs(&iter, (*C.gchar)(C.CString("{sv}")), &key, &value) == C.TRUE { + C._g_variant_builder_add_twoargs(builder, + C.CString("{sv}"), (*C.char)(key), value) + } + C.g_variant_unref(metadata) + } + metadata = C.g_variant_builder_end(builder) + metadata = C.g_variant_ref_sink(metadata) + +out: + return metadata +} + // Parse an array of key value pairs of the format KEY=VALUE and add them to a GVariant func parseKeyValueStrings(pairs []string) (*C.GVariant, error) { builder := C.g_variant_builder_new(C._g_variant_type(C.CString("a{sv}"))) diff --git a/pkg/otbuiltin/remote.go b/pkg/otbuiltin/remote.go index 01171a4..c6bba80 100644 --- a/pkg/otbuiltin/remote.go +++ b/pkg/otbuiltin/remote.go @@ -28,6 +28,7 @@ type RemoteOptions struct { TlsCaPath string UnconfiguredState string MinFreeSpacePercent string + CollectionId string } func toDashString(in string) string { |