Mercurial log template and parseLog pattern modification.

Added a template for getting a controlled log; in parseLog, changed the regular
expression to match the pattern used in the template (fixes issues 507 and 508).
This commit is contained in:
Matías Halles 2011-03-18 02:47:08 +01:00 committed by Thomas Keller
parent be39d72d3c
commit 5fc3a987de
3 changed files with 16 additions and 7 deletions

View File

@ -14,6 +14,7 @@ Much appreciated contributors (in alphabetical order):
David Feeney
Patrick Georgi <patrick.georgi@coresystems.de>
Ciaran Gultnieks
Matías Halles <matias@halles.cl>
Julien Issler
Jerry <lxb429@gmail.com> - Chinese translation
Benjamin Jorand <benjamin.jorand@gmail.com> - Mercurial support

View File

@ -35,6 +35,7 @@
- Sort the project list by the display name of the project (issue 477)
- Project creation form now has a short description field as well (issue 479)
- Add more file extensions supported by our in-tree prettify version (issues 490 and 567)
- Improve the parsing of hg's log output (issues 507 and 508)
- Do not clean `<ins>` and `<del>` HTML markup from user input (issue 509)
- Improve HTML validation by switching from `strict` to `transitional` DOCTYPE (issue 511)
- Ignore XML parsing problems when trying to retrieve commit messages for svn (issue 518)

View File

@ -27,10 +27,13 @@
*/
class IDF_Scm_Mercurial extends IDF_Scm
{
protected $hg_log_template;
public function __construct($repo, $project=null)
{
$this->repo = $repo;
$this->project = $project;
$this->hg_log_template = "'".'changeset: {rev}:{node|short}\nauthor: {author}\ndate: {date|isodate}\nfiles: {files}\n{desc}\n'."'";
}
public function getRepositorySize()
@ -336,10 +339,14 @@ class IDF_Scm_Mercurial extends IDF_Scm
if (!$this->isValidRevision($commit)) {
return false;
}
$tmpl = ($getdiff) ?
Pluf::f('hg_path', 'hg').' log -p -r %s -R %s' : Pluf::f('hg_path', 'hg').' log -r %s -R %s';
$tmpl = ($getdiff)
? Pluf::f('hg_path', 'hg').' log -p -r %s -R %s --template %s'
: Pluf::f('hg_path', 'hg').' log -r %s -R %s --template %s';
$cmd = sprintf($tmpl,
escapeshellarg($commit), escapeshellarg($this->repo));
escapeshellarg($commit),
escapeshellarg($this->repo),
$this->hg_log_template);
$out = array();
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
self::exec('IDF_Scm_Mercurial::getCommit', $cmd, $out);
@ -356,7 +363,7 @@ class IDF_Scm_Mercurial extends IDF_Scm
$log[] = $line;
}
}
$out = self::parseLog($log, 6);
$out = self::parseLog($log, 4);
$out[0]->diff = implode("\n", $change);
return $out[0];
}
@ -381,11 +388,11 @@ class IDF_Scm_Mercurial extends IDF_Scm
*/
public function getChangeLog($commit='tip', $n=10)
{
$cmd = sprintf(Pluf::f('hg_path', 'hg').' log -R %s -l%s ', escapeshellarg($this->repo), $n, $commit);
$cmd = sprintf(Pluf::f('hg_path', 'hg').' log -R %s -l%s --template %s', escapeshellarg($this->repo), $n, $this->hg_log_template, $commit);
$out = array();
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
self::exec('IDF_Scm_Mercurial::getChangeLog', $cmd, $out);
return self::parseLog($out, 6);
return self::parseLog($out, 4);
}
/**
@ -421,7 +428,7 @@ class IDF_Scm_Mercurial extends IDF_Scm
continue;
}
$match = array();
if (preg_match('/(\S+)\s*:\s*(.*)/', $line, $match)) {
if (preg_match('/^(\S+):\s*(.*)/', $line, $match)) {
$match[1] = strtolower($match[1]);
if ($match[1] == 'user') {
$c['author'] = $match[2];