Started on issue 544, extended commit details
* Scm.php: new SCM method "getChanges" which returns all available change information grouped by type * Monotone.php: implement getChanges via get_revision * <other scms>: rename "changes" member for getCommit to "diff" which matches better * Source.php: query the commit's changes and set them in the template * commit.html: render the changes, type-by-type. Link to the tree or the individual diff if applicable * styles.css: some initial style sheet work
This commit is contained in:
@@ -431,10 +431,10 @@ class IDF_Scm_Git extends IDF_Scm
|
||||
}
|
||||
}
|
||||
$out = self::parseLog($log);
|
||||
$out[0]->changes = implode("\n", $change);
|
||||
$out[0]->diff = implode("\n", $change);
|
||||
} else {
|
||||
$out = self::parseLog($out);
|
||||
$out[0]->changes = '';
|
||||
$out[0]->diff = '';
|
||||
}
|
||||
|
||||
$out[0]->branch = implode(', ', $this->inBranches($commit, null));
|
||||
|
@@ -359,7 +359,7 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
||||
}
|
||||
}
|
||||
$out = self::parseLog($log, 6);
|
||||
$out[0]->changes = implode("\n", $change);
|
||||
$out[0]->diff = implode("\n", $change);
|
||||
return $out[0];
|
||||
}
|
||||
|
||||
|
@@ -599,6 +599,75 @@ class IDF_Scm_Monotone extends IDF_Scm
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see IDF_Scm::getChanges()
|
||||
*/
|
||||
public function getChanges($commit)
|
||||
{
|
||||
$revs = $this->_resolveSelector($commit);
|
||||
if (count($revs) == 0)
|
||||
return null;
|
||||
|
||||
$revision = $revs[0];
|
||||
$out = $this->stdio->exec(array('get_revision', $revision));
|
||||
$stanzas = IDF_Scm_Monotone_BasicIO::parse($out);
|
||||
|
||||
$return = (object) array(
|
||||
'additions' => array(),
|
||||
'deletions' => array(),
|
||||
'renames' => array(),
|
||||
'patches' => array(),
|
||||
'properties' => array(),
|
||||
);
|
||||
|
||||
foreach ($stanzas as $stanza) {
|
||||
if ($stanza[0]['key'] == 'format_version' ||
|
||||
$stanza[0]['key'] == 'old_revision' ||
|
||||
$stanza[0]['key'] == 'new_manifest')
|
||||
continue;
|
||||
|
||||
if ($stanza[0]['key'] == 'add_file' ||
|
||||
$stanza[0]['key'] == 'add_dir') {
|
||||
$return->additions[] = $stanza[0]['values'][0];
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($stanza[0]['key'] == 'delete') {
|
||||
$return->deletions[] = $stanza[0]['values'][0];
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($stanza[0]['key'] == 'rename') {
|
||||
$return->renames[$stanza[0]['values'][0]] =
|
||||
$stanza[1]['values'][0];
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($stanza[0]['key'] == 'patch') {
|
||||
$return->patches[] = $stanza[0]['values'][0];
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($stanza[0]['key'] == 'clear' ||
|
||||
$stanza[0]['key'] == 'set') {
|
||||
|
||||
$filename = $stanza[0]['values'][0];
|
||||
if (!array_key_exists($filename, $return->properties)) {
|
||||
$return->properties[$filename] = array();
|
||||
}
|
||||
$key = $stanza[1]['values'][0];
|
||||
$value = null;
|
||||
if (isset($stanza[2])) {
|
||||
$value = $stanza[2]['values'][0];
|
||||
}
|
||||
$return->properties[$filename][$key] = $value;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see IDF_Scm::getCommit()
|
||||
*/
|
||||
@@ -626,7 +695,7 @@ class IDF_Scm_Monotone extends IDF_Scm
|
||||
$res['branch'] = implode(', ', $certs['branch']);
|
||||
$res['commit'] = $revs[0];
|
||||
|
||||
$res['changes'] = ($getdiff) ? $this->_getDiff($revs[0]) : '';
|
||||
$res['diff'] = ($getdiff) ? $this->_getDiff($revs[0]) : '';
|
||||
|
||||
return (object) $res;
|
||||
}
|
||||
|
@@ -414,7 +414,7 @@ class IDF_Scm_Svn extends IDF_Scm
|
||||
$res['date'] = gmdate('Y-m-d H:i:s', strtotime((string) $xml->logentry->date));
|
||||
$res['title'] = (string) $xml->logentry->msg;
|
||||
$res['commit'] = (string) $xml->logentry['revision'];
|
||||
$res['changes'] = ($getdiff) ? $this->getDiff($commit) : '';
|
||||
$res['diff'] = ($getdiff) ? $this->getDiff($commit) : '';
|
||||
$res['tree'] = '';
|
||||
$res['branch'] = '';
|
||||
return (object) $res;
|
||||
|
Reference in New Issue
Block a user