From 14a172d70743f820e703e2a5db2ad6560daacff4 Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 15 Mar 2011 14:25:47 -0700 Subject: [PATCH] Make GitDiscovery terminate, maybe? --- .../PhabricatorRepositoryGitCommitDiscoveryDaemon.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/applications/repository/daemon/commitdiscovery/git/PhabricatorRepositoryGitCommitDiscoveryDaemon.php b/src/applications/repository/daemon/commitdiscovery/git/PhabricatorRepositoryGitCommitDiscoveryDaemon.php index 9d8e9e746e..67b0bb5562 100644 --- a/src/applications/repository/daemon/commitdiscovery/git/PhabricatorRepositoryGitCommitDiscoveryDaemon.php +++ b/src/applications/repository/daemon/commitdiscovery/git/PhabricatorRepositoryGitCommitDiscoveryDaemon.php @@ -57,6 +57,8 @@ class PhabricatorRepositoryGitCommitDiscoveryDaemon $discover[] = $commit; $insert[] = $commit; + $seen_parent = array(); + while (true) { $target = array_pop($discover); list($parents) = execx( @@ -65,6 +67,14 @@ class PhabricatorRepositoryGitCommitDiscoveryDaemon $target); $parents = array_filter(explode(' ', trim($parents))); foreach ($parents as $parent) { + if (isset($seen_parent[$parent])) { + // We end up in a loop here somehow when we parse Arcanist if we + // don't do this. TODO: Figure out why and draw a pretty diagram + // since it's not evident how parsing a DAG with this causes the + // loop to stop terminating. + continue; + } + $seen_parent[$parent] = true; if (!$this->isKnownCommit($parent)) { $discover[] = $parent; $insert[] = $parent;