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 *secretKey;
NSString *encryptionPassword; NSString *encryptionPassword;
S3Service *s3; S3Service *s3;
NSString *path;
} }
- (BOOL)printArqFolders:(NSError **)error; - (BOOL)readArgc:(int)argc argv:(const char **)argv;
- (BOOL)restorePath:(NSString *)path error:(NSError **)error; - (BOOL)execute:(NSError **)error;
@end @end

View file

@ -40,7 +40,10 @@
#import "HTTP.h" #import "HTTP.h"
#import "Restorer.h" #import "Restorer.h"
@interface ArqRestoreCommand (internal) @interface ArqRestoreCommand (internal)
- (BOOL)printArqFolders:(NSError **)error;
- (BOOL)restorePath:(NSError **)error;
- (BOOL)validateS3Keys:(NSError **)error; - (BOOL)validateS3Keys:(NSError **)error;
@end @end
@ -72,8 +75,43 @@
[secretKey release]; [secretKey release];
[encryptionPassword release]; [encryptionPassword release];
[s3 release]; [s3 release];
[path release];
[super dealloc]; [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 { - (BOOL)printArqFolders:(NSError **)error {
if (![self validateS3Keys:error]) { if (![self validateS3Keys:error]) {
return NO; return NO;
@ -118,7 +156,7 @@
} }
return YES; return YES;
} }
- (BOOL)restorePath:(NSString *)path error:(NSError **)error { - (BOOL)restorePath:(NSError **)error {
if (![self validateS3Keys:error]) { if (![self validateS3Keys:error]) {
return NO; return NO;
} }
@ -153,9 +191,6 @@
printf("restored files are in %s\n", [bucketName fileSystemRepresentation]); printf("restored files are in %s\n", [bucketName fileSystemRepresentation]);
return YES; return YES;
} }
@end
@implementation ArqRestoreCommand (internal)
- (BOOL)validateS3Keys:(NSError **)error { - (BOOL)validateS3Keys:(NSError **)error {
if (accessKey == nil) { if (accessKey == nil) {
SETNSERROR(@"ArqErrorDomain", -1, @"missing ARQ_ACCESS_KEY environment variable"); SETNSERROR(@"ArqErrorDomain", -1, @"missing ARQ_ACCESS_KEY environment variable");

View file

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