Changed all ereg references to preg_match("/regex/"... and eregi references to preg_match("/regex/i" to prevent php 5.3.0 from complaining
[gitphp.git] / include / gitutil.git_filesearch.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
<?php
/*
 *  gitutil.git_filesearch.php
 *  gitphp: A PHP git repository browser
 *  Component: Git utility - search files
 *
 *  Copyright (C) 2009 Christopher Han <xiphux@gmail.com>
 */
 
require_once('gitutil.git_grep.php');
require_once('gitutil.git_ls_tree.php');
 
function git_filesearch($project, $hash, $search, $case = false, $skip = 0, $count = 100)
{
        $matches = array();
        
        /*
         * Search file contents
         */
        $grepout = git_grep($project, $hash, $search, $case, false, true);
        $lines = explode("\n",$grepout);
        foreach ($lines as $j => $line) {
                if ($case)
                        $ret = ereg("^([^:]+):([^:]+):(.*" . quotemeta($search) . ".*)",$line,$regs);
                else
                        $ret = eregi("^([^:]+):([^:]+):(.*" . quotemeta($search) . ".*)",$line,$regs);
                if ($ret) {
                        $fname = trim($regs[2]);
                        if (!isset($matches[$fname])) {
                                $matches[$fname] = array();
                                $matches[$fname]['lines'] = array();
                        }
                        $matches[$fname]['lines'][] = $regs[3];
                }
        }
 
        /*
         * Search filenames
         */
         $lsout = git_ls_tree($project, $hash, false, true);
         $entries = explode("\n",$lsout);
         foreach ($entries as $j => $line) {
                $ret = ereg("^([0-9]+) (.+) ([0-9a-fA-F]{40})\t(.+)",$line,$regs);
                $fname = trim($regs[4]);
                if (isset($matches[$fname])) {
                        $matches[$fname]['hash'] = $regs[3];
                        $matches[$fname]['type'] = $regs[2];
                } else {
                        if ($case)
                                $ret = ereg("^([0-9]+) (.+) ([0-9a-fA-F]{40})\t(.*" . quotemeta($search) . "[^/]*)$",$line,$regs);
                        else
                                $ret = eregi("^([0-9]+) (.+) ([0-9a-fA-F]{40})\t(.*" . quotemeta($search) . "[^/]*)$",$line,$regs);
                        if ($ret) {
                                $fname = trim($regs[4]);
                                $matches[$fname] = array();
                                $matches[$fname]['hash'] = $regs[3];
                                $matches[$fname]['type'] = $regs[2];
                        }
                }
         }
        
        if ($skip > 0) {
                foreach ($matches as $i => $val) {
                        unset($matches[$i]);
                        $skip--;
                        if ($skip <= 0)
                                break;
                }
        }
 
        if (count($matches) > $count) {
                $index = 1;
                foreach ($matches as $i => $val) {
                        if ($index > $count)
                                unset($matches[$i]);
                        $index++;
                }
        }
 
        return $matches;
}
 
?>
 
comments