Merge branch 'master' of http://git.gitphp.org/gitphp
[gitphp.git] / include / git / taglist / TagListLoad_Raw.class.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
/**
 * Tag list load strategy using raw objects
 *
 * @author Christopher Han <xiphux@gmail.com>
 * @copyright Copyright (c) 2012 Christopher Han
 * @package GitPHP
 * @subpackage Git\TagList
 */
class GitPHP_TagListLoad_Raw extends GitPHP_RefListLoad_Raw implements GitPHP_TagListLoadStrategy_Interface
{
        /**
         * Loads the tag list
         *
         * @param GitPHP_TagList $tagList tag list
         * @return array array of tag hashes
         */
        public function Load($tagList)
        {
                $tags = $this->GetRefs($tagList, 'tags');
                $commits = array();
                $objManager = $tagList->GetProject()->GetObjectManager();
                foreach ($tags as $tag => $tagHash) {
                        $tagObj = $objManager->GetTag($tag, $tagHash);
                        $commitHash = $tagObj->GetCommitHash();
                        if (!empty($commitHash)) {
                                $commits[$tag] = $commitHash;
                        }
                }
                return array($tags, $commits);
        }
 
        /**
         * Loads sorted tags
         *
         * @param GitPHP_TagList $tagList tag list
         * @param string $order list order
         * @param integer $count number to load
         * @param integer $skip number to skip
         */
        public function LoadOrdered($tagList, $order, $count = 0, $skip = 0)
        {
                if (!$tagList)
                        return;
 
                if (empty($order))
                        return;
 
                $tags = $tagList->GetTags();
 
                /* TODO add different orders */
                if ($order == '-creatordate') {
                        @usort($tags, array('GitPHP_Tag', 'CompareCreationEpoch'));
                }
 
                if ((($count > 0) && (count($tags) > $count)) || ($skip > 0)) {
                        if ($count > 0)
                                $tags = array_slice($tags, $skip, $count);
                        else
                                $tags = array_slice($tags, $skip);
                }
 
                return $tags;
        }
}
 
comments