From 39d825a2a85d839ac7ba2a531947166a108d72d4 Mon Sep 17 00:00:00 2001 From: Ben Navetta Date: Mon, 18 Aug 2014 19:42:34 -0400 Subject: [PATCH] status data types --- status.go | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 status.go diff --git a/status.go b/status.go new file mode 100644 index 0000000..5fecdb3 --- /dev/null +++ b/status.go @@ -0,0 +1,69 @@ +package git + +/* +#include +#include +*/ +import "C" + +import ( + "runtime" +) + +type Status int + +const ( + StatusCurrent Status = C.GIT_STATUS_CURRENT + StatusIndexNew = C.GIT_STATUS_INDEX_NEW + StatusIndexModified = C.GIT_STATUS_INDEX_MODIFIED + StatusIndexDeleted = C.GIT_STATUS_INDEX_DELETED + StatusIndexRenamed = C.GIT_STATUS_INDEX_RENAMED + StatusIndexTypeChange = C.GIT_STATUS_INDEX_TYPECHANGE + StatusWtNew = C.GIT_STATUS_WT_NEW + StatusWtModified = C.GIT_STATUS_WT_NEW + StatusWtDeleted = C.GIT_STATUS_WT_DELETED + StatusWtTypeChange = C.GIT_STATUS_WT_TYPECHANGE + StatusWtRenamed = C.GIT_STATUS_WT_RENAMED + StatusIgnored = C.GIT_STATUS_IGNORED +) + +type StatusList struct { + ptr *C.git_status_list +} + +type StatusEntry struct { + Status Status + HeadToIndex DiffDelta + IndexToWorkdir DiffDelta +} + +func newStatusListFromC(ptr *C.git_status_list) *StatusList { + if ptr == nil { + return nil + } + + statusList := &StatusList{ + ptr: ptr, + } + + runtime.SetFinalizer(statusList, (*StatusList).Free) + return statusList +} + +func (statusList *StatusList) Free() error { + if statusList.ptr == nil { + return ErrInvalid + } + runtime.SetFinalizer(statusList, nil) + C.git_status_list_free(statusList.ptr) + statusList.ptr = nil + return nil +} + +func statusEntryFromC(statusEntry *C.git_status_entry) StatusEntry { + return StatusEntry { + Status: Status(statusEntry.status), + HeadToIndex: diffDeltaFromC(statusEntry.head_to_index), + IndexToWorkdir: diffDeltaFromC(statusEntry.index_to_workdir), + } +}