diff --git a/resources/celerity/map.php b/resources/celerity/map.php index 056535074c..65eed7916a 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -12,7 +12,7 @@ return array( 'core.pkg.css' => '261ee8cf', 'core.pkg.js' => '5ace8a1e', 'differential.pkg.css' => 'c3f15714', - 'differential.pkg.js' => '67c9ea4c', + 'differential.pkg.js' => 'be031567', 'diffusion.pkg.css' => '42c75c37', 'diffusion.pkg.js' => '91192d85', 'maniphest.pkg.css' => '35995d6d', @@ -374,7 +374,7 @@ return array( 'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => '076bd092', 'rsrc/js/application/dashboard/behavior-dashboard-query-panel-select.js' => '1e413dc9', 'rsrc/js/application/dashboard/behavior-dashboard-tab-panel.js' => '9b1cbd76', - 'rsrc/js/application/diff/DiffChangeset.js' => 'e7cf10d6', + 'rsrc/js/application/diff/DiffChangeset.js' => 'd0a85a85', 'rsrc/js/application/diff/DiffChangesetList.js' => 'b91204e9', 'rsrc/js/application/diff/DiffInline.js' => 'a4a14a94', 'rsrc/js/application/diff/behavior-preview-link.js' => 'f51e9c17', @@ -753,7 +753,7 @@ return array( 'phabricator-darklog' => '3b869402', 'phabricator-darkmessage' => '26cd4b73', 'phabricator-dashboard-css' => '4267d6c6', - 'phabricator-diff-changeset' => 'e7cf10d6', + 'phabricator-diff-changeset' => 'd0a85a85', 'phabricator-diff-changeset-list' => 'b91204e9', 'phabricator-diff-inline' => 'a4a14a94', 'phabricator-drag-and-drop-file-upload' => '4370900d', @@ -1973,6 +1973,17 @@ return array( 'javelin-stratcom', 'javelin-util', ), + 'd0a85a85' => array( + 'javelin-dom', + 'javelin-util', + 'javelin-stratcom', + 'javelin-install', + 'javelin-workflow', + 'javelin-router', + 'javelin-behavior-device', + 'javelin-vector', + 'phabricator-diff-inline', + ), 'd12d214f' => array( 'javelin-install', 'javelin-dom', @@ -2038,17 +2049,6 @@ return array( 'javelin-dom', 'phabricator-draggable-list', ), - 'e7cf10d6' => array( - 'javelin-dom', - 'javelin-util', - 'javelin-stratcom', - 'javelin-install', - 'javelin-workflow', - 'javelin-router', - 'javelin-behavior-device', - 'javelin-vector', - 'phabricator-diff-inline', - ), 'e8240b50' => array( 'javelin-behavior', 'javelin-stratcom', diff --git a/src/applications/config/check/PhabricatorExtraConfigSetupCheck.php b/src/applications/config/check/PhabricatorExtraConfigSetupCheck.php index a742e3b82b..b676063e8c 100644 --- a/src/applications/config/check/PhabricatorExtraConfigSetupCheck.php +++ b/src/applications/config/check/PhabricatorExtraConfigSetupCheck.php @@ -533,6 +533,8 @@ final class PhabricatorExtraConfigSetupCheck extends PhabricatorSetupCheck { 'This ancient extension point has been replaced with other '. 'mechanisms, including "AphrontSite".'), + 'differential.whitespace-matters' => pht( + 'Whitespace rendering is now handled automatically.'), ); return $ancient_config; diff --git a/src/applications/differential/__tests__/DifferentialParseRenderTestCase.php b/src/applications/differential/__tests__/DifferentialParseRenderTestCase.php index c278ff0c67..259bb671de 100644 --- a/src/applications/differential/__tests__/DifferentialParseRenderTestCase.php +++ b/src/applications/differential/__tests__/DifferentialParseRenderTestCase.php @@ -31,7 +31,6 @@ final class DifferentialParseRenderTestCase extends PhabricatorTestCase { foreach (array('one', 'two') as $type) { $this->runParser($type, $data, $file, 'expect'); $this->runParser($type, $data, $file, 'unshielded'); - $this->runParser($type, $data, $file, 'whitespace'); } } } @@ -44,25 +43,20 @@ final class DifferentialParseRenderTestCase extends PhabricatorTestCase { } $unshielded = false; - $whitespace = false; switch ($extension) { case 'unshielded': $unshielded = true; break; - case 'whitespace'; - $unshielded = true; - $whitespace = true; - break; } $parsers = $this->buildChangesetParsers($type, $data, $file); - $actual = $this->renderParsers($parsers, $unshielded, $whitespace); + $actual = $this->renderParsers($parsers, $unshielded); $expect = Filesystem::readFile($test_file); $this->assertEqual($expect, $actual, basename($test_file)); } - private function renderParsers(array $parsers, $unshield, $whitespace) { + private function renderParsers(array $parsers, $unshield) { $result = array(); foreach ($parsers as $parser) { if ($unshield) { @@ -73,11 +67,6 @@ final class DifferentialParseRenderTestCase extends PhabricatorTestCase { $e_range = null; } - if ($whitespace) { - $parser->setWhitespaceMode( - DifferentialChangesetParser::WHITESPACE_SHOW_ALL); - } - $result[] = $parser->render($s_range, $e_range, array()); } return implode(str_repeat('~', 80)."\n", $result); diff --git a/src/applications/differential/__tests__/data/generated.diff.one.unshielded b/src/applications/differential/__tests__/data/generated.diff.one.unshielded index ca4b1b167e..acfa701c8b 100644 --- a/src/applications/differential/__tests__/data/generated.diff.one.unshielded +++ b/src/applications/differential/__tests__/data/generated.diff.one.unshielded @@ -1,6 +1,5 @@ N 1 . @generated\n~ -O 2 - \n~ +N 2 . \n~ O 3 - This is a generated file.\n~ -N 2 + \n~ N 3 + This is a generated file{(, full of generated code)}.\n~ N 4 . \n~ diff --git a/src/applications/differential/__tests__/data/generated.diff.two.unshielded b/src/applications/differential/__tests__/data/generated.diff.two.unshielded index 967f6220de..183a0b6edc 100644 --- a/src/applications/differential/__tests__/data/generated.diff.two.unshielded +++ b/src/applications/differential/__tests__/data/generated.diff.two.unshielded @@ -1,7 +1,7 @@ O 1 . @generated\n~ N 1 . @generated\n~ -O 2 - \n~ -N 2 + \n~ +O 2 . \n~ +N 2 . \n~ O 3 - This is a generated file.\n~ N 3 + This is a generated file{(, full of generated code)}.\n~ O 4 . \n~ diff --git a/src/applications/differential/__tests__/data/whitespace.diff.one.expect b/src/applications/differential/__tests__/data/whitespace.diff.one.expect index 5b229959d3..87ad1dcdd9 100644 --- a/src/applications/differential/__tests__/data/whitespace.diff.one.expect +++ b/src/applications/differential/__tests__/data/whitespace.diff.one.expect @@ -2,4 +2,5 @@ CTYPE 2 1 (unforced) WHITESPACE WHITESPACE - -SHIELD (whitespace) This file was changed only by adding or removing whitespace. +O 1 - -=[-Rocket-Ship>\n~ +N 1 + {> )}-=[-Rocket-Ship>\n~ diff --git a/src/applications/differential/__tests__/data/whitespace.diff.two.expect b/src/applications/differential/__tests__/data/whitespace.diff.two.expect index 5b229959d3..87ad1dcdd9 100644 --- a/src/applications/differential/__tests__/data/whitespace.diff.two.expect +++ b/src/applications/differential/__tests__/data/whitespace.diff.two.expect @@ -2,4 +2,5 @@ CTYPE 2 1 (unforced) WHITESPACE WHITESPACE - -SHIELD (whitespace) This file was changed only by adding or removing whitespace. +O 1 - -=[-Rocket-Ship>\n~ +N 1 + {> )}-=[-Rocket-Ship>\n~ diff --git a/src/applications/differential/config/PhabricatorDifferentialConfigOptions.php b/src/applications/differential/config/PhabricatorDifferentialConfigOptions.php index ec2099f8dd..9634756dac 100644 --- a/src/applications/differential/config/PhabricatorDifferentialConfigOptions.php +++ b/src/applications/differential/config/PhabricatorDifferentialConfigOptions.php @@ -80,18 +80,6 @@ EOHELP "Select and reorder revision fields.\n\n". "NOTE: This feature is under active development and subject ". "to change.")), - $this->newOption( - 'differential.whitespace-matters', - 'list', - array( - '/\.py$/', - '/\.l?hs$/', - '/\.ya?ml$/', - )) - ->setDescription( - pht( - "List of file regexps where whitespace is meaningful and should ". - "not use 'ignore-all' by default")), $this->newOption('differential.require-test-plan-field', 'bool', true) ->setBoolOptions( array( diff --git a/src/applications/differential/controller/DifferentialRevisionViewController.php b/src/applications/differential/controller/DifferentialRevisionViewController.php index 9bc6345576..2ac1d30eca 100644 --- a/src/applications/differential/controller/DifferentialRevisionViewController.php +++ b/src/applications/differential/controller/DifferentialRevisionViewController.php @@ -305,10 +305,6 @@ final class DifferentialRevisionViewController $details = $this->buildDetails($revision, $field_list); $curtain = $this->buildCurtain($revision); - $whitespace = $request->getStr( - 'whitespace', - DifferentialChangesetParser::WHITESPACE_IGNORE_MOST); - $repository = $revision->getRepository(); if ($repository) { $symbol_indexes = $this->buildSymbolIndexes( @@ -383,7 +379,6 @@ final class DifferentialRevisionViewController ->setDiff($target) ->setRenderingReferences($rendering_references) ->setVsMap($vs_map) - ->setWhitespace($whitespace) ->setSymbolIndexes($symbol_indexes) ->setTitle(pht('Diff %s', $target->getID())) ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY); @@ -412,7 +407,6 @@ final class DifferentialRevisionViewController ->setDiffUnitStatuses($broken_diffs) ->setSelectedVersusDiffID($diff_vs) ->setSelectedDiffID($target->getID()) - ->setSelectedWhitespace($whitespace) ->setCommitsForLinks($commits_for_links); $local_table = id(new DifferentialLocalCommitsView()) @@ -1095,7 +1089,7 @@ final class DifferentialRevisionViewController // this ends up being something like // D123.diff // or the verbose - // D123.vs123.id123.whitespaceignore-all.diff + // D123.vs123.id123.highlightjs.diff // lame but nice to include these options $file_name = ltrim($request_uri->getPath(), '/').'.'; foreach ($request_uri->getQueryParamsAsPairList() as $pair) { diff --git a/src/applications/differential/parser/DifferentialChangesetParser.php b/src/applications/differential/parser/DifferentialChangesetParser.php index 22f31b3e9f..caa7463672 100644 --- a/src/applications/differential/parser/DifferentialChangesetParser.php +++ b/src/applications/differential/parser/DifferentialChangesetParser.php @@ -19,7 +19,6 @@ final class DifferentialChangesetParser extends Phobject { protected $specialAttributes = array(); protected $changeset; - protected $whitespaceMode = null; protected $renderCacheKey = null; @@ -163,7 +162,6 @@ final class DifferentialChangesetParser extends Phobject { } public function readParametersFromRequest(AphrontRequest $request) { - $this->setWhitespaceMode($request->getStr('whitespace')); $this->setCharacterEncoding($request->getStr('encoding')); $this->setHighlightAs($request->getStr('highlight')); @@ -191,20 +189,14 @@ final class DifferentialChangesetParser extends Phobject { return $this; } - const CACHE_VERSION = 12; + const CACHE_VERSION = 13; const CACHE_MAX_SIZE = 8e6; const ATTR_GENERATED = 'attr:generated'; const ATTR_DELETED = 'attr:deleted'; const ATTR_UNCHANGED = 'attr:unchanged'; - const ATTR_WHITELINES = 'attr:white'; const ATTR_MOVEAWAY = 'attr:moveaway'; - const WHITESPACE_SHOW_ALL = 'show-all'; - const WHITESPACE_IGNORE_TRAILING = 'ignore-trailing'; - const WHITESPACE_IGNORE_MOST = 'ignore-most'; - const WHITESPACE_IGNORE_ALL = 'ignore-all'; - public function setOldLines(array $lines) { $this->old = $lines; return $this; @@ -336,11 +328,6 @@ final class DifferentialChangesetParser extends Phobject { return $this; } - public function setWhitespaceMode($whitespace_mode) { - $this->whitespaceMode = $whitespace_mode; - return $this; - } - public function setRenderingReference($ref) { $this->renderingReference = $ref; return $this; @@ -574,10 +561,6 @@ final class DifferentialChangesetParser extends Phobject { return idx($this->specialAttributes, self::ATTR_UNCHANGED, false); } - public function isWhitespaceOnly() { - return idx($this->specialAttributes, self::ATTR_WHITELINES, false); - } - public function isMoveAway() { return idx($this->specialAttributes, self::ATTR_MOVEAWAY, false); } @@ -624,18 +607,8 @@ final class DifferentialChangesetParser extends Phobject { } private function tryCacheStuff() { - $whitespace_mode = $this->whitespaceMode; - switch ($whitespace_mode) { - case self::WHITESPACE_SHOW_ALL: - case self::WHITESPACE_IGNORE_TRAILING: - case self::WHITESPACE_IGNORE_ALL: - break; - default: - $whitespace_mode = self::WHITESPACE_IGNORE_MOST; - break; - } + $skip_cache = false; - $skip_cache = ($whitespace_mode != self::WHITESPACE_IGNORE_MOST); if ($this->disableCache) { $skip_cache = true; } @@ -648,8 +621,6 @@ final class DifferentialChangesetParser extends Phobject { $skip_cache = true; } - $this->whitespaceMode = $whitespace_mode; - $changeset = $this->changeset; if ($changeset->getFileType() != DifferentialChangeType::FILE_TEXT && @@ -668,71 +639,10 @@ final class DifferentialChangesetParser extends Phobject { } private function process() { - $whitespace_mode = $this->whitespaceMode; $changeset = $this->changeset; - $ignore_all = (($whitespace_mode == self::WHITESPACE_IGNORE_MOST) || - ($whitespace_mode == self::WHITESPACE_IGNORE_ALL)); - - $force_ignore = ($whitespace_mode == self::WHITESPACE_IGNORE_ALL); - - if (!$force_ignore) { - if ($ignore_all && $changeset->getWhitespaceMatters()) { - $ignore_all = false; - } - } - - // The "ignore all whitespace" algorithm depends on rediffing the - // files, and we currently need complete representations of both - // files to do anything reasonable. If we only have parts of the files, - // don't use the "ignore all" algorithm. - if ($ignore_all) { - $hunks = $changeset->getHunks(); - if (count($hunks) !== 1) { - $ignore_all = false; - } else { - $first_hunk = reset($hunks); - if ($first_hunk->getOldOffset() != 1 || - $first_hunk->getNewOffset() != 1) { - $ignore_all = false; - } - } - } - - if ($ignore_all) { - $old_file = $changeset->makeOldFile(); - $new_file = $changeset->makeNewFile(); - if ($old_file == $new_file) { - // If the old and new files are exactly identical, the synthetic - // diff below will give us nonsense and whitespace modes are - // irrelevant anyway. This occurs when you, e.g., copy a file onto - // itself in Subversion (see T271). - $ignore_all = false; - } - } - $hunk_parser = new DifferentialHunkParser(); - $hunk_parser->setWhitespaceMode($whitespace_mode); $hunk_parser->parseHunksForLineData($changeset->getHunks()); - - // Depending on the whitespace mode, we may need to compute a different - // set of changes than the set of changes in the hunk data (specifically, - // we might want to consider changed lines which have only whitespace - // changes as unchanged). - if ($ignore_all) { - $engine = new PhabricatorDifferenceEngine(); - $engine->setIgnoreWhitespace(true); - $no_whitespace_changeset = $engine->generateChangesetFromFileContent( - $old_file, - $new_file); - - $type_parser = new DifferentialHunkParser(); - $type_parser->parseHunksForLineData($no_whitespace_changeset->getHunks()); - - $hunk_parser->setOldLineTypeMap($type_parser->getOldLineTypeMap()); - $hunk_parser->setNewLineTypeMap($type_parser->getNewLineTypeMap()); - } - $hunk_parser->reparseHunksForSpecialAttributes(); $unchanged = false; @@ -753,7 +663,6 @@ final class DifferentialChangesetParser extends Phobject { $this->setSpecialAttributes(array( self::ATTR_UNCHANGED => $unchanged, self::ATTR_DELETED => $hunk_parser->getIsDeleted(), - self::ATTR_WHITELINES => !$hunk_parser->getHasTextChanges(), self::ATTR_MOVEAWAY => $moveaway, )); @@ -971,10 +880,6 @@ final class DifferentialChangesetParser extends Phobject { pht('The contents of this file were not changed.'), $type); } - } else if ($this->isWhitespaceOnly()) { - $shield = $renderer->renderShield( - pht('This file was changed only by adding or removing whitespace.'), - 'whitespace'); } else if ($this->isDeleted()) { $shield = $renderer->renderShield( pht('This file was completely deleted.')); diff --git a/src/applications/differential/parser/DifferentialHunkParser.php b/src/applications/differential/parser/DifferentialHunkParser.php index e7b9ce21a9..d89089a7e7 100644 --- a/src/applications/differential/parser/DifferentialHunkParser.php +++ b/src/applications/differential/parser/DifferentialHunkParser.php @@ -7,7 +7,6 @@ final class DifferentialHunkParser extends Phobject { private $intraLineDiffs; private $depthOnlyLines; private $visibleLinesMask; - private $whitespaceMode; /** * Get a map of lines on which hunks start, other than line 1. This @@ -125,21 +124,6 @@ final class DifferentialHunkParser extends Phobject { return $this->depthOnlyLines; } - public function setWhitespaceMode($white_space_mode) { - $this->whitespaceMode = $white_space_mode; - return $this; - } - - private function getWhitespaceMode() { - if ($this->whitespaceMode === null) { - throw new Exception( - pht( - 'You must %s before accessing this data.', - 'setWhitespaceMode')); - } - return $this->whitespaceMode; - } - public function getIsDeleted() { foreach ($this->getNewLines() as $line) { if ($line) { @@ -159,13 +143,6 @@ final class DifferentialHunkParser extends Phobject { return false; } - /** - * Returns true if the hunks change any text, not just whitespace. - */ - public function getHasTextChanges() { - return $this->getHasChanges('text'); - } - /** * Returns true if the hunks change anything, including whitespace. */ @@ -193,9 +170,6 @@ final class DifferentialHunkParser extends Phobject { } if ($o['type'] !== $n['type']) { - // The types are different, so either the underlying text is actually - // different or whatever whitespace rules we're using consider them - // different. return true; } @@ -278,63 +252,6 @@ final class DifferentialHunkParser extends Phobject { $this->setOldLines($rebuild_old); $this->setNewLines($rebuild_new); - $this->updateChangeTypesForWhitespaceMode(); - - return $this; - } - - private function updateChangeTypesForWhitespaceMode() { - $mode = $this->getWhitespaceMode(); - - $mode_show_all = DifferentialChangesetParser::WHITESPACE_SHOW_ALL; - if ($mode === $mode_show_all) { - // If we're showing all whitespace, we don't need to perform any updates. - return; - } - - $mode_trailing = DifferentialChangesetParser::WHITESPACE_IGNORE_TRAILING; - $is_trailing = ($mode === $mode_trailing); - - $new = $this->getNewLines(); - $old = $this->getOldLines(); - foreach ($old as $key => $o) { - $n = $new[$key]; - - if (!$o || !$n) { - continue; - } - - if ($is_trailing) { - // In "trailing" mode, we need to identify lines which are marked - // changed but differ only by trailing whitespace. We mark these lines - // unchanged. - if ($o['type'] != $n['type']) { - if (rtrim($o['text']) === rtrim($n['text'])) { - $old[$key]['type'] = null; - $new[$key]['type'] = null; - } - } - } else { - // In "ignore most" and "ignore all" modes, we need to identify lines - // which are marked unchanged but have internal whitespace changes. - // We want to ignore leading and trailing whitespace changes only, not - // internal whitespace changes (`diff` doesn't have a mode for this, so - // we have to fix it here). If the text is marked unchanged but the - // old and new text differs by internal space, mark the lines changed. - if ($o['type'] === null && $n['type'] === null) { - if ($o['text'] !== $n['text']) { - if (trim($o['text']) !== trim($n['text'])) { - $old[$key]['type'] = '-'; - $new[$key]['type'] = '+'; - } - } - } - } - } - - $this->setOldLines($old); - $this->setNewLines($new); - return $this; } diff --git a/src/applications/differential/parser/DifferentialLineAdjustmentMap.php b/src/applications/differential/parser/DifferentialLineAdjustmentMap.php index fde8f61f7d..e30f2ca866 100644 --- a/src/applications/differential/parser/DifferentialLineAdjustmentMap.php +++ b/src/applications/differential/parser/DifferentialLineAdjustmentMap.php @@ -359,7 +359,6 @@ final class DifferentialLineAdjustmentMap extends Phobject { } $changeset = id(new PhabricatorDifferenceEngine()) - ->setIgnoreWhitespace(true) ->generateChangesetFromFileContent($u_old, $v_old); $results[$u][$v] = self::newFromHunks( diff --git a/src/applications/differential/render/DifferentialChangesetHTMLRenderer.php b/src/applications/differential/render/DifferentialChangesetHTMLRenderer.php index 30acc71c88..2e760d99bb 100644 --- a/src/applications/differential/render/DifferentialChangesetHTMLRenderer.php +++ b/src/applications/differential/render/DifferentialChangesetHTMLRenderer.php @@ -367,7 +367,6 @@ abstract class DifferentialChangesetHTMLRenderer $reference = $this->getRenderingReference(); if ($force !== 'text' && - $force !== 'whitespace' && $force !== 'none' && $force !== 'default') { throw new Exception( @@ -388,10 +387,6 @@ abstract class DifferentialChangesetHTMLRenderer 'range' => $range, ); - if ($force == 'whitespace') { - $meta['whitespace'] = DifferentialChangesetParser::WHITESPACE_SHOW_ALL; - } - $content = array(); $content[] = $message; if ($force !== 'none') { diff --git a/src/applications/differential/render/DifferentialChangesetRenderer.php b/src/applications/differential/render/DifferentialChangesetRenderer.php index c5d033a4a9..866ae15ac9 100644 --- a/src/applications/differential/render/DifferentialChangesetRenderer.php +++ b/src/applications/differential/render/DifferentialChangesetRenderer.php @@ -406,9 +406,6 @@ abstract class DifferentialChangesetRenderer extends Phobject { * important (e.g., generated code). * - `"text"`: Force the text to be shown. This is probably only relevant * when a file is not changed. - * - `"whitespace"`: Force the text to be shown, and the diff to be - * rendered with all whitespace shown. This is probably only relevant - * when a file is changed only by altering whitespace. * - `"none"`: Don't show the link (e.g., text not available). * * @param string Message explaining why the diff is hidden. diff --git a/src/applications/differential/storage/DifferentialChangeset.php b/src/applications/differential/storage/DifferentialChangeset.php index 00af84bc4e..03400d7a16 100644 --- a/src/applications/differential/storage/DifferentialChangeset.php +++ b/src/applications/differential/storage/DifferentialChangeset.php @@ -249,17 +249,6 @@ final class DifferentialChangeset return $path; } - public function getWhitespaceMatters() { - $config = PhabricatorEnv::getEnvConfig('differential.whitespace-matters'); - foreach ($config as $regexp) { - if (preg_match($regexp, $this->getFilename())) { - return true; - } - } - - return false; - } - public function attachDiff(DifferentialDiff $diff) { $this->diff = $diff; return $this; diff --git a/src/applications/differential/view/DifferentialChangesetDetailView.php b/src/applications/differential/view/DifferentialChangesetDetailView.php index cb697c2e9d..211403c8bd 100644 --- a/src/applications/differential/view/DifferentialChangesetDetailView.php +++ b/src/applications/differential/view/DifferentialChangesetDetailView.php @@ -9,7 +9,6 @@ final class DifferentialChangesetDetailView extends AphrontView { private $id; private $vsChangesetID; private $renderURI; - private $whitespace; private $renderingRef; private $autoload; private $loaded; @@ -42,15 +41,6 @@ final class DifferentialChangesetDetailView extends AphrontView { return $this->renderingRef; } - public function setWhitespace($whitespace) { - $this->whitespace = $whitespace; - return $this; - } - - public function getWhitespace() { - return $this->whitespace; - } - public function setRenderURI($render_uri) { $this->renderURI = $render_uri; return $this; @@ -196,7 +186,6 @@ final class DifferentialChangesetDetailView extends AphrontView { 'left' => $left_id, 'right' => $right_id, 'renderURI' => $this->getRenderURI(), - 'whitespace' => $this->getWhitespace(), 'highlight' => null, 'renderer' => $this->getRenderer(), 'ref' => $this->getRenderingRef(), diff --git a/src/applications/differential/view/DifferentialChangesetListView.php b/src/applications/differential/view/DifferentialChangesetListView.php index 367991497c..67568005fa 100644 --- a/src/applications/differential/view/DifferentialChangesetListView.php +++ b/src/applications/differential/view/DifferentialChangesetListView.php @@ -7,7 +7,6 @@ final class DifferentialChangesetListView extends AphrontView { private $references = array(); private $inlineURI; private $renderURI = '/differential/changeset/'; - private $whitespace; private $background; private $header; private $isStandalone; @@ -100,11 +99,6 @@ final class DifferentialChangesetListView extends AphrontView { return $this; } - public function setWhitespace($whitespace) { - $this->whitespace = $whitespace; - return $this; - } - public function setVsMap(array $vs_map) { $this->vsMap = $vs_map; return $this; @@ -180,7 +174,6 @@ final class DifferentialChangesetListView extends AphrontView { $detail->setRenderingRef($ref); $detail->setRenderURI($this->renderURI); - $detail->setWhitespace($this->whitespace); $detail->setRenderer($renderer); if ($this->getParser()) { @@ -352,8 +345,7 @@ final class DifferentialChangesetListView extends AphrontView { $meta = array(); $qparams = array( - 'ref' => $ref, - 'whitespace' => $this->whitespace, + 'ref' => $ref, ); if ($this->standaloneURI) { diff --git a/src/applications/differential/view/DifferentialRevisionUpdateHistoryView.php b/src/applications/differential/view/DifferentialRevisionUpdateHistoryView.php index a77b320d82..07ca983bc0 100644 --- a/src/applications/differential/view/DifferentialRevisionUpdateHistoryView.php +++ b/src/applications/differential/view/DifferentialRevisionUpdateHistoryView.php @@ -5,7 +5,6 @@ final class DifferentialRevisionUpdateHistoryView extends AphrontView { private $diffs = array(); private $selectedVersusDiffID; private $selectedDiffID; - private $selectedWhitespace; private $commitsForLinks = array(); private $unitStatus = array(); @@ -25,11 +24,6 @@ final class DifferentialRevisionUpdateHistoryView extends AphrontView { return $this; } - public function setSelectedWhitespace($whitespace) { - $this->selectedWhitespace = $whitespace; - return $this; - } - public function setCommitsForLinks(array $commits) { assert_instances_of($commits, 'PhabricatorRepositoryCommit'); $this->commitsForLinks = $commits; @@ -224,28 +218,6 @@ final class DifferentialRevisionUpdateHistoryView extends AphrontView { 'radios' => $radios, )); - $options = array( - DifferentialChangesetParser::WHITESPACE_IGNORE_ALL => pht('Ignore All'), - DifferentialChangesetParser::WHITESPACE_IGNORE_MOST => pht('Ignore Most'), - DifferentialChangesetParser::WHITESPACE_IGNORE_TRAILING => - pht('Ignore Trailing'), - DifferentialChangesetParser::WHITESPACE_SHOW_ALL => pht('Show All'), - ); - - foreach ($options as $value => $label) { - $options[$value] = phutil_tag( - 'option', - array( - 'value' => $value, - 'selected' => ($value == $this->selectedWhitespace) - ? 'selected' - : null, - ), - $label); - } - $select = phutil_tag('select', array('name' => 'whitespace'), $options); - - $table = id(new AphrontTableView($rows)); $table->setHeaders( array( @@ -291,13 +263,6 @@ final class DifferentialRevisionUpdateHistoryView extends AphrontView { 'class' => 'differential-update-history-footer', ), array( - phutil_tag( - 'label', - array(), - array( - pht('Whitespace Changes:'), - $select, - )), phutil_tag( 'button', array(), diff --git a/src/applications/diffusion/controller/DiffusionChangeController.php b/src/applications/diffusion/controller/DiffusionChangeController.php index 90258134c4..0120c978d0 100644 --- a/src/applications/diffusion/controller/DiffusionChangeController.php +++ b/src/applications/diffusion/controller/DiffusionChangeController.php @@ -64,9 +64,6 @@ final class DiffusionChangeController extends DiffusionController { $changeset_view->setRawFileURIs($left_uri, $right_uri); $changeset_view->setRenderURI($repository->getPathURI('diff/')); - - $changeset_view->setWhitespace( - DifferentialChangesetParser::WHITESPACE_SHOW_ALL); $changeset_view->setUser($viewer); $changeset_view->setHeader($changeset_header); diff --git a/src/applications/diffusion/controller/DiffusionDiffController.php b/src/applications/diffusion/controller/DiffusionDiffController.php index 86409c6faa..a0111d001f 100644 --- a/src/applications/diffusion/controller/DiffusionDiffController.php +++ b/src/applications/diffusion/controller/DiffusionDiffController.php @@ -88,9 +88,6 @@ final class DiffusionDiffController extends DiffusionController { ($viewer->getPHID() == $commit->getAuthorPHID())); $parser->setObjectOwnerPHID($commit->getAuthorPHID()); - $parser->setWhitespaceMode( - DifferentialChangesetParser::WHITESPACE_SHOW_ALL); - $inlines = PhabricatorAuditInlineComment::loadDraftAndPublishedComments( $viewer, $commit->getPHID(), diff --git a/src/docs/user/userguide/differential_faq.diviner b/src/docs/user/userguide/differential_faq.diviner index aea49c4ce6..0df1f7b1c9 100644 --- a/src/docs/user/userguide/differential_faq.diviner +++ b/src/docs/user/userguide/differential_faq.diviner @@ -51,22 +51,6 @@ You need to install and configure **Pygments** to highlight anything else than PHP. See the `pygments.enabled` configuration setting. -= What do the whitespace options mean? = - -Most of these are pretty straightforward, but "Ignore Most" is not: - - - **Show All**: Show all whitespace. - - **Ignore Trailing**: Ignore changes which only affect trailing whitespace. - - **Ignore Most**: Ignore changes which only affect leading or trailing - whitespace (but not whitespace changes between non-whitespace characters) - in files which are not marked as having significant whitespace. - In those files, show whitespace changes. By default, Python (.py) and - Haskell (.lhs, .hs) are marked as having significant whitespace, but this - can be changed in the `differential.whitespace-matters` configuration - setting. - - **Ignore All**: Ignore all whitespace changes in all files. - - = What do the very light green and red backgrounds mean? = Differential uses these colors to mark changes coming from rebase: they are diff --git a/src/infrastructure/diff/PhabricatorDifferenceEngine.php b/src/infrastructure/diff/PhabricatorDifferenceEngine.php index 3b4eb55473..90f1d9b10e 100644 --- a/src/infrastructure/diff/PhabricatorDifferenceEngine.php +++ b/src/infrastructure/diff/PhabricatorDifferenceEngine.php @@ -10,7 +10,6 @@ final class PhabricatorDifferenceEngine extends Phobject { - private $ignoreWhitespace; private $oldName; private $newName; @@ -18,19 +17,6 @@ final class PhabricatorDifferenceEngine extends Phobject { /* -( Configuring the Engine )--------------------------------------------- */ - /** - * If true, ignore whitespace when computing differences. - * - * @param bool Ignore whitespace? - * @return this - * @task config - */ - public function setIgnoreWhitespace($ignore_whitespace) { - $this->ignoreWhitespace = $ignore_whitespace; - return $this; - } - - /** * Set the name to identify the old file with. Primarily cosmetic. * @@ -73,9 +59,6 @@ final class PhabricatorDifferenceEngine extends Phobject { public function generateRawDiffFromFileContent($old, $new) { $options = array(); - if ($this->ignoreWhitespace) { - $options[] = '-bw'; - } // Generate diffs with full context. $options[] = '-U65535'; @@ -100,12 +83,10 @@ final class PhabricatorDifferenceEngine extends Phobject { $new_tmp); if (!$err) { - // This indicates that the two files are the same (or, possibly, the - // same modulo whitespace differences, which is why we can't do this - // check trivially before running `diff`). Build a synthetic, changeless - // diff so that we can still render the raw, unchanged file instead of - // being forced to just say "this file didn't change" since we don't have - // the content. + // This indicates that the two files are the same. Build a synthetic, + // changeless diff so that we can still render the raw, unchanged file + // instead of being forced to just say "this file didn't change" since we + // don't have the content. $entire_file = explode("\n", $old); foreach ($entire_file as $k => $line) { @@ -123,26 +104,6 @@ final class PhabricatorDifferenceEngine extends Phobject { "+++ {$new_name}\n". "@@ -1,{$len} +1,{$len} @@\n". $entire_file."\n"; - } else { - if ($this->ignoreWhitespace) { - - // Under "-bw", `diff` is inconsistent about emitting "\ No newline - // at end of file". For instance, a long file with a change in the - // middle will emit a contextless "\ No newline..." at the end if a - // newline is removed, but not if one is added. A file with a change - // at the end will emit the "old" "\ No newline..." block only, even - // if the newline was not removed. Since we're ostensibly ignoring - // whitespace changes, just drop these lines if they appear anywhere - // in the diff. - - $lines = explode("\n", $diff); - foreach ($lines as $key => $line) { - if (isset($line[0]) && $line[0] == '\\') { - unset($lines[$key]); - } - } - $diff = implode("\n", $lines); - } } return $diff; diff --git a/webroot/rsrc/js/application/diff/DiffChangeset.js b/webroot/rsrc/js/application/diff/DiffChangeset.js index 24d734573d..754f3b16e4 100644 --- a/webroot/rsrc/js/application/diff/DiffChangeset.js +++ b/webroot/rsrc/js/application/diff/DiffChangeset.js @@ -22,7 +22,6 @@ JX.install('DiffChangeset', { this._renderURI = data.renderURI; this._ref = data.ref; - this._whitespace = data.whitespace; this._renderer = data.renderer; this._highlight = data.highlight; this._encoding = data.encoding; @@ -46,7 +45,6 @@ JX.install('DiffChangeset', { _renderURI: null, _ref: null, - _whitespace: null, _renderer: null, _highlight: null, _encoding: null, @@ -310,7 +308,6 @@ JX.install('DiffChangeset', { _getViewParameters: function() { return { ref: this._ref, - whitespace: this._whitespace || '', renderer: this.getRenderer() || '', highlight: this._highlight || '', encoding: this._encoding || ''