Permalink
Browse files

added Git2\IndexEntry

  • Loading branch information...
1 parent d15e3a5 commit e057413f2f23d9bc12afe7cf76f6741b4404b5bf @chobie chobie committed Jan 23, 2012
Showing with 141 additions and 3 deletions.
  1. +1 −0 config.m4
  2. +1 −0 git2.c
  3. +36 −3 index.c
  4. +72 −0 index_entry.c
  5. +31 −0 php_git2.h
View
@@ -40,6 +40,7 @@ if test $PHP_GIT2 != "no"; then
walker.c \
reference.c \
index.c \
+ index_entry.c \
, $ext_shared)
ifdef([PHP_ADD_EXTENSION_DEP],
View
1 git2.c
@@ -174,6 +174,7 @@ PHP_MINIT_FUNCTION(git2)
php_git2_signature_init(TSRMLS_C);
php_git2_walker_init(TSRMLS_C);
php_git2_reference_init(TSRMLS_C);
+ php_git2_index_entry_init(TSRMLS_C);
php_git2_index_init(TSRMLS_C);
return SUCCESS;
View
39 index.c
@@ -71,6 +71,37 @@ PHP_METHOD(git2_index, __construct)
/* }}} */
+/*
+{{{ proto: Git2\Index::count()
+*/
+PHP_METHOD(git2_index, count)
+{
+ php_git2_index *m_index;
+
+ m_index = PHP_GIT2_GET_OBJECT(php_git2_index, getThis());
+ RETURN_LONG(git_index_entrycount(m_index->index));
+}
+/* }}} */
+
+/*
+{{{ proto: Git2\Index::writeTree()
+*/
+PHP_METHOD(git2_index, writeTree)
+{
+ php_git2_index *m_index;
+ git_oid tree_oid;
+ char oid_out[GIT_OID_HEXSZ] = {0};
+ int error = 0;
+
+ m_index = PHP_GIT2_GET_OBJECT(php_git2_index, getThis());
+ error = git_tree_create_fromindex(&tree_oid, m_index->index);
+
+ git_oid_fmt(oid_out, &tree_oid);
+ RETVAL_STRINGL(oid_out,GIT_OID_HEXSZ,1);
+}
+/* }}} */
+
+
/* Iterator Implementation */
@@ -90,9 +121,9 @@ PHP_METHOD(git2_index, current)
"specified offset does not exist. %d");
RETURN_FALSE;
}
- fprintf(stderr,"path: %s\n",entry->path);
- //create_tree_entry_from_entry(&z_entry, entry ,m_index->repository);
- //RETURN_ZVAL(z_entry, 0, 1);
+
+ php_git2_create_index_entry(&z_entry, entry TSRMLS_CC);
+ RETURN_ZVAL(z_entry, 0, 1);
}
/*
@@ -149,12 +180,14 @@ PHP_METHOD(git2_index, valid)
static zend_function_entry php_git2_index_methods[] = {
PHP_ME(git2_index, __construct, arginfo_git2_index___construct, ZEND_ACC_PUBLIC)
+ PHP_ME(git2_index, count, NULL, ZEND_ACC_PUBLIC)
/* Iterator Implementation */
PHP_ME(git2_index, current, NULL, ZEND_ACC_PUBLIC)
PHP_ME(git2_index, key, NULL, ZEND_ACC_PUBLIC)
PHP_ME(git2_index, next, NULL, ZEND_ACC_PUBLIC)
PHP_ME(git2_index, rewind, NULL, ZEND_ACC_PUBLIC)
PHP_ME(git2_index, valid, NULL, ZEND_ACC_PUBLIC)
+ PHP_ME(git2_index, writeTree, NULL, ZEND_ACC_PUBLIC)
{NULL,NULL,NULL}
};
View
@@ -0,0 +1,72 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010 - 2012 Shuhei Tanuma
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "php_git2.h"
+
+PHPAPI zend_class_entry *git2_index_entry_class_entry;
+
+static void php_git2_index_entry_free_storage(php_git2_index_entry *object TSRMLS_DC)
+{
+ if (object->entry != NULL) {
+ free(object->entry);
+ object->entry = NULL;
+ }
+ zend_object_std_dtor(&object->zo TSRMLS_CC);
+ efree(object);
+}
+
+zend_object_value php_git2_index_entry_new(zend_class_entry *ce TSRMLS_DC)
+{
+ zend_object_value retval;
+
+ PHP_GIT2_STD_CREATE_OBJECT(php_git2_index_entry);
+ return retval;
+}
+
+static zend_function_entry php_git2_index_entry_methods[] = {
+ {NULL,NULL,NULL}
+};
+
+void php_git2_index_entry_init(TSRMLS_D)
+{
+ zend_class_entry ce;
+
+ INIT_NS_CLASS_ENTRY(ce, PHP_GIT2_NS, "IndexEntry", php_git2_index_entry_methods);
+ git2_index_entry_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
+ git2_index_entry_class_entry->create_object = php_git2_index_entry_new;
+
+ zend_declare_property_null(git2_index_entry_class_entry, "path", sizeof("path")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_null(git2_index_entry_class_entry, "oid", sizeof("oid")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_null(git2_index_entry_class_entry, "dev", sizeof("dev")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_null(git2_index_entry_class_entry, "ino", sizeof("ino")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_null(git2_index_entry_class_entry, "mode", sizeof("mode")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_null(git2_index_entry_class_entry, "uid", sizeof("uid")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_null(git2_index_entry_class_entry, "gid", sizeof("gid")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_null(git2_index_entry_class_entry, "file_size", sizeof("file_size")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_null(git2_index_entry_class_entry, "flags", sizeof("flags")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_null(git2_index_entry_class_entry, "flags_extended", sizeof("flags_extended")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_null(git2_index_entry_class_entry, "mtime", sizeof("mtime")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
+ zend_declare_property_null(git2_index_entry_class_entry, "ctime", sizeof("ctime")-1, ZEND_ACC_PUBLIC TSRMLS_CC);
+
+}
View
@@ -53,6 +53,7 @@ extern PHPAPI zend_class_entry *git2_signature_class_entry;
extern PHPAPI zend_class_entry *git2_walker_class_entry;
extern PHPAPI zend_class_entry *git2_reference_class_entry;
extern PHPAPI zend_class_entry *git2_index_class_entry;
+extern PHPAPI zend_class_entry *git2_index_entry_class_entry;
typedef struct{
zend_object zo;
@@ -109,6 +110,11 @@ typedef struct{
unsigned int offset;
} php_git2_index;
+typedef struct{
+ zend_object zo;
+ git_index_entry *entry;
+} php_git2_index_entry;
+
# define PHP_GIT2_GET_OBJECT(STRUCT_NAME, OBJECT) (STRUCT_NAME *) zend_object_store_get_object(OBJECT TSRMLS_CC);
@@ -199,4 +205,29 @@ static inline void create_tree_entry_from_entry(zval **object, git_tree_entry *e
add_property_long(*object, "attributes", git_tree_entry_attributes(entry));
}
+static inline void php_git2_create_index_entry(zval **object, git_index_entry *entry TSRMLS_DC)
+{
+ zval *tmp = NULL;
+ char oid_out[GIT_OID_HEXSZ] = {0};
+
+ MAKE_STD_ZVAL(tmp);
+ object_init_ex(tmp, git2_index_entry_class_entry);
+ git_oid_fmt(oid_out, &entry->oid);
+
+ add_property_string_ex(tmp, "path", sizeof("path"), entry->path, 1 TSRMLS_CC);
+ add_property_stringl_ex(tmp, "oid", sizeof("oid"), oid_out,GIT_OID_HEXSZ, 1 TSRMLS_CC);
+ add_property_long(tmp, "dev", entry->dev);
+ add_property_long(tmp, "ino", entry->ino);
+ add_property_long(tmp, "mode", entry->mode);
+ add_property_long(tmp, "uid", entry->uid);
+ add_property_long(tmp, "gid", entry->gid);
+ add_property_long(tmp, "file_size", entry->file_size);
+ add_property_long(tmp, "flags", entry->flags);
+ add_property_long(tmp, "flags_extended", entry->flags_extended);
+ add_property_long(tmp, "ctime", entry->ctime.seconds);
+ add_property_long(tmp, "mtime", entry->mtime.seconds);
+
+ *object = tmp;
+}
+
#endif /* PHP_GIT2_H */

0 comments on commit e057413

Please sign in to comment.