add GIT class
authorStricted <info@nexus-irc.de>
Thu, 7 Nov 2013 08:42:44 +0000 (09:42 +0100)
committerStricted <info@nexus-irc.de>
Thu, 7 Nov 2013 10:08:59 +0000 (11:08 +0100)
git.class.php [new file with mode: 0644]

diff --git a/git.class.php b/git.class.php
new file mode 100644 (file)
index 0000000..6835589
--- /dev/null
@@ -0,0 +1,155 @@
+<?php
+/* git.class.php
+ * Copyright (C) 2013  Jan Altensen (Stricted)
+ * http://stricted.de/
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License 
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. 
+ */
+class git {
+       /**
+        * parse all commits from repo
+        *
+        * @param       string  $repo
+        * @param       int             $count
+        * @param       string  $branch
+        * @return      array
+        */
+       public function get_commits ($repo, $count = -1, $branch = "master") {
+               $data = array();
+               if(!$data) {
+                       $cmd = "git --git-dir=".$repo." rev-list --header --max-count=".$count." ".$branch." ";
+                       $rev_list = shell_exec($cmd);
+                       foreach(explode("\000", $rev_list) as $rev) {
+                               $commit = array();
+                               $rev_lines = explode("\n", str_replace("\r", "", $rev));
+                               $commit['id'] = $rev_lines[0];
+                               foreach($rev_lines as $rev_line) {
+                                       if(substr($rev_line, 0, 4) == "    ") {
+                                               if(isset($commit['text'])) {
+                                                       $commit['text'] .= "\n".substr($rev_line, 4);
+                                               } else
+                                                       $commit['text'] = substr($rev_line, 4);
+                                       } else {
+                                               $opt = explode(" ", $rev_line);
+                                               if($opt[0] == "tree") {
+                                                       $commit['tree'] = $opt[1];
+                                               } else if($opt[0] == "parent") {
+                                                       $commit['parent'][] = $opt[1];
+                                               } else if($opt[0] == "author") {
+                                                       $commit['author'] = $opt[1];
+                                                       $commit['author_mail'] = $opt[2];
+                                                       $commit['author_time'] = $opt[3];
+                                               } else if($opt[0] == "committer") {
+                                                       $commit['committer'] = $opt[1];
+                                                       $commit['committer_mail'] = $opt[2];
+                                                       $commit['committer_time'] = $this->get_age($opt[3]);
+                                               }
+                                       }
+                               }
+                               $data[] = $commit;
+                       }
+               }
+               return $data;
+       }
+       
+       /**
+        * get latest commit hash
+        *
+        * @param       string  $repo
+        * @param       string  $branch
+        * @raturn      string
+        */
+       public function get_hash ($repo, $branch = "master") {
+               $hash = shell_exec('git --git-dir='.$repo.' rev-list -n 1 --pretty="format:%h" --header '.$branch.' | grep "^[0-9a-f]*$"');
+               $hash = str_replace("\r","",str_replace("\n","",$hash));
+               return $hash;
+       }
+       
+       /**
+        * get commit count
+        *
+        * @param       string  $repo
+        * @param       string  $branch
+        * @raturn      string
+        */
+       public function get_count ($repo, $branch = "master") {
+               $count = shell_exec('git --git-dir='.$repo.' rev-list --oneline --first-parent --header '.$branch.' | wc -l | sed "s/[ \t]//g"');
+               $count = str_replace("\r","",str_replace("\n","",$count));
+               return $count;
+       }
+       
+       /**
+        * get commit version
+        *
+        * @param       string  $repo
+        * @param       string  $branch
+        * @raturn      string
+        */
+       public function get_version ($repo, $branch = "master") {
+               return "git-".$this->get_count($repo, $branch)."-".$this->get_hash($repo, $branch);
+       }
+       
+       /**
+        * get commit age
+        *
+        * @param       string  $age
+        * @raturn      string
+        */
+       public function get_age($age) {
+               $age= time() - $age;
+               if ($age > 60*60*24*365*2) {
+                       $age_str = floor($age/60/60/24/365);
+                       $age_str .= " years ago";
+               } else if ($age > 60*60*24*(365/12)*2) {
+                       $age_str = floor($age/60/60/24/(365/12));
+                       $age_str .= " months ago";
+               } else if ($age > 60*60*24*7*2) {
+                       $age_str = floor($age/60/60/24/7);
+                       $age_str .= " weeks ago";
+               } else if ($age > 60*60*24*2) {
+                       $age_str = floor($age/60/60/24);
+                       $age_str .= " days ago";
+               } else if ($age > 60*60*2) {
+                       $age_str = floor($age/60/60);
+                       $age_str .= " hours ago";
+               } else if ($age > 60*2) {
+                       $age_str = floor($age/60);
+                       $age_str .= " min ago";
+               } else if ($age > 2) {
+                       $age_str = $age;
+                       $age_str .= " sec ago";
+               } else {
+                       $age_str = "right now";
+               }
+               return $age_str;
+       }
+       
+       /**
+        * get repo list from projects.list file
+        *
+        * @param       string  $path
+        * @raturn      array
+        */
+       public function get_repos ($path) {
+               $repo_list = file_get_contents($path);
+               $repo_list = explode("\n", $repo_list);
+               $data = array();
+               foreach($repo_list as $id => $repo) {
+                       $test = explode(" ",$repo);
+                       $data[] = $test[0];
+               }
+               return $data;
+       }
+}
+?>
\ No newline at end of file