@@ -379,4 +379,69 @@ void main() {
379379 expect (lockFile.lastModifiedSync (), lockfileTimestamp);
380380 expect (workspaceRefFile.lastModifiedSync (), workspaceRefTimestamp);
381381 });
382+
383+ test (
384+ 'pub get touches unchanged resolution files after pubspec edits' ,
385+ () async {
386+ final server = await servePackages ();
387+ server.serve ('foo' , '1.0.0' );
388+
389+ await d.dir (appPath, [
390+ d.appPubspec (
391+ dependencies: {'foo' : 'any' },
392+ extras: {
393+ 'workspace' : ['foo' ],
394+ 'environment' : {'sdk' : '^3.5.0' },
395+ },
396+ ),
397+ d.dir ('foo' , [d.libPubspec ('foo' , '1.0.0' , resolutionWorkspace: true )]),
398+ ]).create ();
399+
400+ await pubGet (environment: {'_PUB_TEST_SDK_VERSION' : '3.5.0' });
401+ final rootPubspec = File (p.join (sandbox, appPath, 'pubspec.yaml' ));
402+ final workspacePubspec = File (
403+ p.join (sandbox, appPath, 'foo' , 'pubspec.yaml' ),
404+ );
405+ final lockFile = File (p.join (sandbox, appPath, 'pubspec.lock' ));
406+ final packageConfigFile = File (
407+ p.join (sandbox, appPath, '.dart_tool' , 'package_config.json' ),
408+ );
409+ final lockfileContents = lockFile.readAsStringSync ();
410+ final packageConfig = jsonDecode (packageConfigFile.readAsStringSync ());
411+
412+ // timestamp resolution is rather poor especially on windows.
413+ await Future <void >.delayed (const Duration (seconds: 1 ));
414+ rootPubspec.writeAsStringSync (
415+ '${rootPubspec .readAsStringSync ()}\n # hi\n ' ,
416+ );
417+ workspacePubspec.writeAsStringSync (
418+ '${workspacePubspec .readAsStringSync ()}\n # hi\n ' ,
419+ );
420+
421+ expect (
422+ rootPubspec.lastModifiedSync ().isAfter (lockFile.lastModifiedSync ()),
423+ isTrue,
424+ );
425+ expect (
426+ workspacePubspec.lastModifiedSync ().isAfter (
427+ lockFile.lastModifiedSync (),
428+ ),
429+ isTrue,
430+ );
431+
432+ await pubGet (environment: {'_PUB_TEST_SDK_VERSION' : '3.5.0' });
433+
434+ expect (lockFile.readAsStringSync (), lockfileContents);
435+ expect (jsonDecode (packageConfigFile.readAsStringSync ()), packageConfig);
436+
437+ final lockFileModified = lockFile.lastModifiedSync ();
438+ final packageConfigModified = packageConfigFile.lastModifiedSync ();
439+ expect (rootPubspec.lastModifiedSync ().isAfter (lockFileModified), isFalse);
440+ expect (
441+ workspacePubspec.lastModifiedSync ().isAfter (lockFileModified),
442+ isFalse,
443+ );
444+ expect (lockFileModified.isAfter (packageConfigModified), isFalse);
445+ },
446+ );
382447}
0 commit comments