From 5c827b63bdd312cefc8bf5391aa1880f6b177246 Mon Sep 17 00:00:00 2001 From: caoyanyi Date: Fri, 22 Dec 2023 16:57:47 +0800 Subject: [PATCH] * Adjust convertLog method for git and svn sync. --- module/git/control.php | 4 +++- module/git/model.php | 8 +++++--- module/svn/control.php | 3 ++- module/svn/model.php | 45 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 5 deletions(-) diff --git a/module/git/control.php b/module/git/control.php index 6e81f85fd2..05f7b32d42 100644 --- a/module/git/control.php +++ b/module/git/control.php @@ -127,9 +127,11 @@ class git extends control } $logs[$i][] = $line; } + foreach($logs as $log) { - $parsedLogs[] = $this->git->convertLog($log); + $log = $this->git->convertLog($log); + if($log) $parsedLogs[] = $log; } $this->loadModel('repo'); diff --git a/module/git/model.php b/module/git/model.php index 9b37fb6751..dc1d2fa06e 100644 --- a/module/git/model.php +++ b/module/git/model.php @@ -367,12 +367,14 @@ class gitModel extends model * 将日志从xml格式转换为对象。 * Convert log from xml format to object. * - * @param object $log + * @param array $log * @access public - * @return object + * @return object|null */ - public function convertLog(object $log): object + public function convertLog(array $log): object|null { + if(empty($log)) return null; + list($hash, $account, $date) = $log; $account = preg_replace('/^Author:/', '', $account); diff --git a/module/svn/control.php b/module/svn/control.php index 1ee76215e9..da7f83ee37 100644 --- a/module/svn/control.php +++ b/module/svn/control.php @@ -109,7 +109,8 @@ class svn extends control $logs = simplexml_load_string($logs); foreach($logs->logentry as $entry) { - $parsedLogs[] = $this->svn->convertLog($entry); + $log = $this->svn->convertLog($entry); + if($log) $parsedLogs[] = $log; } $this->loadModel('repo'); diff --git a/module/svn/model.php b/module/svn/model.php index d33e8372e0..ff4f884c1e 100644 --- a/module/svn/model.php +++ b/module/svn/model.php @@ -435,4 +435,49 @@ class svnModel extends model { echo helper::now() . " $log\n"; } + + /** + * 将日志从xml格式转换为对象。 + * Convert log from xml format to object. + * + * @param array $log + * @access public + * @return object|null + */ + public function convertLog(array $log): object|null + { + if(empty($log)) return null; + + list($hash, $account, $date) = $log; + + $account = preg_replace('/^Author:/', '', $account); + $account = trim(preg_replace('/<[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_\-\.]+>/', '', $account)); + $date = trim(preg_replace('/^Date:/', '', $date)); + + $count = count($log); + $comment = ''; + $files = array(); + for($i = 3; $i < $count; $i++) + { + $line = $log[$i]; + if(preg_match('/^\s{2,}/', $line)) + { + $comment .= $line; + } + elseif(strpos($line, "\t") !== false) + { + list($action, $entry) = explode("\t", $line); + $entry = '/' . trim($entry); + $files[$action][] = $entry; + } + } + $parsedLog = new stdClass(); + $parsedLog->author = $account; + $parsedLog->revision = trim(preg_replace('/^commit/', '', $hash)); + $parsedLog->msg = trim($comment); + $parsedLog->date = date('Y-m-d H:i:s', strtotime($date)); + $parsedLog->files = $files; + + return $parsedLog; + } }