diff --git a/Gopkg.lock b/Gopkg.lock index da22f6d6..2d2395f5 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -5,7 +5,7 @@ branch = "master" name = "github.com/jguer/go-alpm" packages = ["."] - revision = "946a37df2f6cbb5b3c26870a9a51d3fc02ea0fe1" + revision = "c2766b2ff83df422e2be6073099849aab33cc1e7" [[projects]] branch = "master" diff --git a/vendor/github.com/jguer/go-alpm/callbacks.c b/vendor/github.com/jguer/go-alpm/callbacks.c index 661c4566..e36a4295 100644 --- a/vendor/github.com/jguer/go-alpm/callbacks.c +++ b/vendor/github.com/jguer/go-alpm/callbacks.c @@ -10,6 +10,7 @@ #include void logCallback(uint16_t level, char *cstring); +void questionCallback(alpm_question_t *question); void go_alpm_log_cb(alpm_loglevel_t level, const char *fmt, va_list arg) { char *s = malloc(128); @@ -25,7 +26,14 @@ void go_alpm_log_cb(alpm_loglevel_t level, const char *fmt, va_list arg) { } } -void go_alpm_set_logging(alpm_handle_t *handle) { - alpm_option_set_logcb(handle, go_alpm_log_cb); +void go_alpm_question_cb(alpm_question_t *question) { + questionCallback(question); } +void go_alpm_set_logging(alpm_handle_t *handle) { + alpm_option_set_logcb(handle, go_alpm_log_cb); +} + +void go_alpm_set_question(alpm_handle_t *handle) { + alpm_option_set_questioncb(handle, go_alpm_question_cb); +} diff --git a/vendor/github.com/jguer/go-alpm/callbacks.go b/vendor/github.com/jguer/go-alpm/callbacks.go index 3804f5f1..0078e58a 100644 --- a/vendor/github.com/jguer/go-alpm/callbacks.go +++ b/vendor/github.com/jguer/go-alpm/callbacks.go @@ -12,9 +12,17 @@ package alpm void logCallback(uint16_t level, char *cstring); void go_alpm_log_cb(alpm_loglevel_t level, const char *fmt, va_list arg); void go_alpm_set_logging(alpm_handle_t *handle); +void go_alpm_set_question(alpm_handle_t *handle); */ import "C" +import ( + "unsafe" +) + +type logCallbackSig func(uint16, string) +type questionCallbackSig func(QuestionAny) + var DefaultLogLevel = LogWarning func DefaultLogCallback(lvl uint16, s string) { @@ -23,14 +31,26 @@ func DefaultLogCallback(lvl uint16, s string) { } } -var log_callback = DefaultLogCallback +var log_callback logCallbackSig +var question_callback questionCallbackSig //export logCallback func logCallback(level uint16, cstring *C.char) { log_callback(level, C.GoString(cstring)) } -func (h *Handle) SetLogCallback(cb func(uint16, string)) { +//export questionCallback +func questionCallback(question *C.alpm_question_t) { + q := (*C.alpm_question_any_t)(unsafe.Pointer(question)) + question_callback(QuestionAny{q}) +} + +func (h *Handle) SetLogCallback(cb logCallbackSig) { log_callback = cb C.go_alpm_set_logging(h.ptr) } + +func (h *Handle) SetQuestionCallback(cb questionCallbackSig) { + question_callback = cb + C.go_alpm_set_question(h.ptr) +} diff --git a/vendor/github.com/jguer/go-alpm/enums.go b/vendor/github.com/jguer/go-alpm/enums.go index 2b11ebc4..2b1bdd3a 100644 --- a/vendor/github.com/jguer/go-alpm/enums.go +++ b/vendor/github.com/jguer/go-alpm/enums.go @@ -97,16 +97,16 @@ const ( LogFunction ) -type Question uint +type QuestionType uint const ( - QuestionInstallIgnorepkg Question = 1 << iota - QuestionReplacePkg - QuestionConflictPkg - QuestionCorruptedPkg - QuestionRemovePkgs - QuestionSelectProvider - QuestionImportKey + QuestionTypeInstallIgnorepkg QuestionType = 1 << iota + QuestionTypeReplacePkg + QuestionTypeConflictPkg + QuestionTypeCorruptedPkg + QuestionTypeRemovePkgs + QuestionTypeSelectProvider + QuestionTypeImportKey ) type Validation int diff --git a/vendor/github.com/jguer/go-alpm/types.go b/vendor/github.com/jguer/go-alpm/types.go index c30f3ab6..80ebbe5e 100644 --- a/vendor/github.com/jguer/go-alpm/types.go +++ b/vendor/github.com/jguer/go-alpm/types.go @@ -13,6 +13,7 @@ import "C" import ( "reflect" "unsafe" + "fmt" ) // Description of a dependency. @@ -150,3 +151,99 @@ func (l BackupList) Slice() (slice []BackupFile) { }) return } + +type QuestionAny struct { + ptr *C.alpm_question_any_t +} + +func (question QuestionAny) SetAnswer(answer bool) { + if answer { + question.ptr.answer = 1 + } else { + question.ptr.answer = 0 + } +} + +type QuestionInstallIgnorepkg struct { + ptr *C.alpm_question_install_ignorepkg_t +} + +func (question QuestionAny) Type() QuestionType{ + return QuestionType(question.ptr._type) +} + +func (question QuestionAny) Answer() bool { + return question.ptr.answer == 1 +} + +func (question QuestionAny) QuestionInstallIgnorepkg() (QuestionInstallIgnorepkg, error) { + if question.Type() == QuestionTypeInstallIgnorepkg { + return *(*QuestionInstallIgnorepkg)(unsafe.Pointer(&question)), nil + } + + return QuestionInstallIgnorepkg{}, fmt.Errorf("Can not convert to QuestionInstallIgnorepkg") +} + +func (question QuestionInstallIgnorepkg) SetInstall(install bool) { + if install { + question.ptr.install = 1 + } else { + question.ptr.install = 0 + } +} + +func (question QuestionInstallIgnorepkg) Type() QuestionType { + return QuestionType(question.ptr._type) +} + +func (question QuestionInstallIgnorepkg) Install() bool { + return question.ptr.install == 1 +} + +func (question QuestionInstallIgnorepkg) Pkg(h *Handle) Package { + return Package { + question.ptr.pkg, + *h, + } +} + +type QuestionReplace struct { + ptr *C.alpm_question_replace_t +} + +func (question QuestionReplace) Type() QuestionType { + return QuestionType(question.ptr._type) +} + +func (question QuestionReplace) SetReplace(replace bool) { + if replace { + question.ptr.replace = 1 + } else { + question.ptr.replace = 0 + } +} + +func (question QuestionReplace) Replace() bool { + return question.ptr.replace == 1 +} + +func (question QuestionReplace) NewPkg(h *Handle) Package { + return Package { + question.ptr.newpkg, + *h, + } +} + +func (question QuestionReplace) OldPkg(h *Handle) Package { + return Package { + question.ptr.oldpkg, + *h, + } +} + +func (question QuestionReplace) newDb(h *Handle) Db { + return Db { + question.ptr.newdb, + *h, + } +}