From 6f20a94b074a1c2dc82d429fa04d365b4bcf65b6 Mon Sep 17 00:00:00 2001 From: Sigurd Meldgaard Date: Mon, 30 May 2022 13:32:58 +0200 Subject: [PATCH] Handle missing pubspec.lock in dependency_services list (#3439) --- lib/src/command/dependency_services.dart | 2 +- .../dependency_services_test.dart | 42 +++- .../No pubspec.lock.txt | 205 ++++++++++++++++++ 3 files changed, 245 insertions(+), 4 deletions(-) create mode 100644 test/testdata/goldens/dependency_services/dependency_services_test/No pubspec.lock.txt diff --git a/lib/src/command/dependency_services.dart b/lib/src/command/dependency_services.dart index 19cc867aa..5b252aecd 100644 --- a/lib/src/command/dependency_services.dart +++ b/lib/src/command/dependency_services.dart @@ -281,7 +281,7 @@ class DependencyServicesListCommand extends PubCommand { final dependencies = []; final result = {'dependencies': dependencies}; - for (final package in currentPackages) { + for (final package in currentPackages.where((p) => !p.isRoot)) { dependencies.add({ 'name': package.name, 'version': package.versionOrHash(), diff --git a/test/dependency_services/dependency_services_test.dart b/test/dependency_services/dependency_services_test.dart index b007a6b58..08542ea91 100644 --- a/test/dependency_services/dependency_services_test.dart +++ b/test/dependency_services/dependency_services_test.dart @@ -17,12 +17,18 @@ import '../test_pub.dart'; void manifestAndLockfile(GoldenTestContext context) { String catFile(String filename) { - final contents = filterUnstableLines( - File(p.join(d.sandbox, appPath, filename)).readAsLinesSync()); + final path = p.join(d.sandbox, appPath, filename); + if (File(path).existsSync()) { + final contents = filterUnstableLines(File(path).readAsLinesSync()); - return ''' + return ''' \$ cat $filename ${contents.join('\n')}'''; + } else { + return ''' +\$ cat $filename +No such file $filename.'''; + } } context.expectNextSection(''' @@ -141,6 +147,36 @@ Future main() async { }); }); + testWithGolden('No pubspec.lock', (context) async { + final server = (await servePackages()) + ..serve('foo', '1.2.3', deps: {'transitive': '^1.0.0'}) + ..serve('foo', '2.2.3') + ..serve('transitive', '1.0.0'); + + await d.git('bar.git', [d.libPubspec('bar', '1.0.0')]).create(); + + await d.dir(appPath, [ + d.pubspec({ + 'name': 'app', + 'dependencies': { + 'foo': '^1.0.0', + 'bar': { + 'git': {'url': '../bar.git'}, + }, + }, + }) + ]).create(); + + server.dontAllowDownloads(); + await listReportApply( + context, + [ + _PackageVersion('foo', '2.2.3'), + _PackageVersion('transitive', null), + ], + ); + }); + testWithGolden('Compatible', (context) async { final server = (await servePackages()) ..serve('foo', '1.2.3') diff --git a/test/testdata/goldens/dependency_services/dependency_services_test/No pubspec.lock.txt b/test/testdata/goldens/dependency_services/dependency_services_test/No pubspec.lock.txt new file mode 100644 index 000000000..ca80a34d8 --- /dev/null +++ b/test/testdata/goldens/dependency_services/dependency_services_test/No pubspec.lock.txt @@ -0,0 +1,205 @@ +# GENERATED BY: test/dependency_services/dependency_services_test.dart + +$ cat pubspec.yaml +{"name":"app","dependencies":{"foo":"^1.0.0","bar":{"git":{"url":"../bar.git"}}},"environment":{"sdk":">=0.1.2 <1.0.0"}} +$ cat pubspec.lock +No such file pubspec.lock. +-------------------------------- END OF OUTPUT --------------------------------- + +## Section list +$ dependency_services list +{ + "dependencies": [ + { + "name": "bar", + "version": "92cdd4ac724a6da0db2a69ac149820aa220e8518", + "kind": "direct", + "constraint": "any", + "source": { + "type": "git", + "description": { + "url": "../bar.git", + "ref": "HEAD", + "resolved-ref": "92cdd4ac724a6da0db2a69ac149820aa220e8518", + "path": "." + } + } + }, + { + "name": "foo", + "version": "1.2.3", + "kind": "direct", + "constraint": "^1.0.0", + "source": { + "type": "hosted", + "description": { + "name": "foo", + "url": "http://localhost:$PORT" + } + } + }, + { + "name": "transitive", + "version": "1.0.0", + "kind": "transitive", + "constraint": "null", + "source": { + "type": "hosted", + "description": { + "name": "transitive", + "url": "http://localhost:$PORT" + } + } + } + ] +} + +-------------------------------- END OF OUTPUT --------------------------------- + +## Section report +$ dependency_services report +{ + "dependencies": [ + { + "name": "bar", + "version": "92cdd4ac724a6da0db2a69ac149820aa220e8518", + "kind": "direct", + "source": { + "type": "git", + "description": { + "url": "../bar.git", + "ref": "HEAD", + "resolved-ref": "92cdd4ac724a6da0db2a69ac149820aa220e8518", + "path": "." + } + }, + "latest": "92cdd4ac724a6da0db2a69ac149820aa220e8518", + "constraint": "any", + "compatible": [], + "singleBreaking": [], + "multiBreaking": [ + { + "name": "foo", + "version": "2.2.3", + "kind": "direct", + "source": { + "type": "hosted", + "description": { + "name": "foo", + "url": "http://localhost:$PORT" + } + }, + "constraintBumped": "^2.2.3", + "constraintWidened": ">=1.0.0 <3.0.0", + "constraintBumpedIfNeeded": "^2.2.3", + "previousVersion": "1.2.3", + "previousConstraint": "^1.0.0", + "previousSource": { + "type": "hosted", + "description": { + "name": "foo", + "url": "http://localhost:$PORT" + } + } + } + ] + }, + { + "name": "foo", + "version": "1.2.3", + "kind": "direct", + "source": { + "type": "hosted", + "description": { + "name": "foo", + "url": "http://localhost:$PORT" + } + }, + "latest": "2.2.3", + "constraint": "^1.0.0", + "compatible": [], + "singleBreaking": [ + { + "name": "foo", + "version": "2.2.3", + "kind": "direct", + "source": { + "type": "hosted", + "description": { + "name": "foo", + "url": "http://localhost:$PORT" + } + }, + "constraintBumped": "^2.2.3", + "constraintWidened": ">=1.0.0 <3.0.0", + "constraintBumpedIfNeeded": "^2.2.3", + "previousVersion": "1.2.3", + "previousConstraint": "^1.0.0", + "previousSource": { + "type": "hosted", + "description": { + "name": "foo", + "url": "http://localhost:$PORT" + } + } + } + ], + "multiBreaking": [ + { + "name": "foo", + "version": "2.2.3", + "kind": "direct", + "source": { + "type": "hosted", + "description": { + "name": "foo", + "url": "http://localhost:$PORT" + } + }, + "constraintBumped": "^2.2.3", + "constraintWidened": ">=1.0.0 <3.0.0", + "constraintBumpedIfNeeded": "^2.2.3", + "previousVersion": "1.2.3", + "previousConstraint": "^1.0.0", + "previousSource": { + "type": "hosted", + "description": { + "name": "foo", + "url": "http://localhost:$PORT" + } + } + } + ] + }, + { + "name": "transitive", + "version": "1.0.0", + "kind": "transitive", + "source": { + "type": "hosted", + "description": { + "name": "transitive", + "url": "http://localhost:$PORT" + } + }, + "latest": "1.0.0", + "constraint": null, + "compatible": [], + "singleBreaking": [], + "multiBreaking": [] + } + ] +} + +-------------------------------- END OF OUTPUT --------------------------------- + +## Section apply +$ echo '{"dependencyChanges":[{"name":"foo","version":"2.2.3"},{"name":"transitive","version":null}]}' | dependency_services apply +{"dependencies":[]} + +-------------------------------- END OF OUTPUT --------------------------------- + +$ cat pubspec.yaml +{"name":"app","dependencies":{"foo":^2.2.3,"bar":{"git":{"url":"../bar.git"}}},"environment":{"sdk":">=0.1.2 <1.0.0"}} +$ cat pubspec.lock +No such file pubspec.lock.