$this->_addHook('scm_gather_stats');
$this->_addHook('widget_instance', 'myPageBox', false);
$this->_addHook('widgets', 'widgets', false);
+ $this->_addHook('activity');
$this->register();
}
$user_id = db_result($result,$i,'user_id');
$user_name = db_result($result,$i,'user_name');
$real_name = db_result($result,$i,'realname');
- $b .= '<tt>git clone '.util_make_url('/anonscm/git/'.$project->getUnixName().'/users/'.$user_name.'.git').'</tt> ('.util_make_link_u ($user_name, $user_id, $real_name).')<br />';
+ $b .= '<tt>git clone '.util_make_url('/anonscm/git/'.$project->getUnixName().'/users/'.$user_name.'.git').'</tt> ('.util_make_link_u ($user_name, $user_id, $real_name).') ['.util_make_link('/scm/browser.php?group_id='.$project->getID().'&user_id='.$user_id, _('Browse Git Repository')).']<br />';
}
$b .= '</p>';
}
if (session_loggedin()) {
$u = user_get_object(user_getid());
$d = $u->getUnixName();
+ $validSetup = 0;
+ $b = '';
if (forge_get_config('use_ssh', 'scmgit')) {
- $b = '<h2>';
+ $b .= '<h2>';
$b .= _('Developer Git Access via SSH');
$b .= '</h2>';
$b .= '<p>';
$b .= _('Only project developers can access the Git tree via this method. SSH must be installed on your client machine. Enter your site password when prompted.');
$b .= '</p>';
$b .= '<p><tt>git clone git+ssh://'.$d.'@' . $this->getBoxForProject($project) . '/'. forge_get_config('repos_path', 'scmgit') .'/'. $project->getUnixName() .'/'. $project->getUnixName() .'.git</tt></p>' ;
- } elseif (forge_get_config('use_dav', 'scmgit')) {
+ $validSetup = 1;
+ }
+ if (forge_get_config('use_dav', 'scmgit')) {
$protocol = forge_get_config('use_ssl', 'scmgit')? 'https' : 'http';
- $b = '<h2>';
+ $b .= '<h2>';
$b .= _('Developer Git Access via HTTP');
$b .= '</h2>';
$b .= '<p>';
$b .= _('Only project developers can access the Git tree via this method. Enter your site password when prompted.');
$b .= '</p>';
$b .= '<p><tt>git clone '.$protocol.'://'.$d.'@' . $this->getBoxForProject($project) . '/'. forge_get_config('scm_root', 'scmgit') .'/'. $project->getUnixName() .'/'. $project->getUnixName() .'.git</tt></p>' ;
- } else {
+ $validSetup = 1;
+ }
+ if ($validSetup == 0) {
$b = '<p class="warning">'._('Missing configuration for access in scmgit.ini : use_ssh and use_dav disabled').'</p>';
}
} else {
$b .= _('Only project developers can access the Git tree via this method. SSH must be installed on your client machine. Substitute <i>developername</i> with the proper value. Enter your site password when prompted.');
$b .= '</p>';
$b .= '<p><tt>git clone git+ssh://<i>'._('developername').'</i>@' . $this->getBoxForProject($project) . '/'. forge_get_config('repos_path', 'scmgit') .'/'. $project->getUnixName() .'/'. $project->getUnixName() .'.git</tt></p>' ;
- } elseif (forge_get_config('use_dav', 'scmgit')) {
+ }
+ if (forge_get_config('use_dav', 'scmgit')) {
$protocol = forge_get_config('use_ssl', 'scmgit')? 'https' : 'http';
$b = '<h2>';
$b .= _('Developer Git Access via HTTP');
}
if ($project->usesPlugin($this->name)) {
- if ($this->browserDisplayable($project)) {
+ if ($params['user_id']) {
+ $user = user_get_object($params['user_id']);
+ echo $project->getUnixName().'/users/'.$user->getUnixName();
+ print '<iframe src="'.util_make_url("/plugins/scmgit/cgi-bin/gitweb.cgi?p=".$project->getUnixName().'/users/'.$user->getUnixName().'.git').'" frameborder="0" width=100% height=700></iframe>' ;
+ } else if ($this->browserDisplayable($project)) {
print '<iframe src="'.util_make_url("/plugins/scmgit/cgi-bin/gitweb.cgi?p=".$project->getUnixName().'/'.$project->getUnixName().'.git').'" frameborder="0" width=100% height=700></iframe>' ;
}
}
return false ;
}
- if (! $project->usesPlugin ($this->name)) {
+ if (! $project->usesPlugin($this->name)) {
return false;
}
$project_name = $project->getUnixName();
- $root = forge_get_config('repos_path', 'scmgit') . '/' . $project_name ;
- system ("mkdir -p $root");
+ $root = forge_get_config('repos_path', 'scmgit') . '/' . $project_name;
+ if (!is_dir($root)) {
+ system("mkdir -p $root");
+ }
$output = '';
$main_repo = $root . '/' . $project_name . '.git' ;
- if (!is_file ("$main_repo/HEAD") && !is_dir("$main_repo/objects") && !is_dir("$main_repo/refs")) {
- exec ("GIT_DIR=\"$main_repo\" git init --bare --shared=group", $result) ;
+ if (!is_file("$main_repo/HEAD") && !is_dir("$main_repo/objects") && !is_dir("$main_repo/refs")) {
+ exec("GIT_DIR=\"$main_repo\" git init --bare --shared=group", $result) ;
$output .= join("<br />", $result);
$result = '';
- exec ("GIT_DIR=\"$main_repo\" git update-server-info", $result) ;
+ exec("GIT_DIR=\"$main_repo\" git update-server-info", $result) ;
$output .= join("<br />", $result);
- if (is_file ("$main_repo/hooks/post-update.sample")) {
- rename ("$main_repo/hooks/post-update.sample",
- "$main_repo/hooks/post-update") ;
+ if (is_file("$main_repo/hooks/post-update.sample")) {
+ rename("$main_repo/hooks/post-update.sample",
+ "$main_repo/hooks/post-update");
}
- if (!is_file ("$main_repo/hooks/post-update")) {
- $f = fopen ("$main_repo/hooks/post-update") ;
- fwrite ($f, "exec git-update-server-info\n") ;
- fclose ($f) ;
+ if (!is_file("$main_repo/hooks/post-update")) {
+ $f = fopen("$main_repo/hooks/post-update");
+ fwrite($f, "exec git-update-server-info\n");
+ fclose($f);
}
if (is_file ("$main_repo/hooks/post-update")) {
system ("chmod +x $main_repo/hooks/post-update") ;
$params['instance'] = new scmgit_Widget_MyRepositories(WidgetLayoutManager::OWNER_TYPE_USER, $user->getId());
}
}
+
+ function weekly(&$params) {
+ $res = db_query_params('SELECT group_id FROM groups WHERE status=$1 AND use_scm=1 ORDER BY group_id DESC',
+ array ('A'));
+ if (!$res) {
+ $params['output'] .= 'ScmGit Plugin: Unable to get list of projects using SCM: '.db_error();
+ return false;
+ }
+
+ $params['output'] .= 'ScmGit Plugin: Running "git gc --quiet" on '.db_numrows($res).' repositories.'."\n";
+ while ($row = db_fetch_array($res)) {
+ $project = group_get_object($row['group_id']);
+ if (!$project || !is_object($project)) {
+ continue;
+ } elseif ($project->isError()) {
+ continue;
+ }
+ if (!$project->usesPlugin($this->name)) {
+ continue;
+ }
+
+ $project_name = $project->getUnixName();
+ $repo = forge_get_config('repos_path', 'scmgit') . '/' . $project_name . '/' . $project_name .'.git';
+ if (is_dir($repo)) {
+ chdir($repo);
+ $params['output'] .= $project_name.': '.`git gc --quiet 2>&1`;
+ }
+ }
+ }
+
+ function activity($params) {
+ $group_id = $params['group'];
+ $project = group_get_object($group_id);
+ if (! $project->usesPlugin($this->name)) {
+ return false;
+ }
+ if (in_array('scm', $params['show'])) {
+ $start_time = $params['begin'];
+ $end_time = $params['end'];
+ $repo = forge_get_config('repos_path', 'scmgit') . '/' . $project->getUnixName() . '/' . $project->getUnixName() . '.git';
+ $pipe = popen("GIT_DIR=\"$repo\" git log --date=raw --since=@$start_time --until=@$end_time --all --pretty='format:%ad||%an||%s||%h' --name-status", 'r' );
+ while (!feof($pipe) && $data = fgets($pipe)) {
+ $line = trim($data);
+ $splitedLine = explode('||', $line);
+ if (sizeof($splitedLine) == 4) {
+ $result = array();
+ $result['section'] = 'scm';
+ $result['group_id'] = $group_id;
+ $result['ref_id'] = 'browser.php?group_id='.$group_id;
+ $result['description'] = $splitedLine[2].' (commit '.$splitedLine[3].')';
+ $result['realname'] = '';
+ $splitedDate = explode(' ', $splitedLine[0]);
+ $result['activity_date'] = $splitedDate[0];
+ $result['subref_id'] = '';
+ $params['results'][] = $result;
+ }
+ }
+ }
+ $params['ids'][] = 'scm';
+ $params['texts'][] = _('SCM Git Commits');
+ return true;
+ }
}
// Local Variables: