vendor: update ostree-go

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
Giuseppe Scrivano
2018-11-13 10:34:12 +01:00
parent 6f2ae41211
commit dd6e8cc3a3
47 changed files with 208 additions and 215 deletions

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

@@ -18,76 +18,102 @@ import (
// #include "builtin.go.h"
import "C"
// Repo represents a local ostree repository
type Repo struct {
//*glib.GObject
ptr unsafe.Pointer
}
// Converts an ostree repo struct to its C equivalent
// isInitialized checks if the repo has been initialized
func (r *Repo) isInitialized() bool {
if r == nil || r.ptr == nil {
return false
}
return true
}
// native converts an ostree repo struct to its C equivalent
func (r *Repo) native() *C.OstreeRepo {
//return (*C.OstreeRepo)(r.Ptr())
if !r.isInitialized() {
return nil
}
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 {
// repoFromNative takes a C ostree repo and converts it to a Go struct
func repoFromNative(or *C.OstreeRepo) *Repo {
if or == nil {
return nil
}
//o := (*glib.GObject)(unsafe.Pointer(p))
//r := &Repo{o}
r := &Repo{unsafe.Pointer(p)}
r := &Repo{unsafe.Pointer(or)}
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
// OpenRepo attempts to open the repo at the given path
func OpenRepo(path string) (*Repo, error) {
var cerr *C.GError = nil
if path == "" {
return nil, errors.New("empty path")
}
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)
defer C.free(unsafe.Pointer(cpath))
repoPath := C.g_file_new_for_path(cpath)
defer C.g_object_unref(C.gpointer(repoPath))
crepo := C.ostree_repo_new(repoPath)
repo := repoFromNative(crepo)
var cerr *C.GError
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
// enableTombstoneCommits enables support for tombstone commits.
//
// This allows to distinguish between intentional deletions and accidental removals
// of commits.
func (r *Repo) enableTombstoneCommits() error {
if !r.isInitialized() {
return errors.New("repo not initialized")
}
tombstoneCommits = glib.GoBool(glib.GBoolean(C.g_key_file_get_boolean(config, (*C.gchar)(C.CString("core")), (*C.gchar)(C.CString("tombstone-commits")), nil)))
config := C.ostree_repo_get_config(r.native())
groupC := C.CString("core")
defer C.free(unsafe.Pointer(groupC))
keyC := C.CString("tombstone-commits")
defer C.free(unsafe.Pointer(keyC))
valueC := C.g_key_file_get_boolean(config, (*C.gchar)(groupC), (*C.gchar)(keyC), nil)
tombstoneCommits := glib.GoBool(glib.GBoolean(valueC))
//tombstoneCommits is false only if it really is false or if it is set to FALSE in the config file
// 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))) {
var cerr *C.GError
C.g_key_file_set_boolean(config, (*C.gchar)(groupC), (*C.gchar)(keyC), C.TRUE)
if !glib.GoBool(glib.GBoolean(C.ostree_repo_write_config(r.native(), config, &cerr))) {
return generateError(cerr)
}
}
return nil
}
// generateError wraps a GLib error into a Go one.
func generateError(err *C.GError) error {
if err == nil {
return errors.New("nil GError")
}
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
return fmt.Errorf("%s:%d - %s", file, line, goErr)
}
return goErr
}
// isOk wraps a return value (gboolean/gint) into a bool.
// 0 is false/error, everything else is true/ok.
func isOk(v C.int) bool {
return glib.GoBool(glib.GBoolean(v))
}

View File

@@ -33,24 +33,12 @@ _ostree_repo_file(GFile *file)
return OSTREE_REPO_FILE (file);
}
static guint
_gpointer_to_uint (gpointer ptr)
{
return GPOINTER_TO_UINT (ptr);
}
static gpointer
_guint_to_pointer (guint u)
{
return GUINT_TO_POINTER (u);
}
static void
_g_clear_object (volatile GObject **object_ptr)
{
g_clear_object(object_ptr);
}
static const GVariantType*
_g_variant_type (char *type)
{

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1,7 +1,7 @@
package otbuiltin
import (
"strings"
"errors"
"unsafe"
glib "github.com/ostreedev/ostree-go/pkg/glibobject"
@@ -14,34 +14,42 @@ import (
// #include "builtin.go.h"
import "C"
// Global variable for options
var checkoutOpts checkoutOptions
// Contains all of the options for checking commits out of
// an ostree repo
// checkoutOptions defines all of the options for checking commits
// out of an ostree repo
//
// Note: while this is private, fields are public and part of the API.
type checkoutOptions struct {
UserMode bool // Do not change file ownership or initialize extended attributes
Union bool // Keep existing directories and unchanged files, overwriting existing filesystem
AllowNoent bool // Do nothing if the specified filepath does not exist
DisableCache bool // Do not update or use the internal repository uncompressed object caceh
Whiteouts bool // Process 'whiteout' (docker style) entries
RequireHardlinks bool // Do not fall back to full copies if hard linking fails
Subpath string // Checkout sub-directory path
FromFile string // Process many checkouts from the given file
// UserMode defines whether to checkout a repo in `bare-user` mode
UserMode bool
// Union specifies whether to overwrite existing filesystem entries
Union bool
// AllowNoEnt defines whether to skip filepaths that do not exist
AllowNoent bool
// DisableCache defines whether to disable internal repository uncompressed object cache
DisableCache bool
// Whiteouts defines whether to Process 'whiteout' (docker style) entries
Whiteouts bool
// RequireHardlinks defines whether to fall back to full copies if hard linking fails
RequireHardlinks bool
// SubPath specifies a sub-directory to use for checkout
Subpath string
// FromFile specifies an optional file containing many checkouts to process
FromFile string
}
// Instantiates and returns a checkoutOptions struct with default values set
// NewCheckoutOptions instantiates and returns a checkoutOptions struct with default values set
func NewCheckoutOptions() checkoutOptions {
return checkoutOptions{}
}
// Checks out a commit with the given ref from a repository at the location of repo path to to the destination. Returns an error if the checkout could not be processed
func Checkout(repoPath, destination, commit string, opts checkoutOptions) error {
checkoutOpts = opts
// Checkout checks out commit `commitRef` from a repository at `repoPath`,
// writing it to `destination`. Returns an error if the checkout could not be processed.
func Checkout(repoPath, destination, commitRef string, opts checkoutOptions) error {
var cancellable *glib.GCancellable
ccommit := C.CString(commit)
ccommit := C.CString(commitRef)
defer C.free(unsafe.Pointer(ccommit))
var gerr = glib.NewGError()
cerr := (*C.GError)(gerr.Ptr())
defer C.free(unsafe.Pointer(cerr))
@@ -53,50 +61,48 @@ func Checkout(repoPath, destination, commit string, opts checkoutOptions) error
return generateError(cerr)
}
if strings.Compare(checkoutOpts.FromFile, "") != 0 {
err := processManyCheckouts(crepo, destination, cancellable)
if err != nil {
return err
}
} else {
var resolvedCommit *C.char
defer C.free(unsafe.Pointer(resolvedCommit))
if !glib.GoBool(glib.GBoolean(C.ostree_repo_resolve_rev(crepo, ccommit, C.FALSE, &resolvedCommit, &cerr))) {
return generateError(cerr)
}
err := processOneCheckout(crepo, resolvedCommit, checkoutOpts.Subpath, destination, cancellable)
if err != nil {
return err
}
// Multiple checkouts to process
if opts.FromFile != "" {
return processManyCheckouts(crepo, destination, cancellable)
}
return nil
// Simple single checkout
var resolvedCommit *C.char
defer C.free(unsafe.Pointer(resolvedCommit))
if !glib.GoBool(glib.GBoolean(C.ostree_repo_resolve_rev(crepo, ccommit, C.FALSE, &resolvedCommit, &cerr))) {
return generateError(cerr)
}
return processOneCheckout(crepo, resolvedCommit, destination, opts, cancellable)
}
// Processes one checkout from the repo
func processOneCheckout(crepo *C.OstreeRepo, resolvedCommit *C.char, subpath, destination string, cancellable *glib.GCancellable) error {
// processOneCheckout processes one checkout from the repo
func processOneCheckout(crepo *C.OstreeRepo, resolvedCommit *C.char, destination string, opts checkoutOptions, cancellable *glib.GCancellable) error {
cdest := C.CString(destination)
defer C.free(unsafe.Pointer(cdest))
var gerr = glib.NewGError()
cerr := (*C.GError)(gerr.Ptr())
defer C.free(unsafe.Pointer(cerr))
var repoCheckoutAtOptions C.OstreeRepoCheckoutAtOptions
if checkoutOpts.UserMode {
// Process options into bitflags
var repoCheckoutAtOptions C.OstreeRepoCheckoutAtOptions
if opts.UserMode {
repoCheckoutAtOptions.mode = C.OSTREE_REPO_CHECKOUT_MODE_USER
}
if checkoutOpts.Union {
if opts.Union {
repoCheckoutAtOptions.overwrite_mode = C.OSTREE_REPO_CHECKOUT_OVERWRITE_UNION_FILES
}
checkedOut := glib.GoBool(glib.GBoolean(C.ostree_repo_checkout_at(crepo, &repoCheckoutAtOptions, C._at_fdcwd(), cdest, resolvedCommit, nil, &cerr)))
if !checkedOut {
// Checkout commit to destination
if !glib.GoBool(glib.GBoolean(C.ostree_repo_checkout_at(crepo, &repoCheckoutAtOptions, C._at_fdcwd(), cdest, resolvedCommit, nil, &cerr))) {
return generateError(cerr)
}
return nil
}
// process many checkouts
// processManyCheckouts processes many checkouts in a single batch
func processManyCheckouts(crepo *C.OstreeRepo, target string, cancellable *glib.GCancellable) error {
return nil
return errors.New("batch checkouts processing: not implemented")
}

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -59,11 +59,11 @@ func NewCommitOptions() commitOptions {
}
type OstreeRepoTransactionStats struct {
metadata_objects_total int32
metadata_objects_total int32
metadata_objects_written int32
content_objects_total int32
content_objects_written int32
content_bytes_written uint64
content_objects_total int32
content_objects_written int32
content_bytes_written uint64
}
func (repo *Repo) PrepareTransaction() (bool, error) {
@@ -125,6 +125,7 @@ func (repo *Repo) RegenerateSummary() error {
// Commits a directory, specified by commitPath, to an ostree repo as a given branch
func (repo *Repo) Commit(commitPath, branch string, opts commitOptions) (string, error) {
// TODO(lucab): `options` is global un-synchronized mutable state, get rid of it.
options = opts
var err error
@@ -140,7 +141,7 @@ func (repo *Repo) Commit(commitPath, branch string, opts commitOptions) (string,
var cerr *C.GError
defer C.free(unsafe.Pointer(cerr))
var metadata *C.GVariant = nil
defer func(){
defer func() {
if metadata != nil {
defer C.g_variant_unref(metadata)
}
@@ -196,7 +197,7 @@ func (repo *Repo) Commit(commitPath, branch string, opts commitOptions) (string,
}
if options.AddDetachedMetadataString != nil {
_, err := parseKeyValueStrings(options.AddDetachedMetadataString)
_, err = parseKeyValueStrings(options.AddDetachedMetadataString)
if err != nil {
goto out
}
@@ -476,7 +477,7 @@ func handleStatOverrideLine(line string, table *glib.GHashTable) error {
// Handle an individual line from a Skiplist file
func handleSkipListline(line string, table *glib.GHashTable) error {
C.g_hash_table_add((*C.GHashTable)(table.Ptr()), C.gpointer( C.g_strdup((*C.gchar)(C.CString(line)))))
C.g_hash_table_add((*C.GHashTable)(table.Ptr()), C.gpointer(C.g_strdup((*C.gchar)(C.CString(line)))))
return nil
}

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1,11 +1,8 @@
package otbuiltin
import (
"errors"
"strings"
"unsafe"
glib "github.com/ostreedev/ostree-go/pkg/glibobject"
)
// #cgo pkg-config: ostree-1
@@ -15,43 +12,37 @@ import (
// #include "builtin.go.h"
import "C"
// Declare variables for options
var initOpts initOptions
// Contains all of the options for initializing an ostree repo
// initOptions contains all of the options for initializing an ostree repo
//
// Note: while this is private, exported fields are public and part of the API.
type initOptions struct {
Mode string // either bare, archive-z2, or bare-user
repoMode C.OstreeRepoMode
// Mode defines repository mode: either bare, archive-z2, or bare-user
Mode string
}
// Instantiates and returns an initOptions struct with default values set
// NewInitOptions instantiates and returns an initOptions struct with default values set
func NewInitOptions() initOptions {
io := initOptions{}
io.Mode = "bare"
io.repoMode = C.OSTREE_REPO_MODE_BARE
return io
return initOptions{
Mode: "bare",
}
}
// Initializes a new ostree repository at the given path. Returns true
// Init initializes a new ostree repository at the given path. Returns true
// if the repo exists at the location, regardless of whether it was initialized
// by the function or if it already existed. Returns an error if the repo could
// not be initialized
func Init(path string, options initOptions) (bool, error) {
initOpts = options
err := parseMode()
repoMode, err := parseRepoMode(options.Mode)
if err != nil {
return false, err
}
// Create a repo struct from the path
var cerr *C.GError
defer C.free(unsafe.Pointer(cerr))
cpath := C.CString(path)
defer C.free(unsafe.Pointer(cpath))
pathc := C.g_file_new_for_path(cpath)
defer C.g_object_unref(C.gpointer(pathc))
crepo := C.ostree_repo_new(pathc)
repo := C.ostree_repo_new(pathc)
// If the repo exists in the filesystem, return an error but set exists to true
/* var exists C.gboolean = 0
@@ -63,28 +54,31 @@ func Init(path string, options initOptions) (bool, error) {
return false, generateError(cerr)
}*/
cerr = nil
created := glib.GoBool(glib.GBoolean(C.ostree_repo_create(crepo, initOpts.repoMode, nil, &cerr)))
if !created {
errString := generateError(cerr).Error()
if strings.Contains(errString, "File exists") {
return true, generateError(cerr)
var cErr *C.GError
defer C.free(unsafe.Pointer(cErr))
if r := C.ostree_repo_create(repo, repoMode, nil, &cErr); !isOk(r) {
err := generateError(cErr)
if strings.Contains(err.Error(), "File exists") {
return true, err
}
return false, generateError(cerr)
return false, err
}
return true, nil
}
// Converts the mode string to a C.OSTREE_REPO_MODE enum value
func parseMode() error {
if strings.EqualFold(initOpts.Mode, "bare") {
initOpts.repoMode = C.OSTREE_REPO_MODE_BARE
} else if strings.EqualFold(initOpts.Mode, "bare-user") {
initOpts.repoMode = C.OSTREE_REPO_MODE_BARE_USER
} else if strings.EqualFold(initOpts.Mode, "archive-z2") {
initOpts.repoMode = C.OSTREE_REPO_MODE_ARCHIVE_Z2
} else {
return errors.New("Invalid option for mode")
// parseRepoMode converts a mode string to a C.OSTREE_REPO_MODE enum value
func parseRepoMode(modeLabel string) (C.OstreeRepoMode, error) {
var cErr *C.GError
defer C.free(unsafe.Pointer(cErr))
cModeLabel := C.CString(modeLabel)
defer C.free(unsafe.Pointer(cModeLabel))
var retMode C.OstreeRepoMode
if r := C.ostree_repo_mode_from_string(cModeLabel, &retMode, &cErr); !isOk(r) {
// NOTE(lucab): zero-value for this C enum has no special/invalid meaning.
return C.OSTREE_REPO_MODE_BARE, generateError(cErr)
}
return nil
return retMode, nil
}

View File

@@ -2,7 +2,6 @@ package otbuiltin
import (
"fmt"
"strings"
"time"
"unsafe"
@@ -16,13 +15,7 @@ import (
// #include "builtin.go.h"
import "C"
// Declare variables for options
var logOpts logOptions
// Set the format of the strings in the log
const formatString = "2006-01-02 03:04;05 -0700"
// Struct for the various pieces of data in a log entry
// LogEntry is a struct for the various pieces of data in a log entry
type LogEntry struct {
Checksum []byte
Variant []byte
@@ -39,24 +32,25 @@ func (l LogEntry) String() string {
return fmt.Sprintf("%s\n%s\n\n", l.Checksum, l.Variant)
}
type OstreeDumpFlags uint
type ostreeDumpFlags uint
const (
OSTREE_DUMP_NONE OstreeDumpFlags = 0
OSTREE_DUMP_RAW OstreeDumpFlags = 1 << iota
ostreeDumpNone ostreeDumpFlags = 0
ostreeDumpRaw ostreeDumpFlags = 1 << iota
)
// Contains all of the options for initializing an ostree repo
// logOptions contains all of the options for initializing an ostree repo
type logOptions struct {
Raw bool // Show raw variant data
// Raw determines whether to show raw variant data
Raw bool
}
//Instantiates and returns a logOptions struct with default values set
// NewLogOptions instantiates and returns a logOptions struct with default values set
func NewLogOptions() logOptions {
return logOptions{}
}
// Show the logs of a branch starting with a given commit or ref. Returns a
// Log shows the logs of a branch starting with a given commit or ref. Returns a
// slice of log entries on success and an error otherwise
func Log(repoPath, branch string, options logOptions) ([]LogEntry, error) {
// attempt to open the repository
@@ -69,12 +63,12 @@ func Log(repoPath, branch string, options logOptions) ([]LogEntry, error) {
defer C.free(unsafe.Pointer(cbranch))
var checksum *C.char
defer C.free(unsafe.Pointer(checksum))
var flags OstreeDumpFlags = OSTREE_DUMP_NONE
var cerr *C.GError
defer C.free(unsafe.Pointer(cerr))
if logOpts.Raw {
flags |= OSTREE_DUMP_RAW
flags := ostreeDumpNone
if options.Raw {
flags |= ostreeDumpRaw
}
if !glib.GoBool(glib.GBoolean(C.ostree_repo_resolve_rev(repo.native(), cbranch, C.FALSE, &checksum, &cerr))) {
@@ -84,84 +78,86 @@ func Log(repoPath, branch string, options logOptions) ([]LogEntry, error) {
return logCommit(repo, checksum, false, flags)
}
func logCommit(repo *Repo, checksum *C.char, isRecursive bool, flags OstreeDumpFlags) ([]LogEntry, error) {
func logCommit(repo *Repo, checksum *C.char, isRecursive bool, flags ostreeDumpFlags) ([]LogEntry, error) {
var variant *C.GVariant
var parent *C.char
defer C.free(unsafe.Pointer(parent))
var gerr = glib.NewGError()
var cerr = (*C.GError)(gerr.Ptr())
defer C.free(unsafe.Pointer(cerr))
entries := make([]LogEntry, 0, 1)
var err error
if !glib.GoBool(glib.GBoolean(C.ostree_repo_load_variant(repo.native(), C.OSTREE_OBJECT_TYPE_COMMIT, checksum, &variant, &cerr))) {
if isRecursive && glib.GoBool(glib.GBoolean(C.g_error_matches(cerr, C.g_io_error_quark(), C.G_IO_ERROR_NOT_FOUND))) {
return nil, nil
}
return entries, generateError(cerr)
return nil, generateError(cerr)
}
nextLogEntry := dumpLogObject(C.OSTREE_OBJECT_TYPE_COMMIT, checksum, variant, flags)
// get the parent of this commit
parent = (*C.char)(C.ostree_commit_get_parent(variant))
// Get the parent of this commit
parent := (*C.char)(C.ostree_commit_get_parent(variant))
defer C.free(unsafe.Pointer(parent))
entries := make([]LogEntry, 0, 1)
if parent != nil {
var err error
entries, err = logCommit(repo, parent, true, flags)
if err != nil {
return nil, err
}
}
entries = append(entries, *nextLogEntry)
nextLogEntry := dumpLogObject(C.OSTREE_OBJECT_TYPE_COMMIT, checksum, variant, flags)
entries = append(entries, nextLogEntry)
return entries, nil
}
func dumpLogObject(objectType C.OstreeObjectType, checksum *C.char, variant *C.GVariant, flags OstreeDumpFlags) *LogEntry {
objLog := new(LogEntry)
objLog.Checksum = []byte(C.GoString(checksum))
func dumpLogObject(objectType C.OstreeObjectType, checksum *C.char, variant *C.GVariant, flags ostreeDumpFlags) LogEntry {
csum := []byte(C.GoString(checksum))
if (flags & OSTREE_DUMP_RAW) != 0 {
dumpVariant(objLog, variant)
return objLog
if (flags & ostreeDumpRaw) != 0 {
return dumpVariant(variant, csum)
}
switch objectType {
case C.OSTREE_OBJECT_TYPE_COMMIT:
dumpCommit(objLog, variant, flags)
return objLog
return dumpCommit(variant, flags, csum)
default:
return objLog
return LogEntry{
Checksum: csum,
}
}
}
func dumpVariant(log *LogEntry, variant *C.GVariant) {
var byteswappedVariant *C.GVariant
func dumpVariant(variant *C.GVariant, csum []byte) LogEntry {
var logVariant []byte
if C.G_BYTE_ORDER != C.G_BIG_ENDIAN {
byteswappedVariant = C.g_variant_byteswap(variant)
log.Variant = []byte(C.GoString((*C.char)(C.g_variant_print(byteswappedVariant, C.TRUE))))
byteswappedVariant := C.g_variant_byteswap(variant)
logVariant = []byte(C.GoString((*C.char)(C.g_variant_print(byteswappedVariant, C.TRUE))))
} else {
log.Variant = []byte(C.GoString((*C.char)(C.g_variant_print(byteswappedVariant, C.TRUE))))
logVariant = []byte(C.GoString((*C.char)(C.g_variant_print(variant, C.TRUE))))
}
return LogEntry{
Checksum: csum,
Variant: logVariant,
}
}
func dumpCommit(log *LogEntry, variant *C.GVariant, flags OstreeDumpFlags) {
var subject, body *C.char
func dumpCommit(variant *C.GVariant, flags ostreeDumpFlags, csum []byte) LogEntry {
var subject *C.char
defer C.free(unsafe.Pointer(subject))
var body *C.char
defer C.free(unsafe.Pointer(body))
var timestamp C.guint64
var timeBigE C.guint64
C._g_variant_get_commit_dump(variant, C.CString("(a{sv}aya(say)&s&stayay)"), &subject, &body, &timestamp)
C._g_variant_get_commit_dump(variant, C.CString("(a{sv}aya(say)&s&stayay)"), &subject, &body, &timeBigE)
// Timestamp is now a Unix formatted timestamp as a guint64
timestamp = C._guint64_from_be(timestamp)
log.Timestamp = time.Unix((int64)(timestamp), 0)
// Translate to a host-endian epoch and convert to Go timestamp
timeHostE := C._guint64_from_be(timeBigE)
timestamp := time.Unix((int64)(timeHostE), 0)
if strings.Compare(C.GoString(subject), "") != 0 {
log.Subject = C.GoString(subject)
}
if strings.Compare(C.GoString(body), "") != 0 {
log.Body = C.GoString(body)
return LogEntry{
Timestamp: timestamp,
Subject: C.GoString(subject),
Body: C.GoString(body),
}
}

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -145,7 +145,7 @@ func deleteCommit(repo *Repo, commitToDelete string, cancellable *glib.GCancella
}
}
if err := enableTombstoneCommits(repo); err != nil {
if err := repo.enableTombstoneCommits(); err != nil {
return err
}
@@ -169,7 +169,7 @@ func pruneCommitsKeepYoungerThanDate(repo *Repo, date time.Time, cancellable *gl
var cerr = (*C.GError)(gerr.Ptr())
defer C.free(unsafe.Pointer(cerr))
if err := enableTombstoneCommits(repo); err != nil {
if err := repo.enableTombstoneCommits(); err != nil {
return err
}

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

@@ -1 +0,0 @@
package otbuiltin

View File

View File

View File

View File

View File

View File

View File

View File