Skip to content

Commit 84fe8eb

Browse files
committed
forced checkout sample
1 parent 2797063 commit 84fe8eb

File tree

4 files changed

+61
-3
lines changed

4 files changed

+61
-3
lines changed

git2_php_util.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
}
99

1010
#define ARRAY_FETCH_BOOL(_x) if ((data = zend_hash_str_find(ht, ZEND_STRL(#_x))) != NULL) { \
11-
convert_to_bool(data); \
12-
opts->_x = Z_BVAL_P(data); \
11+
convert_to_boolean(data); \
12+
opts->_x = Z_LVAL_P(data); \
1313
}
1414

1515
#define ARRAY_FETCH_STRING(_x) if ((data = zend_hash_str_find(ht, ZEND_STRL(#_x))) != NULL) { \

git2_repository.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ static PHP_METHOD(Repository, checkout_head) {
262262
HashTable *opts = NULL;
263263
git_checkout_options opts_libgit2 = GIT_CHECKOUT_OPTIONS_INIT;
264264

265-
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|H", &opts) == FAILURE) {
265+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|h!", &opts) == FAILURE) {
266266
RETURN_FALSE;
267267
}
268268

git2_tests/003_forced_checkout.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
$tmp = sys_get_temp_dir().'/php-git2_test_ssh2';
4+
5+
$repo = Git2\Repository::init($tmp, false);
6+
7+
try {
8+
$remote = Git2\Remote::lookup_name($repo, 'origin');
9+
} catch(\Exception $e) {
10+
$remote = Git2\Remote::create_with_fetchspec($repo, 'origin', 'git@github.com:MagicalTux/php-git2.git', '+refs/*:refs/*');
11+
}
12+
13+
$fetch_opts = [
14+
'callbacks' => [
15+
'credentials' => function($url, $username, $types) {
16+
return Git2\Cred::create_ssh_key($username, __DIR__.'/test_key.pub', __DIR__.'/test_key');
17+
},
18+
],
19+
'update_fetchhead' => false,
20+
'download_tags' => Git2\Remote::DOWNLOAD_TAGS_ALL,
21+
];
22+
23+
echo "Fetching repository...\n";
24+
var_dump($remote->fetch(NULL, $fetch_opts));
25+
26+
$cfg = $repo->config();
27+
$cfg->set_string('branch.master.remote', 'origin');
28+
$cfg->set_string('branch.master.merge', 'refs/heads/master');
29+
30+
$repo->set_head('refs/heads/master');
31+
32+
echo "Checking out...\n";
33+
var_dump($repo->checkout_head(['checkout_strategy' => \Git2::CHECKOUT_FORCE]));
34+

php_git2.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,30 @@ PHP_MINIT_FUNCTION(git2) {
6565
GIT2_BASE_CONST(CERT_HOSTKEY_LIBSSH2);
6666
GIT2_BASE_CONST(CERT_STRARRAY);
6767

68+
// checkout
69+
GIT2_BASE_CONST(CHECKOUT_NONE);
70+
GIT2_BASE_CONST(CHECKOUT_SAFE);
71+
GIT2_BASE_CONST(CHECKOUT_FORCE);
72+
GIT2_BASE_CONST(CHECKOUT_RECREATE_MISSING);
73+
GIT2_BASE_CONST(CHECKOUT_ALLOW_CONFLICTS);
74+
GIT2_BASE_CONST(CHECKOUT_REMOVE_UNTRACKED);
75+
GIT2_BASE_CONST(CHECKOUT_REMOVE_IGNORED);
76+
GIT2_BASE_CONST(CHECKOUT_UPDATE_ONLY);
77+
GIT2_BASE_CONST(CHECKOUT_DONT_UPDATE_INDEX);
78+
GIT2_BASE_CONST(CHECKOUT_NO_REFRESH);
79+
GIT2_BASE_CONST(CHECKOUT_SKIP_UNMERGED);
80+
GIT2_BASE_CONST(CHECKOUT_USE_OURS);
81+
GIT2_BASE_CONST(CHECKOUT_USE_THEIRS);
82+
GIT2_BASE_CONST(CHECKOUT_DISABLE_PATHSPEC_MATCH);
83+
GIT2_BASE_CONST(CHECKOUT_SKIP_LOCKED_DIRECTORIES);
84+
GIT2_BASE_CONST(CHECKOUT_DONT_OVERWRITE_IGNORED);
85+
GIT2_BASE_CONST(CHECKOUT_CONFLICT_STYLE_MERGE);
86+
GIT2_BASE_CONST(CHECKOUT_CONFLICT_STYLE_DIFF3);
87+
GIT2_BASE_CONST(CHECKOUT_DONT_REMOVE_EXISTING);
88+
GIT2_BASE_CONST(CHECKOUT_DONT_WRITE_INDEX);
89+
GIT2_BASE_CONST(CHECKOUT_UPDATE_SUBMODULES);
90+
GIT2_BASE_CONST(CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED);
91+
6892
git2_exception_init(TSRMLS_C);
6993
git2_repository_init(TSRMLS_C);
7094
git2_config_init(TSRMLS_C);

0 commit comments

Comments
 (0)