Skip to content

Commit

Permalink
added Git2\IndexEntry
Browse files Browse the repository at this point in the history
  • Loading branch information
chobie committed Jan 23, 2012
1 parent d15e3a5 commit e057413
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 3 deletions.
1 change: 1 addition & 0 deletions config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -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],
Expand Down
1 change: 1 addition & 0 deletions git2.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
39 changes: 36 additions & 3 deletions index.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

Expand All @@ -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);
}

/*
Expand Down Expand Up @@ -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}
};

Expand Down
72 changes: 72 additions & 0 deletions index_entry.c
Original file line number Diff line number Diff line change
@@ -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);

}
31 changes: 31 additions & 0 deletions php_git2.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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.