mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-18 21:02:41 +01:00
Improve Diffusion behavior for SVN file moves
Summary: We just weren't handling these at all reasonably, must have dropped the logic when they got ported. This still isn't perfect: we have some display glitches around file names, so the 'away' part renders as "This file was moved to .". I'll see if I can follow up and fix that, but this resolves the more immediate issue of the interface just not working at all. Test Plan: Moved and copied files in my test repository, verified they rendered somewhat correctly. Reviewed By: jungejason Reviewers: tuomaspelkonen, jungejason, aran CC: aran, jungejason, epriestley Differential Revision: 699
This commit is contained in:
parent
4dc6552af9
commit
ede78b2ccc
2 changed files with 32 additions and 5 deletions
|
@ -75,6 +75,14 @@ final class DiffusionSvnDiffQuery extends DiffusionDiffQuery {
|
||||||
$old_name = $path->getTargetPath();
|
$old_name = $path->getTargetPath();
|
||||||
$new_name = $path->getPath();
|
$new_name = $path->getPath();
|
||||||
break;
|
break;
|
||||||
|
case DifferentialChangeType::TYPE_MOVE_AWAY:
|
||||||
|
$old = array(
|
||||||
|
$path->getPath(),
|
||||||
|
$path->getCommitIdentifier() - 1);
|
||||||
|
$old_name = $path->getPath();
|
||||||
|
$new_name = null;
|
||||||
|
$new = null;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
$old = array($path->getPath(), $path->getCommitIdentifier() - 1);
|
$old = array($path->getPath(), $path->getCommitIdentifier() - 1);
|
||||||
$new = array($path->getPath(), $path->getCommitIdentifier());
|
$new = array($path->getPath(), $path->getCommitIdentifier());
|
||||||
|
|
|
@ -49,21 +49,21 @@ class DiffusionPathChangeQuery {
|
||||||
|
|
||||||
$raw_changes = queryfx_all(
|
$raw_changes = queryfx_all(
|
||||||
$repository->establishConnection('r'),
|
$repository->establishConnection('r'),
|
||||||
'SELECT c.*, p.path pathName, t.path targetPathName
|
'SELECT c.*, p.path pathName, t.path targetPathName,
|
||||||
|
i.commitIdentifier targetCommitIdentifier
|
||||||
FROM %T c
|
FROM %T c
|
||||||
LEFT JOIN %T p ON c.pathID = p.id
|
LEFT JOIN %T p ON c.pathID = p.id
|
||||||
LEFT JOIN %T t on c.targetPathID = t.id
|
LEFT JOIN %T t ON c.targetPathID = t.id
|
||||||
|
LEFT JOIN %T i ON c.targetCommitID = i.id
|
||||||
WHERE c.commitID = %d AND isDirect = 1',
|
WHERE c.commitID = %d AND isDirect = 1',
|
||||||
PhabricatorRepository::TABLE_PATHCHANGE,
|
PhabricatorRepository::TABLE_PATHCHANGE,
|
||||||
PhabricatorRepository::TABLE_PATH,
|
PhabricatorRepository::TABLE_PATH,
|
||||||
PhabricatorRepository::TABLE_PATH,
|
PhabricatorRepository::TABLE_PATH,
|
||||||
|
$commit->getTableName(),
|
||||||
$commit->getID());
|
$commit->getID());
|
||||||
|
|
||||||
$changes = array();
|
$changes = array();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$raw_changes = isort($raw_changes, 'pathName');
|
$raw_changes = isort($raw_changes, 'pathName');
|
||||||
foreach ($raw_changes as $raw_change) {
|
foreach ($raw_changes as $raw_change) {
|
||||||
$type = $raw_change['changeType'];
|
$type = $raw_change['changeType'];
|
||||||
|
@ -76,9 +76,28 @@ class DiffusionPathChangeQuery {
|
||||||
$change->setChangeType($raw_change['changeType']);
|
$change->setChangeType($raw_change['changeType']);
|
||||||
$change->setFileType($raw_change['fileType']);
|
$change->setFileType($raw_change['fileType']);
|
||||||
$change->setCommitIdentifier($commit->getCommitIdentifier());
|
$change->setCommitIdentifier($commit->getCommitIdentifier());
|
||||||
|
|
||||||
|
$change->setTargetPath(ltrim($raw_change['targetPathName'], '/'));
|
||||||
|
$change->setTargetCommitIdentifier($raw_change['targetCommitIdentifier']);
|
||||||
|
|
||||||
$changes[] = $change;
|
$changes[] = $change;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deduce the away paths by examining all the changes.
|
||||||
|
|
||||||
|
$away = array();
|
||||||
|
foreach ($changes as $change) {
|
||||||
|
if ($change->getTargetPath()) {
|
||||||
|
$away[$change->getTargetPath()][] = $change->getPath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach ($changes as $change) {
|
||||||
|
if (isset($away[$change->getPath()])) {
|
||||||
|
$change->setAwayPaths($away[$change->getPath()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return $changes;
|
return $changes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue