X-Git-Url: http://git.pk910.de/?p=phpgitweb.git;a=blobdiff_plain;f=htdocs%2Fpages%2Fcommit.class.php;fp=htdocs%2Fpages%2Fcommit.class.php;h=55ece54f49056402c5b6b5718c11dc8ed563e071;hp=57f20e5d8b18def5b68871a9bd58e9595cc67956;hb=780b7fde2894a42749ac292fa3d180147afeff1a;hpb=a2a32a9c8fe1f0f5f378ed53090dc5f957c092af diff --git a/htdocs/pages/commit.class.php b/htdocs/pages/commit.class.php index 57f20e5..55ece54 100644 --- a/htdocs/pages/commit.class.php +++ b/htdocs/pages/commit.class.php @@ -16,168 +16,6 @@ * along with this program. If not, see . */ -class difftree { - private $difftree_data = null; - - public function push_difftree_data($data) { - $this->difftree_data = $data; - } - - public function generate_difftree($project, $commit, $patch_link) { - $difftree = new ContentProvider('commit', 'difftree'); - if($this->difftree_data) - $tree = $this->difftree_data; - else - $tree = GitCommand::get_commit_changes($project['path'], $commit['id'], $commit['parent']); - $entry_count = 0; - if(count($commit['parent']) > 1) - $difftree->set('class', ' combined'); - else - $difftree->set('class', ''); - $difftree->set('tree_count', ''); - foreach($tree as $entry) { - $entry_count++; - $difftree->append('tree', $this->tree_entry($entry_count, (($entry_count % 2) ? 'dark' : 'light'), $commit, $entry, $patch_link)); - } - if($entry_count == 0) - $difftree->set('tree', ''); - else if($entry_count > 10) - $difftree->set('tree_count', new ContentProvider('commit', 'tree_count', array('count' => $entry_count))); - return $difftree; - } - - private function tree_entry($diffid, $class, $commit, $entry, $patch_link) { - $tree = new ContentProvider('commit', 'tree'); - $tree->set('class', $class); - $tree->set('hash', $commit['id']); - $tree->set('file', $entry['file']); - - if(count($commit['parent']) > 1) { - if(preg_match('/^[0]{40}$/', $entry['to_id'])) //file doesn't exist in the result (child) commit - $tree->set('file', $entry['file']); - else - $tree->set('file', new ContentProvider('commit', 'tree_file_link', array('file' => $entry['file']))); - - $tree->set('specials', ''); - - if($patch_link) - $tree->append('merge', new ContentProvider('commit', 'tree_merge_patch_link', array("patch_marker" => "patch".$diffid))); - - $has_history = false; - $not_deleted = false; - - for($i = 0; $i < count($commit['parent']); $i++) { - $status = $entry['status'][$i]; - $merge = null; - - $has_history = ($has_history || ($status != 'A')); - $not_deleted = ($not_deleted || ($status != 'D')); - - switch($status) { - case 'A': //Added - $merge = new ContentProvider('commit', 'tree_merge_new'); - break; - case 'D': //Deleted - $merge = new ContentProvider('commit', 'tree_merge'); - $merge->set('class', ''); - $blob_link = new ContentProvider('commit', 'tree_merge_blob', array('hash' => $commit['parent'][$i], 'file' => $entry['file'])); - $merge->set('links', array($blob_link, ' | ')); - break; - default: - $merge = new ContentProvider('commit', 'tree_merge'); - if($entry['from_id'][$i] == $entry['to_id']) { - $merge->set('class', ' nochange'); - $merge->set('links', ' | '); - } else { - $merge->set('class', ''); - $merge->set('links', new ContentProvider('commit', 'tree_merge_diff', array('hash' => $commit['id'], 'parent' => $commit['parent'][$i], 'file' => $entry['file'], 'id' => ($i + 1)))); - } - } - $tree->append('merge', $merge); - } - - $tree->set('links', ''); - if($not_deleted) { - $tree->append('links', new ContentProvider('commit', 'tree_merge_blob', array('hash' => $commit['id'], 'file' => $entry['file']))); - if($has_history) - $tree->append('links', ' | '); - } - if($has_history) - $tree->append('links', new ContentProvider('commit', 'tree_merge_history', array('hash' => $commit['id'], 'file' => $entry['file']))); - - } else { - $tree->set('file', new ContentProvider('commit', 'tree_file_link', array('file' => $entry['file']))); - $tree->set('merge', ''); - - $from_type = Tools::get_filetype($entry['from_mode']); - $to_type = Tools::get_filetype($entry['to_mode']); - - $from_mode = (Tools::is_regular_file($entry['from_mode']) ? Tools::get_file_permissions($entry['from_mode']) : null); - $to_mode = (Tools::is_regular_file($entry['to_mode']) ? Tools::get_file_permissions($entry['to_mode']) : null); - - $link_placeholders = array( - "hash" => $commit['id'], - "file" => $entry['file'], - "parent" => (count($commit['parent']) ? $commit['parent'][0] : ""), - ); - if($patch_link) - $tree->append('links', new ContentProvider('commit', 'tree_patch_link', array("patch_marker" => "patch".$diffid))); - - switch($entry['status']) { - case 'A': //Added - $tree->set('specials', new ContentProvider('commit', (Tools::is_regular_file($entry['to_mode']) ? 'tree_new_file' : 'tree_new'), array('type' => $to_type, 'mode' => $to_mode))); - $tree->append('links', new ContentProvider('commit', 'tree_new_links', $link_placeholders)); - break; - case 'D': //Deleted - $tree->set('specials', new ContentProvider('commit', 'tree_deleted', array('type' => $from_type))); - $tree->append('links', new ContentProvider('commit', 'tree_deleted_links', $link_placeholders)); - break; - case 'M': //Modified - case 'T': //Type changed - if($entry['from_mode'] != $entry['to_mode']) { - $modified = new ContentProvider('commit', 'tree_changed'); - $tree->set('specials', $modified); - if($from_type != $to_type) - $modified->append('changes', new ContentProvider('commit', 'tree_changed_type', array('from' => $from_type, 'to' => $to_type))); - if($from_mode != $to_mode && $to_mode) { - if($from_mode) - $modified->append('changes', new ContentProvider('commit', 'tree_changed_mode', array('from' => $from_mode, 'to' => $to_mode))); - else - $modified->append('changes', new ContentProvider('commit', 'tree_changed_mode_to', array('to' => $to_mode))); - } - } else - $tree->set('specials', ''); - if(!$patch_link && $entry['from_id'] != $entry['to_id']) - $tree->append('links', new ContentProvider('commit', 'tree_changed_links_diff', $link_placeholders)); - $tree->append('links', new ContentProvider('commit', 'tree_changed_links', $link_placeholders)); - break; - case 'R': //Renamed - case 'C': //Copied - $actions = array('R' => 'tree_moved', 'C' => 'tree_copied'); - $move = new ContentProvider('commit', $actions[$entry['status']]); - $tree->set('specials', $move); - $tree->set('file', $entry['to_file']); - $move->set('file', $entry['from_file']); - $move->set('hash', $commit['parent'][0]); - $move->set('similarity', $entry['similarity']); - if($from_mode != $to_mode) - $move->set('mode', new ContentProvider('commit', 'tree_moved_mode', array('mode' => $to_mode))); - else - $move->set('mode', ''); - if($entry['from_id'] != $entry['to_id']) - $tree->append('links', new ContentProvider('commit', 'tree_moved_links_diff', $link_placeholders)); - $tree->append('links', new ContentProvider('commit', 'tree_moved_links', $link_placeholders)); - break; - default: - - } - - } - return $tree; - } - -} - class page_commit { private $page, $phpgitweb;