added -l log_level argument to arq_restore

This commit is contained in:
Stefan Reitshamer 2010-06-28 07:54:14 -04:00
parent 3c02cd09fb
commit 9e2d899d8e
3 changed files with 53 additions and 24 deletions

View file

@ -38,7 +38,8 @@
NSString *secretKey;
NSString *encryptionPassword;
S3Service *s3;
NSString *path;
}
- (BOOL)printArqFolders:(NSError **)error;
- (BOOL)restorePath:(NSString *)path error:(NSError **)error;
- (BOOL)readArgc:(int)argc argv:(const char **)argv;
- (BOOL)execute:(NSError **)error;
@end

View file

@ -40,7 +40,10 @@
#import "HTTP.h"
#import "Restorer.h"
@interface ArqRestoreCommand (internal)
- (BOOL)printArqFolders:(NSError **)error;
- (BOOL)restorePath:(NSError **)error;
- (BOOL)validateS3Keys:(NSError **)error;
@end
@ -72,13 +75,48 @@
[secretKey release];
[encryptionPassword release];
[s3 release];
[path release];
[super dealloc];
}
- (BOOL)readArgc:(int)argc argv:(const char **)argv {
for (int i = 1; i < argc; i++) {
if (*argv[i] == '-') {
if (strcmp(argv[i], "-l")) {
fprintf(stderr, "invalid argument\n");
return NO;
}
if (argc <= i+1) {
fprintf(stderr, "missing log_level argument (error,warn,info,debug or trace)\n");
return NO;
}
i++;
NSString *level = [NSString stringWithUTF8String:argv[i]];
setHSLogLevel(hsLogLevelForName(level));
} else if (path == nil) {
path = [[NSString alloc] initWithUTF8String:argv[i]];
} else {
fprintf(stderr, "warning: ignoring argument '%s'\n", argv[i]);
}
}
return YES;
}
- (BOOL)execute:(NSError **)error {
BOOL ret = YES;
if (path == nil) {
ret = [self printArqFolders:error];
} else {
ret = [self restorePath:error];
}
return ret;
}
@end
@implementation ArqRestoreCommand (internal)
- (BOOL)printArqFolders:(NSError **)error {
if (![self validateS3Keys:error]) {
return NO;
}
NSArray *s3BucketNames = [S3Service s3BucketNamesForAccessKeyID:accessKey];
NSArray *s3BucketNames = [S3Service s3BucketNamesForAccessKeyID:accessKey];
NSMutableArray *computerUUIDPaths = [NSMutableArray array];
for (NSString *s3BucketName in s3BucketNames) {
NSString *computerUUIDPrefix = [NSString stringWithFormat:@"/%@/", s3BucketName];
@ -118,7 +156,7 @@
}
return YES;
}
- (BOOL)restorePath:(NSString *)path error:(NSError **)error {
- (BOOL)restorePath:(NSError **)error {
if (![self validateS3Keys:error]) {
return NO;
}
@ -153,9 +191,6 @@
printf("restored files are in %s\n", [bucketName fileSystemRepresentation]);
return YES;
}
@end
@implementation ArqRestoreCommand (internal)
- (BOOL)validateS3Keys:(NSError **)error {
if (accessKey == nil) {
SETNSERROR(@"ArqErrorDomain", -1, @"missing ARQ_ACCESS_KEY environment variable");

View file

@ -37,32 +37,25 @@
static void printUsage(const char *exeName) {
fprintf(stderr, "Usage:\n");
fprintf(stderr, "\t%s\n", exeName);
fprintf(stderr, "\t%s /s3bucket/computerUUID/folderUUID\n", exeName);
fprintf(stderr, "\t%s [-l log_level]\n", exeName);
fprintf(stderr, "\t%s [-l log_level] /s3bucket/computerUUID/folderUUID\n", exeName);
}
int main (int argc, const char * argv[]) {
int main (int argc, const char **argv) {
setHSLogLevel(HSLOG_LEVEL_ERROR);
char *exePath = strdup(argv[0]);
char *exeName = basename(exePath);
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
ArqRestoreCommand *cmd = [[[ArqRestoreCommand alloc] init] autorelease];
int ret = 0;
NSError *error = nil;
if (argc == 1) {
if (![cmd printArqFolders:&error]) {
NSLog(@"%@", [error localizedDescription]);
ret = 1;
} else {
printf("\nType %s <s3 path> to restore\n", exeName);
}
} else if (argc == 2) {
if (![cmd restorePath:[NSString stringWithUTF8String:argv[1]] error:&error]) {
NSLog(@"%@", [error localizedDescription]);
ret = 1;
}
} else {
if (![cmd readArgc:argc argv:argv]) {
printUsage(exeName);
ret = 1;
} else {
NSError *myError = nil;
if (![cmd execute:&myError]) {
NSLog(@"%@", [myError localizedDescription]);
ret = 1;
}
}
[pool drain];
free(exePath);