diff --git a/src/applications/diffusion/protocol/DiffusionMercurialCommandEngine.php b/src/applications/diffusion/protocol/DiffusionMercurialCommandEngine.php --- a/src/applications/diffusion/protocol/DiffusionMercurialCommandEngine.php +++ b/src/applications/diffusion/protocol/DiffusionMercurialCommandEngine.php @@ -71,12 +71,30 @@ // // Separately, it may fail to write to a different branch cache, and may // encounter issues reading the branch cache. + // + // When Mercurial repositories are hosted on external systems with + // multi-user environments it's possible that the branch cache is computed + // on a revision which does not end up being published. When this happens it + // will print out invalid branch cache. + // + // https://www.mercurial-scm.org/pipermail/mercurial/2014-June/047239.html + // + // When observing a repository which uses largefiles, the debug output may + // also contain extraneous output about largefile changes. + // + // At some point Mercurial added/improved support for pager used when + // command output is large. It includes printing out debug information that + // the pager is being started for a command. This seems to happen despite + // the output of the command being piped/read from another process. $ignore = array( 'ignoring untrusted configuration option', "couldn't write revision branch cache:", "couldn't write branch cache:", 'invalid branchheads cache', + 'invalid branch cache (served):', + 'updated patterns: .hglf', + 'starting pager for command', ); foreach ($ignore as $key => $pattern) { diff --git a/src/applications/diffusion/protocol/__tests__/DiffusionMercurialWireProtocolTests.php b/src/applications/diffusion/protocol/__tests__/DiffusionMercurialWireProtocolTests.php --- a/src/applications/diffusion/protocol/__tests__/DiffusionMercurialWireProtocolTests.php +++ b/src/applications/diffusion/protocol/__tests__/DiffusionMercurialWireProtocolTests.php @@ -45,4 +45,40 @@ } } + public function testFilteringDebugOutput() { + // Output that should be filtered out from the results + $debug_output = + "ignoring untrusted configuration option\n". + "couldn't write revision branch cache:\n". + "couldn't write branch cache: blah blah blah\n". + "invalid branchheads cache\n". + "invalid branch cache (served): tip differs\n". + "starting pager for command 'log'\n". + "updated patterns: ". + ".hglf/mim/src/com/mimvista/install/FreshInstaller.java, ". + "mim/src/com/mimvista/install/FreshInstaller.java\n"; + + $filtered_output = + DiffusionMercurialWireProtocol::filterMercurialDebugOutput($debug_output); + + $this->assertEqual(array(), $filtered_output); + + // The output that should make it through the filtering + $debug_output = + "0b33a9e5ceedba14b03214f743957357d7bb46a9;694". + ":8b39f63eb209dd2bdfd4bd3d0721a9e38d75a6d3". + "-1:0000000000000000000000000000000000000000\n". + "8b39f63eb209dd2bdfd4bd3d0721a9e38d75a6d3;693". + ":165bce9ce4ccc97024ba19ed5a22f6a066fa6844". + "-1:0000000000000000000000000000000000000000\n". + "165bce9ce4ccc97024ba19ed5a22f6a066fa6844;692:". + "2337bc9e3cf212b3b386b5197801b1c81db64920". + "-1:0000000000000000000000000000000000000000\n"; + + $filtered_output = + DiffusionMercurialWireProtocol::filterMercurialDebugOutput($debug_output); + + $this->assertEqual($debug_output, $filtered_output); + } + }