From 90546042144f6793796ec9d1eb93e48e71bc2258 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 1 Nov 2017 12:21:53 -0700 Subject: [PATCH 1/8] Fix some lint rendering issues when lines prior to other identical lines are removed Summary: See PHI191. This is a rehash of an earlier fix, but we didn't have a test case for this half yet. Test Plan: - Added a failing test, made it pass. - Added a linter like the one in PHI191, ran it, got a valid lint result instead of an exception. Reviewers: amckinley Reviewed By: amckinley Differential Revision: https://secure.phabricator.com/D18759 --- .../renderer/ArcanistConsoleLintRenderer.php | 41 +++++++++---------- .../ArcanistConsoleLintRendererTestCase.php | 14 +++++++ .../renderer/__tests__/data/rmmulti.expect | 10 +++++ src/lint/renderer/__tests__/data/rmmulti.txt | 4 ++ .../renderer/__tests__/data/rmmulti2.expect | 10 +++++ src/lint/renderer/__tests__/data/rmmulti2.txt | 4 ++ 6 files changed, 62 insertions(+), 21 deletions(-) create mode 100644 src/lint/renderer/__tests__/data/rmmulti.expect create mode 100644 src/lint/renderer/__tests__/data/rmmulti.txt create mode 100644 src/lint/renderer/__tests__/data/rmmulti2.expect create mode 100644 src/lint/renderer/__tests__/data/rmmulti2.txt diff --git a/src/lint/renderer/ArcanistConsoleLintRenderer.php b/src/lint/renderer/ArcanistConsoleLintRenderer.php index a4dfffa9..4862f47f 100644 --- a/src/lint/renderer/ArcanistConsoleLintRenderer.php +++ b/src/lint/renderer/ArcanistConsoleLintRenderer.php @@ -148,36 +148,35 @@ final class ArcanistConsoleLintRenderer extends ArcanistLintRenderer { $old_impact--; $new_impact--; - if ($old_impact < 0 || $new_impact < 0) { - throw new Exception( - pht( - 'Modified prefix line range has become negative '. - '(old = %d, new = %d).', - $old_impact, - $new_impact)); + // We can end up here if a patch removes a line which occurs before + // another identical line. + if ($old_impact <= 0 || $new_impact <= 0) { + break; } } while (true); // If the lines at the end of the changed line range are actually the // same, shrink the range. This happens when a patch just removes a // line. - do { - $old_suffix = idx($old_lines, $start + $old_impact - 2, null); - $new_suffix = idx($new_lines, $start + $new_impact - 2, null); + if ($old_impact > 0 && $new_impact > 0) { + do { + $old_suffix = idx($old_lines, $start + $old_impact - 2, null); + $new_suffix = idx($new_lines, $start + $new_impact - 2, null); - if ($old_suffix !== $new_suffix) { - break; - } + if ($old_suffix !== $new_suffix) { + break; + } - $old_impact--; - $new_impact--; + $old_impact--; + $new_impact--; - // We can end up here if a patch removes a line which occurs after - // another identical line. - if ($old_impact <= 0 || $new_impact <= 0) { - break; - } - } while (true); + // We can end up here if a patch removes a line which occurs after + // another identical line. + if ($old_impact <= 0 || $new_impact <= 0) { + break; + } + } while (true); + } } else { diff --git a/src/lint/renderer/__tests__/ArcanistConsoleLintRendererTestCase.php b/src/lint/renderer/__tests__/ArcanistConsoleLintRendererTestCase.php index f8928229..f65e40c9 100644 --- a/src/lint/renderer/__tests__/ArcanistConsoleLintRendererTestCase.php +++ b/src/lint/renderer/__tests__/ArcanistConsoleLintRendererTestCase.php @@ -142,6 +142,20 @@ EOTEXT; 'replacement' => "\nX\nY\n", ), + 'rmmulti' => array( + 'line' => 2, + 'char' => 1, + 'original' => "\n", + 'replacement' => '', + ), + + 'rmmulti2' => array( + 'line' => 1, + 'char' => 2, + 'original' => "\n", + 'replacement' => '', + ), + ); $defaults = array( diff --git a/src/lint/renderer/__tests__/data/rmmulti.expect b/src/lint/renderer/__tests__/data/rmmulti.expect new file mode 100644 index 00000000..1e4518cf --- /dev/null +++ b/src/lint/renderer/__tests__/data/rmmulti.expect @@ -0,0 +1,10 @@ +>>> Lint for path/to/example.c: + + + Warning (WARN123) Lint Warning + Consider this. + + 1 A + 2 ~ + >>> - 3 ~ + 4 B diff --git a/src/lint/renderer/__tests__/data/rmmulti.txt b/src/lint/renderer/__tests__/data/rmmulti.txt new file mode 100644 index 00000000..82cb3214 --- /dev/null +++ b/src/lint/renderer/__tests__/data/rmmulti.txt @@ -0,0 +1,4 @@ +A + + +B diff --git a/src/lint/renderer/__tests__/data/rmmulti2.expect b/src/lint/renderer/__tests__/data/rmmulti2.expect new file mode 100644 index 00000000..cd49440f --- /dev/null +++ b/src/lint/renderer/__tests__/data/rmmulti2.expect @@ -0,0 +1,10 @@ +>>> Lint for path/to/example.c: + + + Warning (WARN123) Lint Warning + Consider this. + + 1 A + >>> - 2 ~ + 3 ~ + 4 B diff --git a/src/lint/renderer/__tests__/data/rmmulti2.txt b/src/lint/renderer/__tests__/data/rmmulti2.txt new file mode 100644 index 00000000..82cb3214 --- /dev/null +++ b/src/lint/renderer/__tests__/data/rmmulti2.txt @@ -0,0 +1,4 @@ +A + + +B From f4c80a114d3652c9b53a86ab339f4e5b46096415 Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 30 Nov 2017 07:52:28 -0800 Subject: [PATCH 2/8] Make "arc land" prompt on "Changes Planned" revisions more explicit Summary: Fixes T10233. See PHI231. Users sometimes believe this warning is a bug and/or don't understand how they're supposed to resolve it. Test Plan: Ran `arc land` on a revision in "Changes Planned", got a sensible prompt. Ran `arc land` on a revision in another non-accepted state, got more or less the old prompt. Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T10233 Differential Revision: https://secure.phabricator.com/D18807 --- src/workflow/ArcanistLandWorkflow.php | 41 +++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/src/workflow/ArcanistLandWorkflow.php b/src/workflow/ArcanistLandWorkflow.php index b3c2b181..ec46aa05 100644 --- a/src/workflow/ArcanistLandWorkflow.php +++ b/src/workflow/ArcanistLandWorkflow.php @@ -694,6 +694,8 @@ EOTEXT $rev_title = $this->revision['title']; $rev_auxiliary = idx($this->revision, 'auxiliary', array()); + $full_name = pht('D%d: %s', $rev_id, $rev_title); + if ($this->revision['authorPHID'] != $this->getUserPHID()) { $other_author = $this->getConduit()->callMethodSynchronous( 'user.query', @@ -706,17 +708,46 @@ EOTEXT "This %s has revision '%s' but you are not the author. Land this ". "revision by %s?", $this->branchType, - "D{$rev_id}: {$rev_title}", + $full_name, $other_author)); if (!$ok) { throw new ArcanistUserAbortException(); } } - if ($rev_status != ArcanistDifferentialRevisionStatus::ACCEPTED) { - $ok = phutil_console_confirm(pht( - "Revision '%s' has not been accepted. Continue anyway?", - "D{$rev_id}: {$rev_title}")); + $state_warning = null; + $state_header = null; + if ($rev_status == ArcanistDifferentialRevisionStatus::CHANGES_PLANNED) { + $state_header = pht('REVISION HAS CHANGES PLANNED'); + $state_warning = pht( + 'The revision you are landing ("%s") is currently in the "%s" state, '. + 'indicating that you expect to revise it before moving forward.'. + "\n\n". + 'Normally, you should resubmit it for review and wait until it is '. + '"%s" by reviewers before you continue.'. + "\n\n". + 'To resubmit the revision for review, either: update the revision '. + 'with revised changes; or use "Request Review" from the web interface.', + $full_name, + pht('Changes Planned'), + pht('Accepted')); + } else if ($rev_status != ArcanistDifferentialRevisionStatus::ACCEPTED) { + $state_header = pht('REVISION HAS NOT BEEN ACCEPTED'); + $state_warning = pht( + 'The revision you are landing ("%s") has not been "%s" by reviewers.', + $full_name, + pht('Accepted')); + } + + if ($state_warning !== null) { + $prompt = pht('Land revision in the wrong state?'); + + id(new PhutilConsoleBlock()) + ->addParagraph(tsprintf('** %s **', $state_header)) + ->addParagraph(tsprintf('%B', $state_warning)) + ->draw(); + + $ok = phutil_console_confirm($prompt); if (!$ok) { throw new ArcanistUserAbortException(); } From 249f3a80fe77b22b19648ca43c8d266090a8d662 Mon Sep 17 00:00:00 2001 From: Alex Vandiver Date: Mon, 11 Dec 2017 17:36:18 -0800 Subject: [PATCH 3/8] Default the prompt for "Amend HEAD with these patches" to true Summary: Most users, if they have gone through the trouble of accepting the auto-fixes, are most likely going to want to take those changes and attempt to land with them. Assuming "Y" for this prompt streamlines for the more likely flow. Test Plan: `arc lint` Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: Korvin, epriestley Differential Revision: https://secure.phabricator.com/D18824 --- src/workflow/ArcanistLintWorkflow.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/workflow/ArcanistLintWorkflow.php b/src/workflow/ArcanistLintWorkflow.php index de215aad..75277d4b 100644 --- a/src/workflow/ArcanistLintWorkflow.php +++ b/src/workflow/ArcanistLintWorkflow.php @@ -546,7 +546,8 @@ EOTEXT pht('Automatically amending HEAD with lint patches.')); $amend = true; } else { - $amend = phutil_console_confirm(pht('Amend HEAD with lint patches?')); + $amend = phutil_console_confirm(pht('Amend HEAD with lint patches?'), + false); } if ($amend) { From c784b569202f23d0ecc61a4900e6ddb99d9925a7 Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 22 Dec 2017 09:18:50 -0800 Subject: [PATCH 4/8] Make "arc land" accommodate a minor API change in Harbormaster build statuses Summary: See PHI261. Currently "arc land" shows every build staus (passed, failed, building, etc) as yellow. Intended behavior is that passed builds are green, failed builds are red, and so on. This is because of an unintended API change a while ago in D16356. Since the only impact was a cosmetic color issue, this escaped notice until now. Additionally, try to use the modern `harbormaster.build.search` if it is available. Test Plan: - Ran `arc land` with running builds, got reasonable coloration. - Faked the new method not being available, still got sensible behavior from the old method. Reviewers: amckinley Reviewed By: amckinley Differential Revision: https://secure.phabricator.com/D18837 --- src/__phutil_library_map__.php | 2 + src/ref/ArcanistBuildRef.php | 115 ++++++++++++++++++++++++++ src/workflow/ArcanistLandWorkflow.php | 66 ++++++++++----- 3 files changed, 163 insertions(+), 20 deletions(-) create mode 100644 src/ref/ArcanistBuildRef.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 7ab5a448..7fbff131 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -42,6 +42,7 @@ phutil_register_library_map(array( 'ArcanistBraceFormattingXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistBraceFormattingXHPASTLinterRuleTestCase.php', 'ArcanistBranchWorkflow' => 'workflow/ArcanistBranchWorkflow.php', 'ArcanistBrowseWorkflow' => 'workflow/ArcanistBrowseWorkflow.php', + 'ArcanistBuildRef' => 'ref/ArcanistBuildRef.php', 'ArcanistBundle' => 'parser/ArcanistBundle.php', 'ArcanistBundleTestCase' => 'parser/__tests__/ArcanistBundleTestCase.php', 'ArcanistCSSLintLinter' => 'lint/linter/ArcanistCSSLintLinter.php', @@ -459,6 +460,7 @@ phutil_register_library_map(array( 'ArcanistBraceFormattingXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase', 'ArcanistBranchWorkflow' => 'ArcanistFeatureWorkflow', 'ArcanistBrowseWorkflow' => 'ArcanistWorkflow', + 'ArcanistBuildRef' => 'Phobject', 'ArcanistBundle' => 'Phobject', 'ArcanistBundleTestCase' => 'PhutilTestCase', 'ArcanistCSSLintLinter' => 'ArcanistExternalLinter', diff --git a/src/ref/ArcanistBuildRef.php b/src/ref/ArcanistBuildRef.php new file mode 100644 index 00000000..a173e692 --- /dev/null +++ b/src/ref/ArcanistBuildRef.php @@ -0,0 +1,115 @@ +parameters = $data; + return $ref; + } + + private function getStatusMap() { + // The modern "harbormaster.build.search" API method returns this in the + // "fields" list; the older API method returns it at the root level. + if (isset($this->parameters['fields']['buildStatus'])) { + $status = $this->parameters['fields']['buildStatus']; + } else if (isset($this->parameters['buildStatus'])) { + $status = $this->parameters['buildStatus']; + } else { + $status = 'unknown'; + } + + // We may either have an array or a scalar here. The array comes from + // "harbormaster.build.search", or from "harbormaster.querybuilds" if + // the server is newer than August 2016. The scalar comes from older + // versions of that method. See PHI261. + if (is_array($status)) { + $map = $status; + } else { + $map = array( + 'value' => $status, + ); + } + + // If we don't have a name, try to fill one in. + if (!isset($map['name'])) { + $name_map = array( + 'inactive' => pht('Inactive'), + 'pending' => pht('Pending'), + 'building' => pht('Building'), + 'passed' => pht('Passed'), + 'failed' => pht('Failed'), + 'aborted' => pht('Aborted'), + 'error' => pht('Error'), + 'paused' => pht('Paused'), + 'deadlocked' => pht('Deadlocked'), + 'unknown' => pht('Unknown'), + ); + + $map['name'] = idx($name_map, $map['value'], $map['value']); + } + + // If we don't have an ANSI color code, try to fill one in. + if (!isset($map['color.ansi'])) { + $color_map = array( + 'failed' => 'red', + 'passed' => 'green', + ); + + $map['color.ansi'] = idx($color_map, $map['value'], 'yellow'); + } + + return $map; + } + + public function getID() { + return $this->parameters['id']; + } + + public function getName() { + if (isset($this->parameters['fields']['name'])) { + return $this->parameters['fields']['name']; + } + + return $this->parameters['name']; + } + + public function getStatus() { + $map = $this->getStatusMap(); + return $map['value']; + } + + public function getStatusName() { + $map = $this->getStatusMap(); + return $map['name']; + } + + public function getStatusANSIColor() { + $map = $this->getStatusMap(); + return $map['color.ansi']; + } + + public function getObjectName() { + return pht('Build %d', $this->getID()); + } + + public function getStatusSortVector() { + $status = $this->getStatus(); + + // For now, just sort passed builds first. + if ($this->getStatus() == 'passed') { + $status_class = 1; + } else { + $status_class = 2; + } + + return id(new PhutilSortVector()) + ->addInt($status_class) + ->addString($status); + } + + +} diff --git a/src/workflow/ArcanistLandWorkflow.php b/src/workflow/ArcanistLandWorkflow.php index ec46aa05..37ed3567 100644 --- a/src/workflow/ArcanistLandWorkflow.php +++ b/src/workflow/ArcanistLandWorkflow.php @@ -1391,7 +1391,7 @@ EOTEXT $console = PhutilConsole::getConsole(); - $buildable = head($buildables['data']); + $buildable = head($buildables); if ($buildable['buildableStatus'] == 'passed') { $console->writeOut( @@ -1404,13 +1404,12 @@ EOTEXT switch ($buildable['buildableStatus']) { case 'building': $message = pht( - 'Harbormaster is still building the active diff for this revision:'); + 'Harbormaster is still building the active diff for this revision.'); $prompt = pht('Land revision anyway, despite ongoing build?'); break; case 'failed': $message = pht( - 'Harbormaster failed to build the active diff for this revision. '. - 'Build failures:'); + 'Harbormaster failed to build the active diff for this revision.'); $prompt = pht('Land revision anyway, despite build failures?'); break; default: @@ -1418,28 +1417,25 @@ EOTEXT return; } - $builds = $this->getConduit()->callMethodSynchronous( - 'harbormaster.querybuilds', + $builds = $this->queryBuilds( array( 'buildablePHIDs' => array($buildable['phid']), )); $console->writeOut($message."\n\n"); - foreach ($builds['data'] as $build) { - switch ($build['buildStatus']) { - case 'failed': - $color = 'red'; - break; - default: - $color = 'yellow'; - break; - } - $console->writeOut( - " ** %s ** %s: %s\n", - phutil_utf8_strtoupper($build['buildStatusName']), - pht('Build %d', $build['id']), - $build['name']); + $builds = msort($builds, 'getStatusSortVector'); + foreach ($builds as $build) { + $ansi_color = $build->getStatusANSIColor(); + $status_name = $build->getStatusName(); + $object_name = $build->getObjectName(); + $build_name = $build->getName(); + + echo tsprintf( + " ** %s ** %s: %s\n", + $status_name, + $object_name, + $build_name); } $console->writeOut( @@ -1478,4 +1474,34 @@ EOTEXT $mark_workflow->run(); } + private function queryBuilds(array $constraints) { + $conduit = $this->getConduit(); + + // NOTE: This method only loads the 100 most recent builds. It's rare for + // a revision to have more builds than that and there's currently no paging + // wrapper for "*.search" Conduit API calls available in Arcanist. + + try { + $raw_result = $conduit->callMethodSynchronous( + 'harbormaster.build.search', + array( + 'constraints' => $constraints, + )); + } catch (Exception $ex) { + // If the server doesn't have "harbormaster.build.search" yet (Aug 2016), + // try the older "harbormaster.querybuilds" instead. + $raw_result = $conduit->callMethodSynchronous( + 'harbormaster.querybuilds', + $constraints); + } + + $refs = array(); + foreach ($raw_result['data'] as $raw_data) { + $refs[] = ArcanistBuildRef::newFromConduit($raw_data); + } + + return $refs; + } + + } From f34467914ca0e246c94eac1d9393f8639b8dae9d Mon Sep 17 00:00:00 2001 From: Alex Vandiver Date: Fri, 22 Dec 2017 16:29:31 -0800 Subject: [PATCH 5/8] Add tests for git submodules, based on current behavior Summary: This adds tests that detail the current behavior of `arc` in the presence of `git` submodules. Test Plan: No behavior change; wrote the tests such that they pass. Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: Korvin, epriestley Differential Revision: https://secure.phabricator.com/D18841 --- .../ArcanistRepositoryAPIStateTestCase.php | 24 ++++++++++++++++++ .../state/git_submodules_dirty.git.tgz | Bin 0 -> 63811 bytes .../state/git_submodules_staged.git.tgz | Bin 0 -> 63900 bytes 3 files changed, 24 insertions(+) create mode 100644 src/repository/api/__tests__/state/git_submodules_dirty.git.tgz create mode 100644 src/repository/api/__tests__/state/git_submodules_staged.git.tgz diff --git a/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php b/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php index 689588d7..a8f004c6 100644 --- a/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php +++ b/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php @@ -5,6 +5,8 @@ final class ArcanistRepositoryAPIStateTestCase extends PhutilTestCase { public function testGitStateParsing() { if (Filesystem::binaryExists('git')) { $this->parseState('git_basic.git.tgz'); + $this->parseState('git_submodules_dirty.git.tgz'); + $this->parseState('git_submodules_staged.git.tgz'); } else { $this->assertSkipped(pht('Git is not installed')); } @@ -99,6 +101,28 @@ final class ArcanistRepositoryAPIStateTestCase extends PhutilTestCase { ); $this->assertEqual($expect_range, $api->getCommitRangeStatus()); break; + case 'git_submodules_dirty.git.tgz': + $expect_uncommitted = array( + '.gitmodules' => $f_mod | $f_uns | $f_unc, + 'added/' => $f_unt, + 'deleted' => $f_del | $f_uns | $f_unc, + 'modified-commit' => $f_mod | $f_uns | $f_unc, + 'modified-commit-dirty' => $f_mod | $f_uns | $f_unc, + 'modified-dirty' => $f_ext | $f_uns | $f_unc, + ); + $this->assertEqual($expect_uncommitted, $api->getUncommittedStatus()); + break; + case 'git_submodules_staged.git.tgz': + $expect_uncommitted = array( + '.gitmodules' => $f_mod | $f_uns | $f_unc, + 'added' => $f_add | $f_unc, + 'deleted' => $f_del | $f_unc, + 'modified-commit' => $f_mod | $f_unc, + 'modified-commit-dirty' => $f_mod | $f_uns | $f_unc, + 'modified-dirty' => $f_ext | $f_uns | $f_unc, + ); + $this->assertEqual($expect_uncommitted, $api->getUncommittedStatus()); + break; case 'hg_basic.hg.tgz': $expect_uncommitted = array( 'UNCOMMITTED' => $f_mod | $f_unc, diff --git a/src/repository/api/__tests__/state/git_submodules_dirty.git.tgz b/src/repository/api/__tests__/state/git_submodules_dirty.git.tgz new file mode 100644 index 0000000000000000000000000000000000000000..60cf0551a5c91be9bf5782e2754c4ce97986f7d9 GIT binary patch literal 63811 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

)w%?b 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

sQs{6MF0YA)^W!Gb^&E1Tzw`O`lCZI!roA zE<@Aiqs+I=JRhaS3En&)jBRAa+_uTRe($zWNv=&sgkhaLJm$m0^jFe|yka%7*2y{B rE$k}xYWDtwIOSw6kH#dR5w;)Cmka&>_|n5k3BqbxHil6waZvsTQKRRx literal 0 HcmV?d00001 diff --git a/src/repository/api/__tests__/state/git_submodules_staged.git.tgz b/src/repository/api/__tests__/state/git_submodules_staged.git.tgz new file mode 100644 index 0000000000000000000000000000000000000000..f90621d7d20fa03c803c7bc3a138e78d04ebfea5 GIT binary patch literal 63900 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 Date: Sat, 23 Dec 2017 20:08:56 -0800 Subject: [PATCH 6/8] Accelerate working tree operations in git Summary: Currently, `arc` on `git` uses the following commands to examine the state of the working tree and history; example times for a no-op diff in a 165k-file working tree are also shown: ``` 1) git diff --no-ext-diff --no-textconv --submodule=short --raw 'fb062d4ecce5d9c1786b7bfc8a0dedf6b11fdd96' -- = 1,722,514 us 2a) git diff --no-ext-diff --no-textconv --submodule=short --raw 'HEAD' -- = 1,715,507 us 2b) git ls-files --others --exclude-standard = 2,359,202 us 3) git diff-files --name-only = 1,333,274 us ``` Steps (2a) and (2b) are run concurrently; this results in a total elapsed wallclock time of approximately 5.4 seconds. This is inefficient -- all four of the above steps must both load the index and examine the working copy, which may be slow operations when large repositories are used. Additionally, none of the effort of those stat calls on the working tree, or load time of the index, is shared across the processes. Step (1) is called from `getCommitRangeStatus`, which was split out in D4095; it is currently never called on its own, only ever from `getWorkingCopyStatus`, where it it combined with `getUncommittedStatus`. The current behavior of the method is to return the set of changes //either// in local commits //or// uncommitted in the working tree, which duplicates work that `getUncommittedStatus` is intended to do. Changing the behavior of this method (in Git, and other VCSes) to only examine _committed_ status seems both inline with the name of the method and the original description of it in D4095 -- and also serves to make it much faster, as it is an operation that need not inspect the working tree at all. Steps (2a), (2b), and (3) attempt to gather the state of the working copy, and as such are all I/O bound but must examine nearly identical data. For git 2.11.0 and higher, we can instead rely on the machine-parseable `git status --porcelain=2` format, which provides the information from all of these commands at once. It also allows additional performance improvements, as `git status` has been the focus of several optimizations in the latest versions of git (the untracked cache and fsmonitor services, for instance), which are not available in the lower-level `diff`, `ls-files`, and `diff-files` commands. This has the added benefit of fixing a bug noticed in T9455, in that uncommitted or unstaged changes in modules can now be detected, regardless of if they also have changed their base commit. It further resolves a bug where `.gitmodules` appeared to have unstaged changes, when in reality the unstaged changes were in submodules elsewhere in the tree. For backwards compatibility with versions of git < 2.11.0, the old code is left in place. It is possible that the simpler output from v1 of `git status --porcelain` would also suffice for some of the above benefits, but the payoff of parsing yet another format is deemed insufficient; users wishing improved performance should simply upgrade `git`. Alltogether, these result in the following, for a no-op diff in a 165k-working-file tree: ``` 1) git diff --no-ext-diff --no-textconv --submodule=short --raw 'fb062d4ecce5d9c1786b7bfc8a0dedf6b11fdd96' HEAD -- = 9,227 us 2) git status --porcelain=2 -z = 739,964 us ``` ...for a total of 749ms, an improvement of 4.7s. Depends on D18841. Test Plan: Existing tests. Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: Korvin, epriestley Differential Revision: https://secure.phabricator.com/D18842 --- src/repository/api/ArcanistGitAPI.php | 72 ++++++++++++++++++- src/repository/api/ArcanistMercurialAPI.php | 41 +++-------- src/repository/api/ArcanistSubversionAPI.php | 6 +- .../ArcanistRepositoryAPIStateTestCase.php | 60 +++++++++++++--- 4 files changed, 132 insertions(+), 47 deletions(-) diff --git a/src/repository/api/ArcanistGitAPI.php b/src/repository/api/ArcanistGitAPI.php index d1406096..bb60f71e 100644 --- a/src/repository/api/ArcanistGitAPI.php +++ b/src/repository/api/ArcanistGitAPI.php @@ -52,8 +52,12 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI { } public function getGitVersion() { - list($stdout) = $this->execxLocal('--version'); - return rtrim(str_replace('git version ', '', $stdout)); + static $version = null; + if ($version === null) { + list($stdout) = $this->execxLocal('--version'); + $version = rtrim(str_replace('git version ', '', $stdout)); + } + return $version; } public function getMetadataPath() { @@ -645,8 +649,70 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI { return $this->executeSVNFindRev($hash, 'SVN'); } + private function buildUncommittedStatusViaStatus() { + $status = $this->buildLocalFuture( + array( + 'status --porcelain=2 -z', + )); + list($stdout) = $status->resolvex(); + + $result = new PhutilArrayWithDefaultValue(); + $parts = explode("\0", $stdout); + while (count($parts) > 1) { + $entry = array_shift($parts); + $entry_parts = explode(' ', $entry); + if ($entry_parts[0] == '1') { + $path = $entry_parts[8]; + } else if ($entry_parts[0] == '2') { + $path = $entry_parts[9]; + } else if ($entry_parts[0] == 'u') { + $path = $entry_parts[10]; + } else if ($entry_parts[0] == '?') { + $result[$entry_parts[1]] = self::FLAG_UNTRACKED; + continue; + } + + $result[$path] |= self::FLAG_UNCOMMITTED; + $index_state = substr($entry_parts[1], 0, 1); + $working_state = substr($entry_parts[1], 1, 1); + if ($index_state == 'A') { + $result[$path] |= self::FLAG_ADDED; + } else if ($index_state == 'M') { + $result[$path] |= self::FLAG_MODIFIED; + } else if ($index_state == 'D') { + $result[$path] |= self::FLAG_DELETED; + } + if ($working_state != '.') { + $result[$path] |= self::FLAG_UNSTAGED; + if ($index_state == '.') { + if ($working_state == 'A') { + $result[$path] |= self::FLAG_ADDED; + } else if ($working_state == 'M') { + $result[$path] |= self::FLAG_MODIFIED; + } else if ($working_state == 'D') { + $result[$path] |= self::FLAG_DELETED; + } + } + } + $submodule_tracked = substr($entry_parts[2], 2, 1); + $submodule_untracked = substr($entry_parts[2], 3, 1); + if ($submodule_tracked == 'M' || $submodule_untracked == 'U') { + $result[$path] |= self::FLAG_EXTERNALS; + } + + if ($entry_parts[0] == '2') { + $result[array_shift($parts)] = $result[$path] | self::FLAG_DELETED; + $result[$path] |= self::FLAG_ADDED; + } + } + return $result->toArray(); + } protected function buildUncommittedStatus() { + if (version_compare($this->getGitVersion(), '2.11.0', '>=')) { + return $this->buildUncommittedStatusViaStatus(); + } + $diff_options = $this->getDiffBaseOptions(); if ($this->repositoryHasNoCommits) { @@ -719,7 +785,7 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI { protected function buildCommitRangeStatus() { list($stdout, $stderr) = $this->execxLocal( - 'diff %C --raw %s --', + 'diff %C --raw %s HEAD --', $this->getDiffBaseOptions(), $this->getBaseCommit()); diff --git a/src/repository/api/ArcanistMercurialAPI.php b/src/repository/api/ArcanistMercurialAPI.php index 5fe14327..d6d10a9e 100644 --- a/src/repository/api/ArcanistMercurialAPI.php +++ b/src/repository/api/ArcanistMercurialAPI.php @@ -372,41 +372,18 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI { } protected function buildCommitRangeStatus() { - // TODO: Possibly we should use "hg status --rev X --rev ." for this - // instead, but we must run "hg diff" later anyway in most cases, so - // building and caching it shouldn't hurt us. + list($stdout) = $this->execxLocal( + 'status --rev %s --rev tip', + $this->getBaseCommit()); - $diff = $this->getFullMercurialDiff(); - if (!$diff) { - return array(); + $results = new PhutilArrayWithDefaultValue(); + + $working_status = ArcanistMercurialParser::parseMercurialStatus($stdout); + foreach ($working_status as $path => $mask) { + $results[$path] |= $mask; } - $parser = new ArcanistDiffParser(); - $changes = $parser->parseDiff($diff); - - $status_map = array(); - foreach ($changes as $change) { - $flags = 0; - switch ($change->getType()) { - case ArcanistDiffChangeType::TYPE_ADD: - case ArcanistDiffChangeType::TYPE_MOVE_HERE: - case ArcanistDiffChangeType::TYPE_COPY_HERE: - $flags |= self::FLAG_ADDED; - break; - case ArcanistDiffChangeType::TYPE_CHANGE: - case ArcanistDiffChangeType::TYPE_COPY_AWAY: // Check for changes? - $flags |= self::FLAG_MODIFIED; - break; - case ArcanistDiffChangeType::TYPE_DELETE: - case ArcanistDiffChangeType::TYPE_MOVE_AWAY: - case ArcanistDiffChangeType::TYPE_MULTICOPY: - $flags |= self::FLAG_DELETED; - break; - } - $status_map[$change->getCurrentPath()] = $flags; - } - - return $status_map; + return $results->toArray(); } protected function didReloadWorkingCopy() { diff --git a/src/repository/api/ArcanistSubversionAPI.php b/src/repository/api/ArcanistSubversionAPI.php index 887fa4f3..d8066e96 100644 --- a/src/repository/api/ArcanistSubversionAPI.php +++ b/src/repository/api/ArcanistSubversionAPI.php @@ -45,9 +45,9 @@ final class ArcanistSubversionAPI extends ArcanistRepositoryAPI { } protected function buildCommitRangeStatus() { - // In SVN, the commit range is always "uncommitted changes", so these - // statuses are equivalent. - return $this->getUncommittedStatus(); + // In SVN, there are never any previous commits in the range -- it is all in + // the uncommitted status. + return array(); } protected function buildUncommittedStatus() { diff --git a/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php b/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php index a8f004c6..b6b4c596 100644 --- a/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php +++ b/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php @@ -56,6 +56,16 @@ final class ArcanistRepositoryAPIStateTestCase extends PhutilTestCase { } private function assertCorrectState($test, ArcanistRepositoryAPI $api) { + if ($api instanceof ArcanistGitAPI) { + $version = $api->getGitVersion(); + if (version_compare($version, '2.11.0', '<')) { + // Behavior differs slightly on older versions of git; rather than code + // both variants, skip the tests in the presence of such a git. + $this->assertSkipped(pht('Behavior differs slightly on git < 2.11.0')); + return; + } + } + $f_mod = ArcanistRepositoryAPI::FLAG_MODIFIED; $f_add = ArcanistRepositoryAPI::FLAG_ADDED; $f_del = ArcanistRepositoryAPI::FLAG_DELETED; @@ -70,7 +80,7 @@ final class ArcanistRepositoryAPIStateTestCase extends PhutilTestCase { switch ($test) { case 'svn_basic.svn.tgz': - $expect = array( + $expect_uncommitted = array( 'ADDED' => $f_add, 'COPIED_TO' => $f_add, 'DELETED' => $f_del, @@ -80,8 +90,22 @@ final class ArcanistRepositoryAPIStateTestCase extends PhutilTestCase { 'PROPCHANGE' => $f_mod, 'UNTRACKED' => $f_unt, ); - $this->assertEqual($expect, $api->getUncommittedStatus()); - $this->assertEqual($expect, $api->getCommitRangeStatus()); + $this->assertEqual($expect_uncommitted, $api->getUncommittedStatus()); + + $expect_range = array(); + $this->assertEqual($expect_range, $api->getCommitRangeStatus()); + + $expect_working = array( + 'ADDED' => $f_add, + 'COPIED_TO' => $f_add, + 'DELETED' => $f_del, + 'MODIFIED' => $f_mod, + 'MOVED' => $f_del, + 'MOVED_TO' => $f_add, + 'PROPCHANGE' => $f_mod, + 'UNTRACKED' => $f_unt, + ); + $this->assertEqual($expect_working, $api->getWorkingCopyStatus()); break; case 'git_basic.git.tgz': $expect_uncommitted = array( @@ -96,10 +120,19 @@ final class ArcanistRepositoryAPIStateTestCase extends PhutilTestCase { 'ADDED' => $f_add, 'DELETED' => $f_del, 'MODIFIED' => $f_mod, - 'UNCOMMITTED' => $f_add, 'UNSTAGED' => $f_add, ); $this->assertEqual($expect_range, $api->getCommitRangeStatus()); + + $expect_working = array( + 'ADDED' => $f_add, + 'DELETED' => $f_del, + 'MODIFIED' => $f_mod, + 'UNCOMMITTED' => $f_add | $f_unc, + 'UNSTAGED' => $f_add | $f_mod | $f_uns | $f_unc, + 'UNTRACKED' => $f_unt, + ); + $this->assertEqual($expect_working, $api->getWorkingCopyStatus()); break; case 'git_submodules_dirty.git.tgz': $expect_uncommitted = array( @@ -107,19 +140,19 @@ final class ArcanistRepositoryAPIStateTestCase extends PhutilTestCase { 'added/' => $f_unt, 'deleted' => $f_del | $f_uns | $f_unc, 'modified-commit' => $f_mod | $f_uns | $f_unc, - 'modified-commit-dirty' => $f_mod | $f_uns | $f_unc, - 'modified-dirty' => $f_ext | $f_uns | $f_unc, + 'modified-commit-dirty' => $f_ext | $f_mod | $f_uns | $f_unc, + 'modified-dirty' => $f_ext | $f_mod | $f_uns | $f_unc, ); $this->assertEqual($expect_uncommitted, $api->getUncommittedStatus()); break; case 'git_submodules_staged.git.tgz': $expect_uncommitted = array( - '.gitmodules' => $f_mod | $f_uns | $f_unc, + '.gitmodules' => $f_mod | $f_unc, 'added' => $f_add | $f_unc, 'deleted' => $f_del | $f_unc, 'modified-commit' => $f_mod | $f_unc, - 'modified-commit-dirty' => $f_mod | $f_uns | $f_unc, - 'modified-dirty' => $f_ext | $f_uns | $f_unc, + 'modified-commit-dirty' => $f_ext | $f_mod | $f_uns | $f_unc, + 'modified-dirty' => $f_ext | $f_mod | $f_uns | $f_unc, ); $this->assertEqual($expect_uncommitted, $api->getUncommittedStatus()); break; @@ -137,6 +170,15 @@ final class ArcanistRepositoryAPIStateTestCase extends PhutilTestCase { 'UNCOMMITTED' => $f_add, ); $this->assertEqual($expect_range, $api->getCommitRangeStatus()); + + $expect_working = array( + 'ADDED' => $f_add, + 'DELETED' => $f_del, + 'MODIFIED' => $f_mod, + 'UNCOMMITTED' => $f_add | $f_mod | $f_unc, + 'UNTRACKED' => $f_unt, + ); + $this->assertEqual($expect_working, $api->getWorkingCopyStatus()); break; default: throw new Exception( From 3d06bd4c568c844cf9b42d7c0671a2698cc03899 Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 26 Dec 2017 08:31:03 -0800 Subject: [PATCH 7/8] Fix a minor 'buildableStatus' error in "arc land" See D18837. I made a mistake here with rigging this for testing; this line was changed incorrectly. --- src/workflow/ArcanistLandWorkflow.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/workflow/ArcanistLandWorkflow.php b/src/workflow/ArcanistLandWorkflow.php index 37ed3567..ada0168c 100644 --- a/src/workflow/ArcanistLandWorkflow.php +++ b/src/workflow/ArcanistLandWorkflow.php @@ -1391,7 +1391,7 @@ EOTEXT $console = PhutilConsole::getConsole(); - $buildable = head($buildables); + $buildable = head($buildables['data']); if ($buildable['buildableStatus'] == 'passed') { $console->writeOut( From 2e02332216c692e9bcedfa95d30602173050d7ca Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 16 Jan 2018 08:15:08 -0800 Subject: [PATCH 8/8] Add trailing tabs when generating synthetic Git diffs for files with spaces Summary: Fixes T8768. See PHI294. See that task for more details. Git, Mercurial, `diff`, and `patch` have conspired to make things weird. To correctly handle files with spaces in the way everything else does and expects, we need to emit semantic trailing whitespace literals. Test Plan: - Created a file with spaces in it in a Mercurial repositroy, committed it, diffed it into a revision. - Used `arc patch` to apply the change to a clean copy of the repository. - Before patch: Mercurial incorrectly creates a file named `X`, not a file named `X Y.txt`. - After patch: `arc patch` commit is identical to genuine commit. - Also added test coverage. The other general behaviors here are fairly well covered already. Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T8768 Differential Revision: https://secure.phabricator.com/D18869 --- src/parser/ArcanistBundle.php | 21 +++++++++++++ .../__tests__/ArcanistBundleTestCase.php | 31 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/parser/ArcanistBundle.php b/src/parser/ArcanistBundle.php index 8586e281..7ec8b89d 100644 --- a/src/parser/ArcanistBundle.php +++ b/src/parser/ArcanistBundle.php @@ -424,6 +424,9 @@ final class ArcanistBundle extends Phobject { $cur_target = 'b/'.$cur_path; } + $old_target = $this->encodeGitTargetPath($old_target); + $cur_target = $this->encodeGitTargetPath($cur_target); + $result[] = "diff --git {$old_index} {$cur_index}".$eol; if ($type == ArcanistDiffChangeType::TYPE_ADD) { @@ -591,6 +594,24 @@ final class ArcanistBundle extends Phobject { return $results; } + private function encodeGitTargetPath($path) { + // See T8768. If a target path contains spaces, it must be terminated with + // a tab. If we don't do this, Mercurial has the wrong behavior when + // applying the patch. This results in a semantic trailing whitespace + // character: + // + // +++ b/X Y.txt\t + // + // Everyone is at fault here and there are no winners. + + if (strpos($path, ' ') !== false) { + $path = $path."\t"; + } + + return $path; + } + + private function getOldPath(ArcanistDiffChange $change) { $old_path = $change->getOldPath(); $type = $change->getType(); diff --git a/src/parser/__tests__/ArcanistBundleTestCase.php b/src/parser/__tests__/ArcanistBundleTestCase.php index 8fa78f0a..94b3517f 100644 --- a/src/parser/__tests__/ArcanistBundleTestCase.php +++ b/src/parser/__tests__/ArcanistBundleTestCase.php @@ -33,6 +33,37 @@ final class ArcanistBundleTestCase extends PhutilTestCase { return ArcanistBundle::newFromDiff($diff); } + public function testTabEncoding() { + // See T8768. Test that we add semantic trailing tab literals to diffs + // touching files with spaces in them. This is a pain to encode using the + // support toolset here so just do it manually. + + // Note that the "b/X Y.txt" line has a trailing tab literal. + + $diff = <<getChanges(); + $this->assertEqual(1, count($changes)); + + // The path should parse as "X Y.txt" despite the trailing tab. + $change = head($changes); + $this->assertEqual('X Y.txt', $change->getCurrentPath()); + + // The tab should be restored when the diff is output again. + $this->assertEqual($diff, $bundle->toGitPatch()); + } + /** * Unarchive a saved git repository and apply each commit as though via * "arc patch", verifying that the resulting tree hash is identical to the