Properly pipe git_history_list
[gitphp.git] / include / display.git_history.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
<?php
/*
 *  display.git_history.php
 *  gitphp: A PHP git repository browser
 *  Component: Display - history
 *
 *  Copyright (C) 2008 Christopher Han <xiphux@gmail.com>
 */
 
 include_once('gitutil.git_get_hash_by_path.php');
 include_once('gitutil.git_read_head.php');
 include_once('gitutil.git_read_commit.php');
 include_once('gitutil.read_info_ref.php');
 include_once('gitutil.git_history_list.php');
 
function git_history($projectroot,$project,$hash,$file)
{
        global $tpl;
        if (!isset($hash))
                $hash = git_read_head($projectroot . $project);
        $co = git_read_commit($projectroot . $project, $hash);
        $refs = read_info_ref($projectroot . $project);
        $tpl->clear_all_assign();
        $tpl->assign("project",$project);
        $tpl->assign("hash",$hash);
        $tpl->assign("tree",$co['tree']);
        $tpl->display("history_nav.tpl");
        $tpl->assign("title",$co['title']);
        $tpl->assign("file",$file);
        $tpl->display("history_header.tpl");
        $cmdout = git_history_list($projectroot . $project, $hash, $file);
        $alternate = FALSE;
        $lines = explode("\n", $cmdout);
        foreach ($lines as $i => $line) {
                if (ereg("^([0-9a-fA-F]{40})",$line,$regs))
                        $commit = $regs[1];
                else if (ereg(":([0-7]{6}) ([0-7]{6}) ([0-9a-fA-F]{40}) ([0-9a-fA-F]{40}) (.)\t(.*)$",$line,$regs) && isset($commit)) {
                                $co = git_read_commit($projectroot . $project, $commit);
                                $tpl->clear_all_assign();
                                if ($alternate)
                                        $tpl->assign("class","dark");
                                else
                                        $tpl->assign("class","light");
                                $alternate = !$alternate;
                                $tpl->assign("project",$project);
                                $tpl->assign("agestringage",$co['age_string_age']);
                                $tpl->assign("agestringdate",$co['age_string_date']);
                                $tpl->assign("authorname",$co['author_name']);
                                $tpl->assign("commit",$commit);
                                $tpl->assign("file",$file);
                                $tpl->assign("title",$co['title_short']);
                                if (isset($refs[$commit]))
                                        $tpl->assign("commitref",$refs[$commit]);
                                $blob = git_get_hash_by_path($projectroot . $project, $hash,$file);
                                $blob_parent = git_get_hash_by_path($projectroot . $project, $commit,$file);
                                if ($blob && $blob_parent && ($blob != $blob_parent)) {
                                        $tpl->assign("blob",$blob);
                                        $tpl->assign("blobparent",$blob_parent);
                                        $tpl->assign("difftocurrent",TRUE);
                                }
                                $tpl->display("history_item.tpl");
                                unset($commit);
                }
        }
        $tpl->clear_all_assign();
        $tpl->display("history_footer.tpl");
}
 
?>
 
comments