Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[tool] Add a flag to skip cleanup #4357

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 19 additions & 5 deletions script/tool/lib/src/update_excerpts_command.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'dart:io' as io;

import 'package:file/file.dart';
import 'package:git/git.dart';
import 'package:meta/meta.dart';
import 'package:platform/platform.dart';
import 'package:yaml/yaml.dart';
import 'package:yaml_edit/yaml_edit.dart';
Expand All @@ -30,18 +31,24 @@ class UpdateExcerptsCommand extends PackageLoopingCommand {
gitDir: gitDir,
) {
argParser.addFlag(_failOnChangeFlag, hide: true);
argParser.addFlag(_noCleanupFlag,
help: 'Skips the step of cleaning up the excerpt extraction output. '
'This can be useful when debugging extraction or checking paths to '
'reference in snippets.');
}

static const String _failOnChangeFlag = 'fail-on-change';
static const String _noCleanupFlag = 'no-cleanup';

static const String _buildRunnerConfigName = 'excerpt';
// The name of the build_runner configuration file that will be in an example
// directory if the package is set up to use `code-excerpt`.
static const String _buildRunnerConfigFile =
'build.$_buildRunnerConfigName.yaml';

// The relative directory path to put the extracted excerpt yaml files.
static const String _excerptOutputDir = 'excerpts';
/// The relative directory path to put the extracted excerpt yaml files.
@visibleForTesting
static const String excerptOutputDir = 'excerpts';

// The filename to store the pre-modification copy of the pubspec.
static const String _originalPubspecFilename =
Expand Down Expand Up @@ -97,9 +104,16 @@ class UpdateExcerptsCommand extends PackageLoopingCommand {
// Clean up the pubspec changes and extracted excerpts directory.
_undoPubspecChanges(example);
final Directory excerptDirectory =
example.directory.childDirectory(_excerptOutputDir);
example.directory.childDirectory(excerptOutputDir);
if (excerptDirectory.existsSync()) {
excerptDirectory.deleteSync(recursive: true);
if (getBoolArg(_noCleanupFlag)) {
final String relativeDir =
getRelativePosixPath(excerptDirectory, from: package.directory);
print(
'\n\nSKIPPING CLEANUP: Extraction output is in $relativeDir/');
} else {
excerptDirectory.deleteSync(recursive: true);
}
}
}
}
Expand Down Expand Up @@ -134,7 +148,7 @@ class UpdateExcerptsCommand extends PackageLoopingCommand {
'--config',
_buildRunnerConfigName,
'--output',
_excerptOutputDir,
excerptOutputDir,
'--delete-conflicting-outputs',
],
workingDir: example.directory);
Expand Down
56 changes: 52 additions & 4 deletions script/tool/test/update_excerpts_command_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ void main() {
'--config',
'excerpt',
'--output',
'excerpts',
UpdateExcerptsCommand.excerptOutputDir,
'--delete-conflicting-outputs',
],
example.path),
Expand All @@ -85,7 +85,7 @@ void main() {
'--config',
'excerpt',
'--output',
'excerpts',
UpdateExcerptsCommand.excerptOutputDir,
'--delete-conflicting-outputs',
],
example.path),
Expand Down Expand Up @@ -129,7 +129,7 @@ void main() {
'--config',
'excerpt',
'--output',
'excerpts',
UpdateExcerptsCommand.excerptOutputDir,
'--delete-conflicting-outputs',
],
example.path),
Expand Down Expand Up @@ -174,7 +174,7 @@ void main() {
'--config',
'excerpt',
'--output',
'excerpts',
UpdateExcerptsCommand.excerptOutputDir,
'--delete-conflicting-outputs',
],
example.path),
Expand Down Expand Up @@ -416,4 +416,52 @@ void main() {
contains('Unable to determine local file state'),
]));
});

test('cleans up excerpt output by default', () async {
final RepositoryPackage package = createFakePackage(
'a_package', packagesDir,
extraFiles: <String>[kReadmeExcerptConfigPath]);
// Simulate the creation of the output directory.
final Directory excerptOutputDir = package
.getExamples()
.first
.directory
.childDirectory(UpdateExcerptsCommand.excerptOutputDir);
excerptOutputDir.createSync(recursive: true);

const String changedFilePath = 'packages/a_plugin/linux/CMakeLists.txt';
processRunner.mockProcessesForExecutable['git'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: changedFilePath)),
];

await runCapturingPrint(runner, <String>['update-excerpts']);

expect(excerptOutputDir.existsSync(), false);
});

test('cleans up excerpt output by default', () async {
final RepositoryPackage package = createFakePackage(
'a_package', packagesDir,
extraFiles: <String>[kReadmeExcerptConfigPath]);
// Simulate the creation of the output directory.
const String outputDirName = UpdateExcerptsCommand.excerptOutputDir;
final Directory excerptOutputDir =
package.getExamples().first.directory.childDirectory(outputDirName);
excerptOutputDir.createSync(recursive: true);

const String changedFilePath = 'packages/a_plugin/linux/CMakeLists.txt';
processRunner.mockProcessesForExecutable['git'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: changedFilePath)),
];

final List<String> output = await runCapturingPrint(
runner, <String>['update-excerpts', '--no-cleanup']);

expect(
output,
containsAllInOrder(<Matcher>[
contains('Extraction output is in example/$outputDirName/'),
]));
expect(excerptOutputDir.existsSync(), true);
});
}