From: Stricted Date: Thu, 7 Nov 2013 08:42:44 +0000 (+0100) Subject: add GIT class X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=9e72965e4e7629e77ae0e4960070a2b8b08f729a;p=Snippets.git add GIT class --- diff --git a/git.class.php b/git.class.php new file mode 100644 index 0000000..6835589 --- /dev/null +++ b/git.class.php @@ -0,0 +1,155 @@ +. + */ +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