// // P4Client.h // MBMenuExtra // // Created by Michael Bishop on 12/18/09. // Copyright 2009 Perforce Software. All rights reserved. // #import "P4Client.h" #import "P4Response.h" #import "P4SpecManager.h" #import "P4Connection.h" #import "P4RawConnection.h" #import "P4Mapper.h" @implementation P4Client @dynamic root, altRoots, view; -(P4Response*)runArguments:(NSArray*)args withContext:(NSDictionary*)context content:(NSString *)content { NSMutableDictionary * clientContext = [NSMutableDictionary dictionaryWithDictionary:context]; [clientContext setObject:self.identifier forKey:kP4ConnectionClientContextKey]; return [self.manager.connection runArguments:args withContext:clientContext content:content]; } -(BOOL)runArguments:(NSArray*)args withContext:(NSDictionary*)context completionBlock:(void(^)(P4Response*))completion { NSMutableDictionary * clientContext = [NSMutableDictionary dictionaryWithDictionary:context]; [clientContext setObject:self.identifier forKey:kP4ConnectionClientContextKey]; return [self.manager.connection runArguments:args withContext:clientContext updateBlock:nil completionBlock:completion]; } +(NSSet*)keyPathsForValuesAffectingRoots { return [NSSet setWithObjects:@"root", @"altRoots", nil]; } -(NSArray*)roots { return [[NSArray arrayWithObject:self.root] arrayByAddingObjectsFromArray:self.altRoots]; } -(P4Mapper*)viewMapper { NSArray * view = self.view; if ( !view ) return nil; P4Mapper * mapper = [[[P4Mapper alloc] init] autorelease]; NSMutableArray * entries = [NSMutableArray arrayWithCapacity:view.count]; for (NSString * mapEntryString in view) { P4MapEntry * entry = [P4MapEntry entryWithEntryString:mapEntryString]; if ( entry ) [entries addObject:entry]; } mapper.entries = entries; return mapper; } -(NSString*)clientPathForLocalFilePath:(NSString*)localFilePath root:(NSString**)returnedRoot; { if (!localFilePath) return nil; NSScanner * scanner = [NSScanner scannerWithString:localFilePath]; for (NSString * root in self.roots) { if ( ![scanner scanString:root intoString:nil] ) continue; if ( returnedRoot ) *returnedRoot = root; return [NSString stringWithFormat:@"//%@%@", self.identifier, [[scanner string] substringFromIndex:[scanner scanLocation]]]; } return nil; } -(NSString*)depotPathForClientPath:(NSString*)clientPath; { if (!clientPath) return nil; return [self.viewMapper pathByMappingPath:clientPath direction:P4MappingDirectionRightToLeft]; } -(BOOL)viewContainsClientPath:(NSString*)clientPath { return [self depotPathForClientPath:clientPath] != nil; } @end