diff options
author | Matthew Heon <matthew.heon@gmail.com> | 2017-11-01 11:24:59 -0400 |
---|---|---|
committer | Matthew Heon <matthew.heon@gmail.com> | 2017-11-01 11:24:59 -0400 |
commit | a031b83a09a8628435317a03f199cdc18b78262f (patch) | |
tree | bc017a96769ce6de33745b8b0b1304ccf38e9df0 /vendor/github.com/ostreedev/ostree-go/pkg/otbuiltin/builtin.go | |
parent | 2b74391cd5281f6fdf391ff8ad50fd1490f6bf89 (diff) | |
download | podman-a031b83a09a8628435317a03f199cdc18b78262f.tar.gz podman-a031b83a09a8628435317a03f199cdc18b78262f.tar.bz2 podman-a031b83a09a8628435317a03f199cdc18b78262f.zip |
Initial checkin from CRI-O repo
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
Diffstat (limited to 'vendor/github.com/ostreedev/ostree-go/pkg/otbuiltin/builtin.go')
-rw-r--r-- | vendor/github.com/ostreedev/ostree-go/pkg/otbuiltin/builtin.go | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/vendor/github.com/ostreedev/ostree-go/pkg/otbuiltin/builtin.go b/vendor/github.com/ostreedev/ostree-go/pkg/otbuiltin/builtin.go new file mode 100644 index 000000000..d3a8ae5fd --- /dev/null +++ b/vendor/github.com/ostreedev/ostree-go/pkg/otbuiltin/builtin.go @@ -0,0 +1,93 @@ +// Package otbuiltin contains all of the basic commands for creating and +// interacting with an ostree repository +package otbuiltin + +import ( + "errors" + "fmt" + "runtime" + "unsafe" + + glib "github.com/ostreedev/ostree-go/pkg/glibobject" +) + +// #cgo pkg-config: ostree-1 +// #include <stdlib.h> +// #include <glib.h> +// #include <ostree.h> +// #include "builtin.go.h" +import "C" + +type Repo struct { + //*glib.GObject + ptr unsafe.Pointer +} + +// Converts an ostree repo struct to its C equivalent +func (r *Repo) native() *C.OstreeRepo { + //return (*C.OstreeRepo)(r.Ptr()) + return (*C.OstreeRepo)(r.ptr) +} + +// Takes a C ostree repo and converts it to a Go struct +func repoFromNative(p *C.OstreeRepo) *Repo { + if p == nil { + return nil + } + //o := (*glib.GObject)(unsafe.Pointer(p)) + //r := &Repo{o} + r := &Repo{unsafe.Pointer(p)} + return r +} + +// Checks if the repo has been initialized +func (r *Repo) isInitialized() bool { + if r.ptr != nil { + return true + } + return false +} + +// Attempts to open the repo at the given path +func OpenRepo(path string) (*Repo, error) { + var cerr *C.GError = nil + cpath := C.CString(path) + pathc := C.g_file_new_for_path(cpath) + defer C.g_object_unref(C.gpointer(pathc)) + crepo := C.ostree_repo_new(pathc) + repo := repoFromNative(crepo) + r := glib.GoBool(glib.GBoolean(C.ostree_repo_open(crepo, nil, &cerr))) + if !r { + return nil, generateError(cerr) + } + return repo, nil +} + +// Enable support for tombstone commits, which allow the repo to distinguish between +// commits that were intentionally deleted and commits that were removed accidentally +func enableTombstoneCommits(repo *Repo) error { + var tombstoneCommits bool + var config *C.GKeyFile = C.ostree_repo_get_config(repo.native()) + var cerr *C.GError + + tombstoneCommits = glib.GoBool(glib.GBoolean(C.g_key_file_get_boolean(config, (*C.gchar)(C.CString("core")), (*C.gchar)(C.CString("tombstone-commits")), nil))) + + //tombstoneCommits is false only if it really is false or if it is set to FALSE in the config file + if !tombstoneCommits { + C.g_key_file_set_boolean(config, (*C.gchar)(C.CString("core")), (*C.gchar)(C.CString("tombstone-commits")), C.TRUE) + if !glib.GoBool(glib.GBoolean(C.ostree_repo_write_config(repo.native(), config, &cerr))) { + return generateError(cerr) + } + } + return nil +} + +func generateError(err *C.GError) error { + goErr := glib.ConvertGError(glib.ToGError(unsafe.Pointer(err))) + _, file, line, ok := runtime.Caller(1) + if ok { + return errors.New(fmt.Sprintf("%s:%d - %s", file, line, goErr)) + } else { + return goErr + } +} |