diff --git a/module/action/lang/en.php b/module/action/lang/en.php index bd3da97934..0b31cec48c 100644 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -89,6 +89,7 @@ $lang->action->desc->editestimate = '$date, $actor edited wor $lang->action->desc->deleteestimate = '$date, $actor deleted working hours'; $lang->action->desc->canceled = '$date, canceled by $actor.'; $lang->action->desc->svncommited = '$date, $actor commited to svn,revision is #$extra.' . "\n"; +$lang->action->desc->gitcommited = '$date, $actor commited to git,revision is #$extra.' . "\n"; $lang->action->desc->finished = '$date, finished by $actor.'; $lang->action->desc->diff1 = 'changed %s, old is "%s", new is "%s".
'; $lang->action->desc->diff2 = 'changed %s, the diff is:' . "\n" . "
%s
" . "\n"; @@ -119,6 +120,7 @@ $lang->action->label->tostory = 'converted to story'; $lang->action->label->frombug = 'converted from bug'; $lang->action->label->totask = 'converted to task'; $lang->action->label->svncommited = 'commited code'; +$lang->action->label->gitcommited = 'commited code'; $lang->action->label->linked2plan = 'link to plan'; $lang->action->label->unlinkedfromplan = 'unlink from plan'; $lang->action->label->marked = 'edited'; @@ -191,6 +193,7 @@ $lang->action->search->label['tostory'] = $lang->action->label->tost $lang->action->search->label['frombug'] = $lang->action->label->frombug; $lang->action->search->label['totask'] = $lang->action->label->totask; $lang->action->search->label['svncommited'] = $lang->action->label->svncommited; +$lang->action->search->label['gitcommited'] = $lang->action->label->gitcommited; $lang->action->search->label['linked2plan'] = $lang->action->label->linked2plan; $lang->action->search->label['unlinkedfromplan'] = $lang->action->label->unlinkedfromplan; $lang->action->search->label['linked2project'] = $lang->action->label->linked2project; diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index 4fdb662e10..005c695edf 100644 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -89,6 +89,7 @@ $lang->action->desc->editestimate = '$date, 由 $actor 编辑 $lang->action->desc->deleteestimate = '$date, 由 $actor 删除工时。'; $lang->action->desc->canceled = '$date, 由 $actor 取消。' . "\n"; $lang->action->desc->svncommited = '$date, 由 $actor 提交代码,版本为#$extra。' . "\n"; +$lang->action->desc->gitcommited = '$date, 由 $actor 提交代码,版本为#$extra。' . "\n"; $lang->action->desc->finished = '$date, 由 $actor 完成。' . "\n"; $lang->action->desc->diff1 = '修改了 %s,旧值为 "%s",新值为 "%s"。
' . "\n"; $lang->action->desc->diff2 = '修改了 %s,区别为:' . "\n" . "
%s
" . "\n"; @@ -119,6 +120,7 @@ $lang->action->label->tostory = '转需求'; $lang->action->label->frombug = '转需求'; $lang->action->label->totask = '转任务'; $lang->action->label->svncommited = '提交代码'; +$lang->action->label->gitcommited = '提交代码'; $lang->action->label->linked2plan = '关联计划'; $lang->action->label->unlinkedfromplan = '移除计划'; $lang->action->label->marked = '编辑了'; @@ -191,6 +193,7 @@ $lang->action->search->label['tostory'] = $lang->action->label->tost $lang->action->search->label['frombug'] = $lang->action->label->frombug; $lang->action->search->label['totask'] = $lang->action->label->totask; $lang->action->search->label['svncommited'] = $lang->action->label->svncommited; +$lang->action->search->label['gitcommited'] = $lang->action->label->gitcommited; $lang->action->search->label['linked2plan'] = $lang->action->label->linked2plan; $lang->action->search->label['unlinkedfromplan'] = $lang->action->label->unlinkedfromplan; $lang->action->search->label['linked2project'] = $lang->action->label->linked2project; diff --git a/module/action/model.php b/module/action/model.php index c110ac5bb0..412afa561e 100644 --- a/module/action/model.php +++ b/module/action/model.php @@ -193,6 +193,7 @@ class actionModel extends model foreach($actions as $actionID => $action) { if(strtolower($action->action) == 'svncommited' and isset($commiters[$action->actor])) $action->actor = $commiters[$action->actor]; + if(strtolower($action->action) == 'gitcommited' and isset($commiters[$action->actor])) $action->actor = $commiters[$action->actor]; $action->history = isset($histories[$actionID]) ? $histories[$actionID] : array(); $actions[$actionID] = $action; } @@ -605,7 +606,7 @@ class actionModel extends model if($history->diff != '') { $history->diff = str_replace(array('', '', '', ''), array('[ins]', '[/ins]', '[del]', '[/del]'), $history->diff); - $history->diff = $history->field != 'subversion' ? htmlspecialchars($history->diff) : $history->diff; // Keep the diff link. + $history->diff = ($history->field != 'subversion' and $history->field != 'git') ? htmlspecialchars($history->diff) : $history->diff; // Keep the diff link. $history->diff = str_replace(array('[ins]', '[/ins]', '[del]', '[/del]'), array('', '', '', ''), $history->diff); $history->diff = nl2br($history->diff); $history->noTagDiff = preg_replace('/<\/?([a-z][a-z0-9]*)[^\/]*\/?>/Ui', '', $history->diff); diff --git a/module/git/control.php b/module/git/control.php index 16b0885e45..55ada5053f 100644 --- a/module/git/control.php +++ b/module/git/control.php @@ -32,7 +32,7 @@ class git extends control */ public function diff($path, $revision) { - $url = helper::safe64Decode($path); + $path = helper::safe64Decode($path); $this->view->url = $path; $this->view->revision = $revision; $this->view->diff = $this->git->diff($path, $revision); @@ -50,7 +50,7 @@ class git extends control */ public function cat($path, $revision) { - $url = helper::safe64Decode($url); + $path = helper::safe64Decode($path); $this->view->path = $path; $this->view->revision = $revision; $this->view->code = $this->git->cat($path, $revision); @@ -69,12 +69,24 @@ class git extends control if($this->post->logs) { $repoRoot = $this->post->repoRoot; - $logs = stripslashes($this->post->logs); - $logs = simplexml_load_string($logs); - foreach($logs->logentry as $entry) + $list = json_decode($this->post->logs); + + $logs = array(); + $i = 0; + foreach($list as $line) { - $parsedLogs[] = $this->git->convertLog($entry); + if(!$line) + { + $i++; + continue; + } + $logs[$i][] = $line; } + foreach($logs as $log) + { + $parsedLogs[] = $this->convertLog($log); + } + $parsedObjects = array('stories' => array(), 'tasks' => array(), 'bugs' => array()); foreach($parsedLogs as $log) { diff --git a/module/git/model.php b/module/git/model.php index 88b6d3616a..f0bdcd2218 100644 --- a/module/git/model.php +++ b/module/git/model.php @@ -98,6 +98,7 @@ class gitModel extends model $this->printLog("get " . count($logs) . " logs"); $this->printLog('begin parsing logs'); + $latestRevision = $logs[0]->revision; foreach($logs as $log) { $this->printLog("parsing log {$log->revision}"); @@ -112,7 +113,7 @@ class gitModel extends model if($objects) { $this->printLog('extract' . - 'story:' . join(' ', $objects['stories']) . + ' story:' . join(' ', $objects['stories']) . ' task:' . join(' ', $objects['tasks']) . ' bug:' . join(',', $objects['bugs'])); @@ -122,10 +123,10 @@ class gitModel extends model { $this->printLog('no objects found' . "\n"); } - if($log->revision > $savedRevision) $savedRevision = $log->revision; } - $this->saveLastRevision($savedRevision); - $this->printLog("save revision $savedRevision"); + + $this->saveLastRevision($latestRevision); + $this->printLog("save revision $latestRevision"); $this->deleteRestartFile(); $this->printLog("\n\nrepo $name finished"); } @@ -243,15 +244,16 @@ class gitModel extends model /* The git log command. */ if($fromRevision) { - $cmd = "cd $this->repoRoot; $this->client log --stat -r $fromRevision:HEAD --pretty=format:%an*_*%cd*_*%H*_*%s"; + $cmd = "cd $this->repoRoot; $this->client log --stat $fromRevision..HEAD --pretty=format:%an*_*%cd*_*%H*_*%s"; } else { $cmd = "cd $this->repoRoot; $this->client log --stat --pretty=format:%an*_*%cd*_*%H*_*%s"; } - exec($cmd, $list); + exec($cmd, $list, $return); - if(!$list) die("Some error occers: \nThe command is $cmd\n"); + if(!$list and $return) die("Some error occers: \nThe command is $cmd\n"); + if(!$list and !$return) exit; /* Process logs. */ $logs = array(); @@ -296,7 +298,7 @@ class gitModel extends model { if(strpos($change, '|') === false) continue; list($entry, $modify) = explode('|', $change); - $entry = trim($entry); + $entry = '/' . trim($entry); $parsedLog->files['M'][] = $entry; } @@ -378,7 +380,7 @@ class gitModel extends model $path = str_replace('%2F', '/', urlencode($path)); $path = str_replace('%3A', ':', $path); - $cmd = $this->client . " diff $revision^ $revision $url"; + $cmd = "cd $repo->path;$this->client diff $revision^ $revision $path"; $diff = `$cmd`; return $diff; } @@ -403,7 +405,8 @@ class gitModel extends model $path = str_replace('%2F', '/', urlencode($path)); $path = str_replace('%3A', ':', $path); - $cmd = $this->client . " show -r $revision $path"; + $subPath = substr($path, strlen($repo->path) + 1); + $cmd = "cd $repo->path;$this->client show $revision:$subPath"; $code = `$cmd`; return $code; } @@ -437,7 +440,7 @@ class gitModel extends model $action->action = 'gitcommited'; $action->date = $log->date; $action->comment = $this->iconvComment($log->msg); - $action->extra = $log->revision; + $action->extra = substr($log->revision, 0, 10); $changes = $this->createActionChanges($log, $repoRoot); @@ -559,7 +562,7 @@ class gitModel extends model $diff .= $action == 'M' ? "$diffLink\n" : "\n" ; } } - $changes->field = 'subversion'; + $changes->field = 'git'; $changes->old = ''; $changes->new = ''; $changes->diff = trim($diff); @@ -629,7 +632,7 @@ class gitModel extends model { if(!file_exists($this->logFile)) return 0; if(file_exists($this->restartFile)) return 0; - return (int)trim(file_get_contents($this->logFile)); + return trim(file_get_contents($this->logFile)); } /** diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 51e0a689a3..702e0454c6 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -46,13 +46,14 @@ $lang->moduleOrder[125] = 'action'; $lang->moduleOrder[130] = 'mail'; $lang->moduleOrder[135] = 'svn'; -$lang->moduleOrder[140] = 'search'; -$lang->moduleOrder[145] = 'tree'; -$lang->moduleOrder[150] = 'api'; -$lang->moduleOrder[155] = 'file'; -$lang->moduleOrder[160] = 'misc'; -$lang->moduleOrder[165] = 'sso'; -$lang->moduleOrder[170] = 'webapp'; +$lang->moduleOrder[140] = 'git'; +$lang->moduleOrder[145] = 'search'; +$lang->moduleOrder[150] = 'tree'; +$lang->moduleOrder[155] = 'api'; +$lang->moduleOrder[160] = 'file'; +$lang->moduleOrder[165] = 'misc'; +$lang->moduleOrder[170] = 'sso'; +$lang->moduleOrder[175] = 'webapp'; $lang->resource = new stdclass(); @@ -513,6 +514,16 @@ $lang->svn->methodOrder[5] = 'diff'; $lang->svn->methodOrder[10] = 'cat'; $lang->svn->methodOrder[15] = 'apiSync'; +/* Git. */ +$lang->resource->git = new stdclass(); +$lang->resource->git->diff = 'diff'; +$lang->resource->git->cat = 'cat'; +$lang->resource->git->apiSync = 'apiSync'; + +$lang->git->methodOrder[5] = 'diff'; +$lang->git->methodOrder[10] = 'cat'; +$lang->git->methodOrder[15] = 'apiSync'; + /* Company. */ $lang->resource->company = new stdclass(); $lang->resource->company->index = 'index';