@@ -177,23 +177,21 @@ abstract class PubPackageMeta extends PackageMeta {
177
177
178
178
static final _sdkDirParent = < String , Folder > {};
179
179
180
- /// If [dir ] is inside a Dart SDK, returns the directory of the SDK, and `null`
180
+ /// If [folder ] is inside a Dart SDK, returns the directory of the SDK, and `null`
181
181
/// otherwise.
182
- static Folder sdkDirParent (Folder dir , ResourceProvider resourceProvider) {
182
+ static Folder sdkDirParent (Folder folder , ResourceProvider resourceProvider) {
183
183
var pathContext = resourceProvider.pathContext;
184
- var dirPathCanonical = pathContext.canonicalize (dir .path);
184
+ var dirPathCanonical = pathContext.canonicalize (folder .path);
185
185
if (! _sdkDirParent.containsKey (dirPathCanonical)) {
186
186
_sdkDirParent[dirPathCanonical] = null ;
187
- while ( dir.exists ) {
187
+ for ( var dir in folder.withAncestors ) {
188
188
if (_sdkDirFilePaths.every ((List <String > l) {
189
189
return l.any ((f) =>
190
190
resourceProvider.getFile (pathContext.join (dir.path, f)).exists);
191
191
})) {
192
192
_sdkDirParent[dirPathCanonical] = dir;
193
193
break ;
194
194
}
195
- if (dir.isRoot) break ;
196
- dir = dir.parent2;
197
195
}
198
196
}
199
197
return _sdkDirParent[dirPathCanonical];
@@ -224,38 +222,36 @@ abstract class PubPackageMeta extends PackageMeta {
224
222
/// [dir.absolute.path] . Multiple [dir.absolute.path] s will resolve to the
225
223
/// same object if they are part of the same package. Returns null
226
224
/// if the directory is not part of a known package.
227
- static PubPackageMeta fromDir (Folder dir, ResourceProvider resourceProvider) {
225
+ static PubPackageMeta fromDir (
226
+ Folder folder, ResourceProvider resourceProvider) {
228
227
var pathContext = resourceProvider.pathContext;
229
- var original = resourceProvider.getFolder (pathContext.absolute (dir.path));
230
- dir = original;
228
+ var original =
229
+ resourceProvider.getFolder (pathContext.absolute (folder.path));
230
+ folder = original;
231
231
if (! original.exists) {
232
232
throw PackageMetaFailure (
233
233
'fatal error: unable to locate the input directory at ${original .path }.' );
234
234
}
235
235
236
- if (! _packageMetaCache.containsKey (dir .path)) {
236
+ if (! _packageMetaCache.containsKey (folder .path)) {
237
237
PackageMeta packageMeta;
238
238
// There are pubspec.yaml files inside the SDK. Ignore them.
239
- var parentSdkDir = sdkDirParent (dir , resourceProvider);
239
+ var parentSdkDir = sdkDirParent (folder , resourceProvider);
240
240
if (parentSdkDir != null ) {
241
241
packageMeta = _SdkMeta (parentSdkDir, resourceProvider);
242
242
} else {
243
- while ( dir.exists ) {
243
+ for ( var dir in folder.withAncestors ) {
244
244
var pubspec = resourceProvider
245
245
.getFile (pathContext.join (dir.path, 'pubspec.yaml' ));
246
246
if (pubspec.exists) {
247
247
packageMeta = _FilePackageMeta (dir, resourceProvider);
248
248
break ;
249
249
}
250
- // Allow a package to be at root (possible in a Windows setting with
251
- // drive letter mappings).
252
- if (dir.isRoot) break ;
253
- dir = dir.parent2;
254
250
}
255
251
}
256
- _packageMetaCache[pathContext.absolute (dir .path)] = packageMeta;
252
+ _packageMetaCache[pathContext.absolute (folder .path)] = packageMeta;
257
253
}
258
- return _packageMetaCache[pathContext.absolute (dir .path)];
254
+ return _packageMetaCache[pathContext.absolute (folder .path)];
259
255
}
260
256
261
257
@override
0 commit comments