Oolite
Loading...
Searching...
No Matches
OOFileScannerVerifierStage Class Reference

#include <OOFileScannerVerifierStage.h>

+ Inheritance diagram for OOFileScannerVerifierStage:
+ Collaboration diagram for OOFileScannerVerifierStage:

Instance Methods

(BOOL) - fileExists:inFolder:referencedFrom:checkBuiltIn:
 
(NSString *) - pathForFile:inFolder:referencedFrom:checkBuiltIn:
 
(NSData *) - dataForFile:inFolder:referencedFrom:checkBuiltIn:
 
(id) - plistNamed:inFolder:referencedFrom:checkBuiltIn:
 
(id) - displayNameForFile:andFolder:
 
(NSArray *) - filesInFolder:
 
(void) - dealloc [implementation]
 
(NSString *) - name [implementation]
 
(void) - run [implementation]
 
(void) - scanForFiles [implementation]
 
(void) - checkRootFolders [implementation]
 
(void) - checkKnownFiles [implementation]
 
(NSDictionary *) - lowercaseMap: [implementation]
 
(NSDictionary *) - scanDirectory: [implementation]
 
(void) - checkPListFormat:file:folder: [implementation]
 
(NSSet *) - constructReadMeNames [implementation]
 
(void) - checkConfigFiles [implementation]
 
- Instance Methods inherited from OOOXPVerifierStage
(OOOXPVerifier *) - verifier
 
(BOOL) - completed
 
(NSSet *) - dependencies
 
(NSSet *) - dependents
 
(BOOL) - shouldRun
 
(id) - init [implementation]
 
(id) - description [implementation]
 
(void) - setVerifier: [implementation]
 
(BOOL) - isDependentOf: [implementation]
 
(void) - registerDependency: [implementation]
 
(void) - dependencyRegistrationComplete [implementation]
 
(BOOL) - canRun [implementation]
 
(void) - performRun [implementation]
 
(void) - noteSkipped [implementation]
 
(NSSet *) - resolvedDependencies [implementation]
 
(NSSet *) - resolvedDependents [implementation]
 
(void) - registerDepedent: [implementation]
 
(void) - dependencyCompleted: [implementation]
 

Class Methods

(NSString *) + nameForDependencyForVerifier:
 

Private Attributes

NSString * _basePath
 
NSMutableSet * _usedFiles
 
NSMutableSet * _caseWarnings
 
NSDictionary * _directoryListings
 
NSDictionary * _directoryCases
 
NSMutableSet * _badPLists
 
NSSet * _junkFileNames
 
NSSet * _skipDirectoryNames
 

Detailed Description

Definition at line 36 of file OOFileScannerVerifierStage.h.

Method Documentation

◆ checkConfigFiles

- (void) checkConfigFiles
implementation

Provided by category OOFileScannerVerifierStage(OOPrivate).

Definition at line 756 of file OOFileScannerVerifierStage.m.

443{
444 NSArray *knownNames = nil;
445 NSString *name = nil,
446 *lcName = nil,
447 *realFileName = nil;
448 BOOL inConfigDir;
449
450 knownNames = [[self verifier] configurationArrayForKey:@"knownConfigFiles"];
451 foreach (name, knownNames)
452 {
453 if (![name isKindOfClass:[NSString class]]) continue;
454
455 /* In theory, we could use -fileExists:inFolder:referencedFrom:checkBuiltIn:
456 here, but we want a different error message.
457 */
458
459 lcName = [name lowercaseString];
460 realFileName = [[_directoryListings oo_dictionaryForKey:@"config"] objectForKey:lcName];
461 inConfigDir = realFileName != nil;
462 if (!inConfigDir) realFileName = [[_directoryListings oo_dictionaryForKey:@""] objectForKey:lcName];
463 if (realFileName == nil) continue;
464
465 if (![realFileName isEqualToString:name])
466 {
467 if (inConfigDir) realFileName = [@"Config" stringByAppendingPathComponent:realFileName];
468 OOLog(@"verifyOXP.files.caseMismatch", @"***** ERROR: case mismatch: configuration file '%@' should be called '%@'.", realFileName, name);
469 }
470 }
471}
#define OOLog(class, format,...)
Definition OOLogging.h:88
return nil

◆ checkKnownFiles

- (void) checkKnownFiles
implementation

Provided by category OOFileScannerVerifierStage(OOPrivate).

Definition at line 756 of file OOFileScannerVerifierStage.m.

475{
476 NSDictionary *directories = nil;
477 NSString *directory = nil,
478 *lcDirectory = nil;
479 NSArray *fileList = nil;
480 NSString *name = nil,
481 *lcName = nil,
482 *realFileName = nil;
483 BOOL inDirectory;
484
485 directories = [[self verifier] configurationDictionaryForKey:@"knownFiles"];
486 foreachkey (directory, directories)
487 {
488 fileList = [directories objectForKey:directory];
489 lcDirectory = [directory lowercaseString];
490 foreach (name, fileList)
491 {
492 if (![name isKindOfClass:[NSString class]]) continue;
493
494 /* In theory, we could use -fileExists:inFolder:referencedFrom:checkBuiltIn:
495 here, but we want a different error message.
496 */
497
498 lcName = [name lowercaseString];
499 realFileName = [[_directoryListings oo_dictionaryForKey:lcDirectory] objectForKey:lcName];
500 inDirectory = (realFileName != nil);
501 if (!inDirectory)
502 {
503 // Allow for files in root directory of OXP
504 realFileName = [[_directoryListings oo_dictionaryForKey:@""] objectForKey:lcName];
505 }
506 if (realFileName == nil) continue;
507
508 if (![realFileName isEqualToString:name])
509 {
510 if (inDirectory) realFileName = [directory stringByAppendingPathComponent:realFileName];
511 OOLog(@"verifyOXP.files.caseMismatch", @"***** ERROR: case mismatch: file '%@' should be called '%@'.", realFileName, name);
512 }
513 }
514 }
515}
#define foreachkey(VAR, DICT)
Definition OOCocoa.h:353

◆ checkPListFormat:file:folder:

- (void) checkPListFormat: (NSPropertyListFormat)  format
file: (NSString *)  file
folder: (NSString *)  folder 
implementation

Provided by category OOFileScannerVerifierStage(OOPrivate).

Definition at line 756 of file OOFileScannerVerifierStage.m.

611 :(NSPropertyListFormat)format file:(NSString *)file folder:(NSString *)folder
612{
613 NSString *weirdnessKey = nil;
614 NSString *formatDesc = nil;
615 NSString *displayPath = nil;
616
617 if (format != NSPropertyListOpenStepFormat && format != NSPropertyListXMLFormat_v1_0)
618 {
619 displayPath = [self displayNameForFile:file andFolder:folder];
620 weirdnessKey = [displayPath lowercaseString];
621
622 if (![_badPLists containsObject:weirdnessKey])
623 {
624 // Warn about "non-standard" format
625 [_badPLists addObject:weirdnessKey];
626
627 switch (format)
628 {
629 case NSPropertyListBinaryFormat_v1_0:
630 formatDesc = @"Apple binary format";
631 break;
632
633#if OOLITE_GNUSTEP
634 case NSPropertyListGNUstepFormat:
635 formatDesc = @"GNUstep text format";
636 break;
637
638 case NSPropertyListGNUstepBinaryFormat:
639 formatDesc = @"GNUstep binary format";
640 break;
641#endif
642
643 default:
644 formatDesc = [NSString stringWithFormat:@"unknown format (%i)", (int)format];
645 }
646
647 OOLog(@"verifyOXP.plist.weirdFormat", @"----- WARNING: Property list %@ is in %@; OpenStep text format and XML format are the recommended formats for Oolite.", displayPath, formatDesc);
648 }
649 }
650}

◆ checkRootFolders

- (void) checkRootFolders
implementation

Provided by category OOFileScannerVerifierStage(OOPrivate).

Definition at line 756 of file OOFileScannerVerifierStage.m.

418{
419 NSArray *knownNames = nil;
420 NSString *name = nil;
421 NSString *lcName = nil;
422 NSString *actual = nil;
423
424 knownNames = [[self verifier] configurationArrayForKey:@"knownRootDirectories"];
425 foreach (name, knownNames)
426 {
427 if (![name isKindOfClass:[NSString class]]) continue;
428
429 lcName = [name lowercaseString];
430 actual = [_directoryCases objectForKey:lcName];
431 if (actual == nil) continue;
432
433 if (![actual isEqualToString:name])
434 {
435 OOLog(@"verifyOXP.files.caseMismatch", @"***** ERROR: case mismatch: directory '%@' should be called '%@'.", actual, name);
436 }
437 [_caseWarnings addObject:lcName];
438 }
439}

◆ constructReadMeNames

- (NSSet *) constructReadMeNames
implementation

Provided by category OOFileScannerVerifierStage(OOPrivate).

Definition at line 756 of file OOFileScannerVerifierStage.m.

654{
655 NSDictionary *dict = nil;
656 NSArray *stems = nil,
657 *extensions = nil;
658 NSMutableSet *result = nil;
659 NSUInteger i, j, stemCount, extCount;
660 NSString *stem = nil,
661 *extension = nil;
662
663 dict = [[self verifier] configurationDictionaryForKey:@"readMeNames"];
664 stems = [dict oo_arrayForKey:@"stems"];
665 extensions = [dict oo_arrayForKey:@"extensions"];
666 stemCount = [stems count];
667 extCount = [extensions count];
668 if (stemCount * extCount == 0) return nil;
669
670 // Construct all stem+extension permutations
671 result = [NSMutableSet setWithCapacity:stemCount * extCount];
672 for (i = 0; i != stemCount; ++i)
673 {
674 stem = [[stems oo_stringAtIndex:i] lowercaseString];
675 if (stem != nil)
676 {
677 for (j = 0; j != extCount; ++j)
678 {
679 extension = [[extensions oo_stringAtIndex:j] lowercaseString];
680 if (extension != nil)
681 {
682 [result addObject:[stem stringByAppendingString:extension]];
683 }
684 }
685 }
686 }
687
688 return result;
689}

◆ dataForFile:inFolder:referencedFrom:checkBuiltIn:

- (NSData *) dataForFile: (NSString *)  file
inFolder: (NSString *)  folder
referencedFrom: (NSString *)  context
checkBuiltIn: (BOOL)  checkBuiltIn 

Definition at line 756 of file OOFileScannerVerifierStage.m.

225 :(NSString *)file
226 inFolder:(NSString *)folder
227 referencedFrom:(NSString *)context
228 checkBuiltIn:(BOOL)checkBuiltIn
229{
230 NSString *path = nil;
231
232 path = [self pathForFile:file inFolder:folder referencedFrom:context checkBuiltIn:checkBuiltIn];
233 if (path == nil) return nil;
234
235 return [NSData dataWithContentsOfMappedFile:path];
236}

◆ dealloc

- (void) dealloc
implementation

Reimplemented from OOOXPVerifierStage.

Definition at line 756 of file OOFileScannerVerifierStage.m.

88{
89 [_basePath release];
90 [_usedFiles release];
91 [_caseWarnings release];
92 [_directoryListings release];
93 [_directoryCases release];
94 [_badPLists release];
95
96 [super dealloc];
97}

◆ displayNameForFile:andFolder:

- (id) displayNameForFile: (NSString *)  file
andFolder: (NSString *)  folder 

Definition at line 756 of file OOFileScannerVerifierStage.m.

305 :(NSString *)file andFolder:(NSString *)folder
306{
307 if (file != nil && folder != nil) return [folder stringByAppendingPathComponent:file];
308 return file;
309}

◆ fileExists:inFolder:referencedFrom:checkBuiltIn:

- (BOOL) fileExists: (NSString *)  file
inFolder: (NSString *)  folder
referencedFrom: (NSString *)  context
checkBuiltIn: (BOOL)  checkBuiltIn 

Definition at line 756 of file OOFileScannerVerifierStage.m.

139 :(NSString *)file
140 inFolder:(NSString *)folder
141 referencedFrom:(NSString *)context
142 checkBuiltIn:(BOOL)checkBuiltIn
143{
144 return [self pathForFile:file inFolder:folder referencedFrom:context checkBuiltIn:checkBuiltIn] != nil;
145}

◆ filesInFolder:

- (NSArray *) filesInFolder: (NSString *)  folder

Definition at line 756 of file OOFileScannerVerifierStage.m.

312 :(NSString *)folder
313{
314 if (folder == nil) return nil;
315 return [[_directoryListings objectForKey:[folder lowercaseString]] allValues];
316}

◆ lowercaseMap:

- (NSDictionary *) lowercaseMap: (NSArray *)  array
implementation

Provided by category OOFileScannerVerifierStage(OOPrivate).

Definition at line 756 of file OOFileScannerVerifierStage.m.

518 :(NSArray *)array
519{
520 NSUInteger i, count;
521 NSString *canonical = nil,
522 *lowercase = nil;
523 NSMutableDictionary *result = nil;
524
525 count = [array count];
526 if (count == 0) return [NSDictionary dictionary];
527 result = [NSMutableDictionary dictionaryWithCapacity:count];
528
529 for (i = 0; i != count; ++i)
530 {
531 canonical = [array oo_stringAtIndex:i];
532 if (canonical != nil)
533 {
534 lowercase = [canonical lowercaseString];
535 [result setObject:canonical forKey:lowercase];
536 }
537 }
538
539 return result;
540}
unsigned count

◆ name

- (NSString *) name
implementation

Reimplemented from OOOXPVerifierStage.

Definition at line 756 of file OOFileScannerVerifierStage.m.

101{
103}
static NSString *const kFileScannerStageName

◆ nameForDependencyForVerifier:

+ (NSString *) nameForDependencyForVerifier: (OOOXPVerifier *)  verifier

Definition at line 756 of file OOFileScannerVerifierStage.m.

126{
127 OOFileScannerVerifierStage *stage = [verifier stageWithName:kFileScannerStageName];
128 if (stage == nil)
129 {
130 stage = [[OOFileScannerVerifierStage alloc] init];
131 [verifier registerStage:stage];
132 [stage release];
133 }
134
136}
OOOXPVerifier * verifier()
id stageWithName:(NSString *name)
void registerStage:(OOOXPVerifierStage *stage)

◆ pathForFile:inFolder:referencedFrom:checkBuiltIn:

- (NSString *) pathForFile: (NSString *)  file
inFolder: (NSString *)  folder
referencedFrom: (NSString *)  context
checkBuiltIn: (BOOL)  checkBuiltIn 

Definition at line 756 of file OOFileScannerVerifierStage.m.

148 :(NSString *)file
149 inFolder:(NSString *)folder
150 referencedFrom:(NSString *)context
151 checkBuiltIn:(BOOL)checkBuiltIn
152{
153 NSString *lcName = nil,
154 *lcDirName = nil,
155 *realDirName = nil,
156 *realFileName = nil,
157 *path = nil,
158 *expectedPath = nil;
159
160 if (file == nil) return nil;
161 lcName = [file lowercaseString];
162
163 if (folder != nil)
164 {
165 lcDirName = [folder lowercaseString];
166 realFileName = [[_directoryListings oo_dictionaryForKey:lcDirName] objectForKey:lcName];
167
168 if (realFileName != nil)
169 {
170 realDirName = [_directoryCases objectForKey:lcDirName];
171 path = [realDirName stringByAppendingPathComponent:realFileName];
172 }
173 }
174
175 if (path == nil)
176 {
177 realFileName = [[_directoryListings oo_dictionaryForKey:@""] objectForKey:lcName];
178
179 if (realFileName != nil)
180 {
181 path = realFileName;
182 }
183 }
184
185 if (path != nil)
186 {
187 [_usedFiles addObject:path];
188 if (realDirName != nil && ![realDirName isEqual:folder])
189 {
190 // Case mismatch for folder name
191 if (![_caseWarnings containsObject:lcDirName])
192 {
193 [_caseWarnings addObject:lcDirName];
194 OOLog(@"verifyOXP.files.caseMismatch", @"***** ERROR: case mismatch: directory '%@' should be called '%@'.", realDirName, folder);
195 }
196 }
197
198 if (![realFileName isEqual:file])
199 {
200 // Case mismatch for file name
201 if (![_caseWarnings containsObject:lcName])
202 {
203 [_caseWarnings addObject:lcName];
204
205 expectedPath = [self displayNameForFile:file andFolder:folder];
206
207 if (context != nil) context = [@" referenced in " stringByAppendingString:context];
208 else context = @"";
209
210 OOLog(@"verifyOXP.files.caseMismatch", @"***** ERROR: case mismatch: request for file '%@'%@ resolved to '%@'.", expectedPath, context, path);
211 }
212 }
213
214 return [_basePath stringByAppendingPathComponent:path];
215 }
216
217 // If we get here, the file wasn't found in the OXP.
218 // FIXME: should check case for built-in files.
219 if (checkBuiltIn) return [ResourceManager pathForFileNamed:file inFolder:folder];
220
221 return nil;
222}
NSString * pathForFileNamed:inFolder:(NSString *fileName,[inFolder] NSString *folderName)

◆ plistNamed:inFolder:referencedFrom:checkBuiltIn:

- (id) plistNamed: (NSString *)  file
inFolder: (NSString *)  folder
referencedFrom: (NSString *)  context
checkBuiltIn: (BOOL)  checkBuiltIn 

Definition at line 756 of file OOFileScannerVerifierStage.m.

239 :(NSString *)file
240 inFolder:(NSString *)folder
241 referencedFrom:(NSString *)context
242 checkBuiltIn:(BOOL)checkBuiltIn
243{
244 NSData *data = nil;
245 NSString *errorString = nil;
246 NSPropertyListFormat format;
247 id plist = nil;
248 NSArray *errorLines = nil;
249 NSString *displayName = nil,
250 *errorKey = nil;
251 NSAutoreleasePool *pool = nil;
252
253 data = [self dataForFile:file inFolder:folder referencedFrom:context checkBuiltIn:checkBuiltIn];
254 if (data == nil) return nil;
255
256 pool = [[NSAutoreleasePool alloc] init];
257
258 plist = [NSPropertyListSerialization propertyListFromData:data
259 mutabilityOption:NSPropertyListImmutable
260 format:&format
261 errorDescription:&errorString];
262
263#if OOLITE_RELEASE_PLIST_ERROR_STRINGS
264 [errorString autorelease];
265#endif
266
267 if (plist != nil)
268 {
269 // PList is readable; check that it's in an official Oolite format.
270 [self checkPListFormat:format file:file folder:folder];
271 }
272 else
273 {
274 /* Couldn't parse plist; report problem.
275 This is complicated somewhat by the need to present a possibly
276 multi-line error description while maintaining our indentation.
277 */
278 displayName = [self displayNameForFile:file andFolder:folder];
279 errorKey = [displayName lowercaseString];
280 if (![_badPLists containsObject:errorKey])
281 {
282 [_badPLists addObject:errorKey];
283 OOLog(@"verifyOXP.plist.parseError", @"Could not interpret property list %@.", displayName);
284 OOLogIndent();
285 errorLines = [errorString componentsSeparatedByString:@"\n"];
286 foreach (errorString, errorLines)
287 {
288 while ([errorString hasPrefix:@"\t"])
289 {
290 errorString = [@" " stringByAppendingString:[errorString substringFromIndex:1]];
291 }
292 OOLog(@"verifyOXP.plist.parseError", @"%@", errorString);
293 }
294 OOLogOutdent();
295 }
296 }
297
298 [plist retain];
299 [pool release];
300
301 return [plist autorelease];
302}
void OOLogOutdent(void)
Definition OOLogging.m:376
void OOLogIndent(void)
Definition OOLogging.m:366

◆ run

- (void) run
implementation

Reimplemented from OOOXPVerifierStage.

Definition at line 756 of file OOFileScannerVerifierStage.m.

107{
108 NSAutoreleasePool *pool = nil;
109
110 _usedFiles = [[NSMutableSet alloc] init];
111 _caseWarnings = [[NSMutableSet alloc] init];
112 _badPLists = [[NSMutableSet alloc] init];
113
114 pool = [[NSAutoreleasePool alloc] init];
115 [self scanForFiles];
116 [pool release];
117
118 pool = [[NSAutoreleasePool alloc] init];
119 [self checkRootFolders];
120 [self checkKnownFiles];
121 [pool release];
122}

◆ scanDirectory:

- (NSDictionary *) scanDirectory: (NSString *)  path
implementation

Provided by category OOFileScannerVerifierStage(OOPrivate).

Definition at line 756 of file OOFileScannerVerifierStage.m.

543 :(NSString *)path
544{
545 NSDirectoryEnumerator *dirEnum = nil;
546 NSMutableDictionary *result = nil;
547 NSString *name = nil,
548 *lcName = nil,
549 *type = nil,
550 *dirName = nil,
551 *relativeName = nil,
552 *existing = nil;
553
554 result = [NSMutableDictionary dictionary];
555 dirName = [path lastPathComponent];
556
557 dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:path];
558 while ((name = [dirEnum nextObject]))
559 {
560 type = [[dirEnum fileAttributes] fileType];
561 relativeName = [dirName stringByAppendingPathComponent:name];
562
563 if ([_junkFileNames containsObject:name])
564 {
565 OOLog(@"verifyOXP.scanFiles.skipJunk", @"NOTE: skipping junk file %@/%@.", dirName, name);
566 }
567 else if ([type isEqualToString:NSFileTypeRegular])
568 {
569 lcName = [name lowercaseString];
570 existing = [result objectForKey:lcName];
571
572 if (existing == nil)
573 {
574 OOLog(@"verifyOXP.verbose.listFiles", @"- %@", name);
575 [result setObject:name forKey:lcName];
576 }
577 else
578 {
579 OOLog(@"verifyOXP.scanFiles.overloadedName", @"***** ERROR: %@ '%@' conflicts with %@ named '%@', ignoring. (OXPs must work on case-insensitive file systems!)", @"file", relativeName, @"file", [dirName stringByAppendingPathComponent:existing]);
580 }
581 }
582 else
583 {
584 if ([type isEqualToString:NSFileTypeDirectory])
585 {
586 [dirEnum skipDescendents];
587 if (![_skipDirectoryNames containsObject:name])
588 {
589 OOLog(@"verifyOXP.scanFiles.directory", @"----- WARNING: \"%@\" is a nested directory, ignoring.", relativeName);
590 }
591 else
592 {
593 OOLog(@"verifyOXP.verbose.listFiles", @"- Skipping %@/%@/", dirName, name);
594 }
595 }
596 else if ([type isEqualToString:NSFileTypeSymbolicLink])
597 {
598 OOLog(@"verifyOXP.scanFiles.symLink", @"----- WARNING: \"%@\" is a symbolic link, ignoring.", relativeName);
599 }
600 else
601 {
602 OOLog(@"verifyOXP.scanFiles.nonStandardFile", @"----- WARNING: \"%@\" is a non-standard file (%@), ignoring.", relativeName, type);
603 }
604 }
605 }
606
607 return result;
608}

◆ scanForFiles

- (void) scanForFiles
implementation

Provided by category OOFileScannerVerifierStage(OOPrivate).

Definition at line 756 of file OOFileScannerVerifierStage.m.

324{
325 NSDirectoryEnumerator *dirEnum = nil;
326 NSString *name = nil,
327 *path = nil,
328 *type = nil,
329 *lcName = nil,
330 *existing = nil,
331 *existingType = nil;
332 NSMutableDictionary *directoryListings = nil,
333 *directoryCases = nil,
334 *rootFiles = nil;
335 NSDictionary *dirFiles = nil;
336 NSSet *readMeNames = nil;
337
338 _basePath = [[[self verifier] oxpPath] copy];
339
340 _junkFileNames = [[self verifier] configurationSetForKey:@"junkFiles"];
341 _skipDirectoryNames = [[self verifier] configurationSetForKey:@"skipDirectories"];
342
343 directoryCases = [NSMutableDictionary dictionary];
344 directoryListings = [NSMutableDictionary dictionary];
345 rootFiles = [NSMutableDictionary dictionary];
346 readMeNames = [self constructReadMeNames];
347
348 dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:_basePath];
349 while ((name = [dirEnum nextObject]))
350 {
351 path = [_basePath stringByAppendingPathComponent:name];
352 type = [[dirEnum fileAttributes] fileType];
353 lcName = [name lowercaseString];
354
355 if ([type isEqualToString:NSFileTypeDirectory])
356 {
357 [dirEnum skipDescendents];
358
359 if ([_skipDirectoryNames containsObject:name])
360 {
361 // Silently skip .svn and CVS
362 OOLog(@"verifyOXP.verbose.listFiles", @"- Skipping %@/", name);
363 }
364 else if (!CheckNameConflict(lcName, directoryCases, rootFiles, &existing, &existingType))
365 {
366 OOLog(@"verifyOXP.verbose.listFiles", @"- %@/", name);
367 OOLogIndentIf(@"verifyOXP.verbose.listFiles");
368 dirFiles = [self scanDirectory:path];
369 [directoryListings setObject:dirFiles forKey:lcName];
370 [directoryCases setObject:name forKey:lcName];
371 OOLogOutdentIf(@"verifyOXP.verbose.listFiles");
372 }
373 else
374 {
375 OOLog(@"verifyOXP.scanFiles.overloadedName", @"***** ERROR: %@ '%@' conflicts with %@ named '%@', ignoring. (OXPs must work on case-insensitive file systems!)", @"directory", name, existingType, existing);
376 }
377 }
378 else if ([type isEqualToString:NSFileTypeRegular])
379 {
380 if ([_junkFileNames containsObject:name])
381 {
382 OOLog(@"verifyOXP.scanFiles.skipJunk", @"NOTE: skipping junk file %@.", name);
383 }
384 else if ([readMeNames containsObject:lcName])
385 {
386 OOLog(@"verifyOXP.scanFiles.readMe", @"----- WARNING: apparent Read Me file (\"%@\") inside OXP. This is the wrong place for a Read Me file, because it will not be read.", name);
387 }
388 else if (!CheckNameConflict(lcName, directoryCases, rootFiles, &existing, &existingType))
389 {
390 OOLog(@"verifyOXP.verbose.listFiles", @"- %@", name);
391 [rootFiles setObject:name forKey:lcName];
392 }
393 else
394 {
395 OOLog(@"verifyOXP.scanFiles.overloadedName", @"***** ERROR: %@ '%@' conflicts with %@ named '%@', ignoring. (OXPs must work on case-insensitive file systems!)", @"file", name, existingType, existing);
396 }
397 }
398 else if ([type isEqualToString:NSFileTypeSymbolicLink])
399 {
400 OOLog(@"verifyOXP.scanFiles.symLink", @"----- WARNING: \"%@\" is a symbolic link, ignoring.", name);
401 }
402 else
403 {
404 OOLog(@"verifyOXP.scanFiles.nonStandardFile", @"----- WARNING: \"%@\" is a non-standard file (%@), ignoring.", name, type);
405 }
406 }
407
408 _junkFileNames = nil;
409 _skipDirectoryNames = nil;
410
411 [directoryListings setObject:rootFiles forKey:@""];
412 _directoryListings = [directoryListings copy];
413 _directoryCases = [directoryCases copy];
414}
static BOOL CheckNameConflict(NSString *lcName, NSDictionary *directoryCases, NSDictionary *rootFiles, NSString **outExisting, NSString **outExistingType)
#define OOLogOutdentIf(class)
Definition OOLogging.h:102
#define OOLogIndentIf(class)
Definition OOLogging.h:101

Member Data Documentation

◆ _badPLists

- (NSMutableSet*) _badPLists
private

Definition at line 44 of file OOFileScannerVerifierStage.h.

◆ _basePath

- (NSString*) _basePath
private

Definition at line 39 of file OOFileScannerVerifierStage.h.

◆ _caseWarnings

- (NSMutableSet*) _caseWarnings
private

Definition at line 41 of file OOFileScannerVerifierStage.h.

◆ _directoryCases

- (NSDictionary*) _directoryCases
private

Definition at line 43 of file OOFileScannerVerifierStage.h.

◆ _directoryListings

- (NSDictionary*) _directoryListings
private

Definition at line 42 of file OOFileScannerVerifierStage.h.

◆ _junkFileNames

- (NSSet*) _junkFileNames
private

Definition at line 45 of file OOFileScannerVerifierStage.h.

◆ _skipDirectoryNames

- (NSSet*) _skipDirectoryNames
private

Definition at line 46 of file OOFileScannerVerifierStage.h.

◆ _usedFiles

- (NSMutableSet*) _usedFiles
private

Definition at line 40 of file OOFileScannerVerifierStage.h.


The documentation for this class was generated from the following files: