Skip to content

Commit

Permalink
adding CWTask to Zangetsu
Browse files Browse the repository at this point in the history
  • Loading branch information
Machx committed Nov 4, 2010
1 parent d79d29a commit 2010a62
Show file tree
Hide file tree
Showing 6 changed files with 144 additions and 0 deletions.
27 changes: 27 additions & 0 deletions Source/CWTask.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
//
// CWTask.h
// Gitty
//
// Created by Colin Wheeler on 8/30/10.
// Copyright 2010. All rights reserved.
//

#import <Cocoa/Cocoa.h>

@interface CWTask : NSObject {
@private
NSString * _executable;
NSString * _directoryPath;
NSTask *_internal_task;
NSInteger _successCode;
NSArray * _task_args;
}

-(id)initWithExecutable:(NSString *)exec
andArguments:(NSArray *)execArgs
atDirectory:(NSString *)path;

-(NSString *) launchTaskWithError:(NSError **)error;
-(NSInteger) successCode;

@end
85 changes: 85 additions & 0 deletions Source/CWTask.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
//
// CWTask.m
// Gitty
//
// Created by Colin Wheeler on 8/30/10.
// Copyright 2010. All rights reserved.
//

#import "CWTask.h"
#import "CWTask_Private.h"

@implementation CWTask

@synthesize _executable;
@synthesize _directoryPath;
@synthesize _internal_task;
@synthesize _successCode;
@synthesize _task_args;

-(id)initWithExecutable:(NSString *)exec
andArguments:(NSArray *)execArgs
atDirectory:(NSString *)path
{
self = [super init];
if(self){
_internal_task = [[NSTask alloc] init];
_directoryPath = path;
_executable = exec;
_successCode = 0;
_task_args = execArgs;
}

return self;
}

-(NSString *) launchTaskWithError:(NSError **)error;
{
NSParameterAssert(self._internal_task);

if(self._executable == nil){
NSAssert(0,@"CWTask Executable is Nil! Exiting...");
*error = [NSError errorWithDomain:@"CWTask Domain"
code:1
userInfo:nil];
return nil;
}

NSPipe *_taskPipe = [NSPipe pipe];
NSData *_returned_data = nil;

[self._internal_task setStandardOutput:_taskPipe];
[self._internal_task setArguments:self._task_args];
[self._internal_task setLaunchPath:self._executable];
if(self._directoryPath){
[self._internal_task setCurrentDirectoryPath:self._directoryPath];
}

CWLog(@"CWTask: %@",self._internal_task);

@try{
[self._internal_task launch];
}@catch(NSException * e){
CWLog(@"Caught Exception: %@",e);
}

_returned_data = [[NSData alloc] initWithData:[[_taskPipe fileHandleForReading] readDataToEndOfFile]];

self._successCode = [self._internal_task terminationStatus];

NSString * returnedString = nil;

if(_returned_data != nil){
returnedString = [[NSString alloc] initWithData:_returned_data
encoding:NSUTF8StringEncoding];
}

return returnedString;
}

-(NSInteger) successCode
{
return self._successCode;
}

@end
18 changes: 18 additions & 0 deletions Source/CWTask_Private.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* CWTask_Private.h
* Gitty
*
* Created by Colin Wheeler on 8/30/10.
* Copyright 2010. All rights reserved.
*
*/

@interface CWTask()

@property(retain) NSString * _executable;
@property(retain) NSString * _directoryPath;
@property(retain) NSTask *_internal_task;
@property(assign) NSInteger _successCode;
@property(retain) NSArray * _task_args;

@end
1 change: 1 addition & 0 deletions Zangetsu.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@

#import "CWMacros.h"
#import "CWSHA1_Convenience.h"
#import "CWTask.h"
12 changes: 12 additions & 0 deletions Zangetsu.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; };
B82D73E811DA850A00863F3B /* Zangetsu.h in Headers */ = {isa = PBXBuildFile; fileRef = B82D73E711DA850A00863F3B /* Zangetsu.h */; settings = {ATTRIBUTES = (Public, ); }; };
B84994A9128210D6001206E1 /* CWTask_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B84994A6128210D6001206E1 /* CWTask_Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
B84994AA128210D6001206E1 /* CWTask.h in Headers */ = {isa = PBXBuildFile; fileRef = B84994A7128210D6001206E1 /* CWTask.h */; settings = {ATTRIBUTES = (Public, ); }; };
B84994AB128210D6001206E1 /* CWTask.m in Sources */ = {isa = PBXBuildFile; fileRef = B84994A8128210D6001206E1 /* CWTask.m */; };
B890142B11D992F000705CE4 /* CWSHA1_Convenience.h in Headers */ = {isa = PBXBuildFile; fileRef = B890142911D992F000705CE4 /* CWSHA1_Convenience.h */; settings = {ATTRIBUTES = (Public, ); }; };
B890142C11D992F000705CE4 /* CWSHA1_Convenience.m in Sources */ = {isa = PBXBuildFile; fileRef = B890142A11D992F000705CE4 /* CWSHA1_Convenience.m */; };
B890142F11D9931C00705CE4 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B890142E11D9931C00705CE4 /* Security.framework */; };
Expand All @@ -25,6 +28,9 @@
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
8DC2EF5B0486A6940098B216 /* Zangetsu.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zangetsu.framework; sourceTree = BUILT_PRODUCTS_DIR; };
B82D73E711DA850A00863F3B /* Zangetsu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Zangetsu.h; sourceTree = "<group>"; };
B84994A6128210D6001206E1 /* CWTask_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CWTask_Private.h; path = Source/CWTask_Private.h; sourceTree = "<group>"; };
B84994A7128210D6001206E1 /* CWTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CWTask.h; path = Source/CWTask.h; sourceTree = "<group>"; };
B84994A8128210D6001206E1 /* CWTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CWTask.m; path = Source/CWTask.m; sourceTree = "<group>"; };
B890142911D992F000705CE4 /* CWSHA1_Convenience.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CWSHA1_Convenience.h; path = Source/CWSHA1_Convenience.h; sourceTree = "<group>"; };
B890142A11D992F000705CE4 /* CWSHA1_Convenience.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CWSHA1_Convenience.m; path = Source/CWSHA1_Convenience.m; sourceTree = "<group>"; };
B890142E11D9931C00705CE4 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
Expand Down Expand Up @@ -90,6 +96,9 @@
B890149311D99D6A00705CE4 /* CWMacros.h */,
B890142911D992F000705CE4 /* CWSHA1_Convenience.h */,
B890142A11D992F000705CE4 /* CWSHA1_Convenience.m */,
B84994A6128210D6001206E1 /* CWTask_Private.h */,
B84994A7128210D6001206E1 /* CWTask.h */,
B84994A8128210D6001206E1 /* CWTask.m */,
);
name = Classes;
sourceTree = "<group>";
Expand Down Expand Up @@ -131,6 +140,8 @@
B890142B11D992F000705CE4 /* CWSHA1_Convenience.h in Headers */,
B890149511D99D6A00705CE4 /* CWMacros.h in Headers */,
B82D73E811DA850A00863F3B /* Zangetsu.h in Headers */,
B84994A9128210D6001206E1 /* CWTask_Private.h in Headers */,
B84994AA128210D6001206E1 /* CWTask.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -198,6 +209,7 @@
buildActionMask = 2147483647;
files = (
B890142C11D992F000705CE4 /* CWSHA1_Convenience.m in Sources */,
B84994AB128210D6001206E1 /* CWTask.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
1 change: 1 addition & 0 deletions Zangetsu_Prefix.pch
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@

#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#import "CWMacros.h"
#endif

0 comments on commit 2010a62

Please sign in to comment.