1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-27 01:02:42 +01:00

Fix an issue where DiffusionGitBrowseQuery incorrectly parses filenames with spaces

Summary:
Split from D1921. We'll explode each line into too many parts currently, if the filename contains spaces.

Also use -z to get \0 newlines.

Test Plan: Browsed a directory containing files with spaces in their names, links etc were correct.

Reviewers: nh, vrana, btrahan

Reviewed By: btrahan

CC: aran, epriestley

Differential Revision: https://secure.phabricator.com/D1924
This commit is contained in:
epriestley 2012-03-19 19:17:50 -07:00
parent 074ea25eab
commit 8c141fdfd1

View file

@ -1,7 +1,7 @@
<?php <?php
/* /*
* Copyright 2011 Facebook, Inc. * Copyright 2012 Facebook, Inc.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -70,13 +70,15 @@ final class DiffusionGitBrowseQuery extends DiffusionBrowseQuery {
} }
list($stdout) = $repository->execxLocalCommand( list($stdout) = $repository->execxLocalCommand(
'ls-tree -l %s:%s', 'ls-tree -z -l %s:%s',
$commit, $commit,
$path); $path);
$results = array(); $results = array();
foreach (explode("\n", rtrim($stdout)) as $line) { foreach (explode("\0", rtrim($stdout)) as $line) {
list($mode, $type, $hash, $size, $name) = preg_split('/\s+/', $line); // NOTE: Limit to 5 components so we parse filenames with spaces in them
// correctly.
list($mode, $type, $hash, $size, $name) = preg_split('/\s+/', $line, 5);
if ($type == 'tree') { if ($type == 'tree') {
$file_type = DifferentialChangeType::FILE_DIRECTORY; $file_type = DifferentialChangeType::FILE_DIRECTORY;
} else { } else {