-
Notifications
You must be signed in to change notification settings - Fork 78
/
Copy pathodb_backend.php
103 lines (89 loc) · 2.62 KB
/
odb_backend.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
class Pool
{
public static $pool = array();
}
$a = array(
"read" => function($oid){
echo "\e[32m# read $oid\e[m\n";
return array(
Pool::$pool[$oid][0],
Pool::$pool[$oid][1],
);
},
"read_prefix" => function($short_oid){
echo "\e[32m# read_prefix $short_oid\e[m\n";
$actual_oid = null;
foreach (Pool::$pool as $key => $value) {
if (preg_match("/^{$short_oid}/", $key)) {
$actual_oid = $key;
break;
}
}
return array(
Pool::$pool[$actual_oid][0],
Pool::$pool[$actual_oid][1],
$actual_oid,
);
},
"read_header" => function($oid) {
echo "\e[32m# read header$oid\e[m\n";
return array(
strlen(Pool::$pool[$oid][0]),
Pool::$pool[$oid][1],
);
},
"write" => function($oid, $buffer, $otype) {
echo "\e[32m# write $oid\e[m\n";
Pool::$pool[$oid] = array($buffer, $otype);
},
"writestream" => function() {
},
"readstream" => function() {
},
"exists" => function($oid) {
$retval = 0;
if (isset(Pool::$pool[$oid])) {
$retval = 1;
}
echo "\e[32m# exists $retval\e[m\n";
return $retval;
},
"refresh" => function() {
echo "\e[32m# refreshed!\e[m\n";
},
"foreach" => function($foreach_cb, &$payload) { // this payload was passed by git_odb_foreach callback.
echo "\e[32m# foreach (iterate all backends)\e[m\n";
foreach (Pool::$pool as $oid => $value) {
$retval = $foreach_cb($oid, $payload);
if ($retval == GIT_EUSER) {
return $retval;
}
}
return 0;
},
"writepack" => function() {
},
"free" => function() {
echo "\e[32m# free'd!\e[m\n";
}
);
$memory_backend = git_odb_backend_new($a);
$repo = git_repository_open(".");
$odb = git_repository_odb($repo);
git_odb_add_backend($odb, $memory_backend, 1000);
$oid = git_odb_write($odb, "Helo World(php memory backend)", GIT_OBJ_BLOB);
$obj = git_odb_read($odb, $oid);
echo git_odb_object_data($obj);
echo "\n";
$header = git_odb_read_header($odb, $oid);
var_dump($header); // size, otype
$obj = git_odb_read_prefix($odb, substr($oid, 0, 10));
var_dump($obj);
$payload = array();
git_odb_foreach($odb, function($oid, &$payload) {
echo ".";
}, $payload);
echo PHP_EOL;
git_odb_refresh($odb);
exit;