0.0.9 version bump
[gitphp.git] / include / gitutil.git_read_refs.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
<?php
/*
 *  gitutil.git_read_refs.php
 *  gitphp: A PHP git repository browser
 *  Component: Git utility - read refs
 *
 *  Copyright (C) 2008 Christopher Han <xiphux@gmail.com>
 */
 
 require_once('util.epochcmp.php');
 require_once('gitutil.git_read_hash.php');
 require_once('gitutil.git_read_ref.php');
 require_once('gitutil.git_read_packed_refs.php');
 
function git_read_refs($projectroot,$project,$refdir)
{
        if (!is_dir($projectroot . $project . "/" . $refdir))
                return null;
        $refs = array();
        if ($dh = opendir($projectroot . $project . "/" . $refdir)) {
                while (($dir = readdir($dh)) !== false) {
                        if (strpos($dir,'.') !== 0) {
                                if (is_dir($projectroot . $project . "/" . $refdir . "/" . $dir)) {
                                        if ($dh2 = opendir($projectroot . $project . "/" . $refdir . "/" . $dir)) {
                                                while (($dir2 = readdir($dh2)) !== false) {
                                                        if (strpos($dir2,'.') !== 0)
                                                                $refs[] = $dir . "/" . $dir2;
                                                }
                                                closedir($dh2);
                                        }
                                }
                                $refs[] = $dir;
                        }
                }
                closedir($dh);
        } else
                return null;
        $reflist = array();
        foreach ($refs as $i => $ref_file) {
                $ref_id = git_read_hash($projectroot . $project . "/" . $refdir . "/" . $ref_file);
                $refobj = git_read_ref($projectroot, $project, $ref_id, $ref_file);
                if (isset($refobj))
                        $reflist[] = $refobj;
        }
 
        $packedrefs = git_read_packed_refs($projectroot, $project, $refdir);
        if (isset($packedrefs) && count($packedrefs) > 0) {
                foreach ($packedrefs as $packedref) {
                        $found = false;
                        foreach ($reflist as $ref) {
                                if (strcmp($ref["name"], $packedref["name"]) === 0) {
                                        $found = true;
                                        break;
                                }
                        }
                        if (!$found)
                                $reflist[] = $packedref;
                }
        }
 
        usort($reflist,"epochcmp");
        return $reflist;
}
 
?>
 
comments