Navigation Menu

Skip to content

Commit

Permalink
mostly property modifications and fixing the delta work
Browse files Browse the repository at this point in the history
  • Loading branch information
schacon committed Sep 29, 2008
1 parent 66398ba commit 45abfbb
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 58 deletions.
5 changes: 4 additions & 1 deletion ObjGit.h
Expand Up @@ -12,14 +12,17 @@

@interface ObjGit : NSObject {
NSString* gitDirectory;
NSString* gitName;
}

@property(assign, readwrite) NSString *gitDirectory;
@property(copy, readwrite) NSString *gitDirectory;
@property(copy, readwrite) NSString *gitName;

- (BOOL) openRepo:(NSString *)dirPath;
- (BOOL) ensureGitPath;
- (void) initGitRepo;
- (NSArray *) getAllRefs;
- (NSString *) getName;

- (NSString *) writeObject:(NSData *)objectData withType:(NSString *)type withSize:(int)size;
- (void) updateRef:(NSString *)refName toSha:(NSString *)toSha;
Expand Down
48 changes: 28 additions & 20 deletions ObjGit.m
Expand Up @@ -14,6 +14,7 @@
@implementation ObjGit

@synthesize gitDirectory;
@synthesize gitName;

- (id) init
{
Expand All @@ -25,10 +26,17 @@ - (void) dealloc
[super dealloc];
}

- (NSString *) getName
{
NSLog(@"GIT NAME TEST");
NSLog(@"GIT NAME:%@", self.gitName);
return self.gitName;
}

- (BOOL) ensureGitPath {
BOOL isDir;
NSFileManager *fm = [NSFileManager defaultManager];
if ([fm fileExistsAtPath:gitDirectory isDirectory:&isDir] && isDir) {
if ([fm fileExistsAtPath:self.gitDirectory isDirectory:&isDir] && isDir) {
return YES;
} else {
[self initGitRepo];
Expand All @@ -41,7 +49,7 @@ - (NSArray *) getAllRefs
BOOL isDir=NO;
NSMutableArray *refsFinal = [[NSMutableArray alloc] init];
NSString *tempRef, *thisSha;
NSString *refsPath = [gitDirectory stringByAppendingPathComponent:@"refs"];
NSString *refsPath = [self.gitDirectory stringByAppendingPathComponent:@"refs"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:refsPath isDirectory:&isDir] && isDir) {
NSEnumerator *e = [[fileManager subpathsAtPath:refsPath] objectEnumerator];
Expand All @@ -64,32 +72,32 @@ - (NSArray *) getAllRefs
- (void) updateRef:(NSString *)refName toSha:(NSString *)toSha
{
NSFileManager *fm = [NSFileManager defaultManager];
NSString *refPath = [gitDirectory stringByAppendingPathComponent:refName];
NSString *refPath = [self.gitDirectory stringByAppendingPathComponent:refName];
[fm createFileAtPath:refPath contents:[NSData dataWithBytes:[toSha UTF8String] length:[toSha length]] attributes:nil];
}

- (void) initGitRepo {
NSFileManager *fm = [NSFileManager defaultManager];
[fm createDirectoryAtPath:gitDirectory attributes:nil];
[fm createDirectoryAtPath:self.gitDirectory attributes:nil];

//NSLog(@"Dir Created: %@ %d", gitDirectory, [gitDirectory length]);
NSString *config = @"[core]\n\trepositoryformatversion = 0\n\tfilemode = true\n\tbare = true\n\tlogallrefupdates = true\n";
NSString *configFile = [gitDirectory stringByAppendingPathComponent:@"config"];
NSString *configFile = [self.gitDirectory stringByAppendingPathComponent:@"config"];
[fm createFileAtPath:configFile contents:[NSData dataWithBytes:[config UTF8String] length:[config length]] attributes:nil];

NSString *head = @"ref: refs/heads/master\n";
NSString *headFile = [gitDirectory stringByAppendingPathComponent:@"HEAD"];
NSString *headFile = [self.gitDirectory stringByAppendingPathComponent:@"HEAD"];
[fm createFileAtPath:headFile contents:[NSData dataWithBytes:[head UTF8String] length:[head length]] attributes:nil];

[fm createDirectoryAtPath:[gitDirectory stringByAppendingPathComponent:@"refs"] attributes:nil];
[fm createDirectoryAtPath:[gitDirectory stringByAppendingPathComponent:@"refs/heads"] attributes:nil];
[fm createDirectoryAtPath:[gitDirectory stringByAppendingPathComponent:@"refs/tags"] attributes:nil];
[fm createDirectoryAtPath:[gitDirectory stringByAppendingPathComponent:@"objects"] attributes:nil];
[fm createDirectoryAtPath:[gitDirectory stringByAppendingPathComponent:@"objects/info"] attributes:nil];
[fm createDirectoryAtPath:[gitDirectory stringByAppendingPathComponent:@"objects/pack"] attributes:nil];
[fm createDirectoryAtPath:[gitDirectory stringByAppendingPathComponent:@"branches"] attributes:nil];
[fm createDirectoryAtPath:[gitDirectory stringByAppendingPathComponent:@"hooks"] attributes:nil];
[fm createDirectoryAtPath:[gitDirectory stringByAppendingPathComponent:@"info"] attributes:nil];
[fm createDirectoryAtPath:[self.gitDirectory stringByAppendingPathComponent:@"refs"] attributes:nil];
[fm createDirectoryAtPath:[self.gitDirectory stringByAppendingPathComponent:@"refs/heads"] attributes:nil];
[fm createDirectoryAtPath:[self.gitDirectory stringByAppendingPathComponent:@"refs/tags"] attributes:nil];
[fm createDirectoryAtPath:[self.gitDirectory stringByAppendingPathComponent:@"objects"] attributes:nil];
[fm createDirectoryAtPath:[self.gitDirectory stringByAppendingPathComponent:@"objects/info"] attributes:nil];
[fm createDirectoryAtPath:[self.gitDirectory stringByAppendingPathComponent:@"objects/pack"] attributes:nil];
[fm createDirectoryAtPath:[self.gitDirectory stringByAppendingPathComponent:@"branches"] attributes:nil];
[fm createDirectoryAtPath:[self.gitDirectory stringByAppendingPathComponent:@"hooks"] attributes:nil];
[fm createDirectoryAtPath:[self.gitDirectory stringByAppendingPathComponent:@"info"] attributes:nil];
}

- (NSString *) writeObject:(NSData *)objectData withType:(NSString *)type withSize:(int)size
Expand All @@ -107,7 +115,7 @@ - (NSString *) writeObject:(NSData *)objectData withType:(NSString *)type withSi

CC_SHA1([object bytes], [object length], rawsha);
[ObjGit gitUnpackHex:rawsha fillSha:sha1];
//NSLog(@"WRITING SHA: %s", sha1);
NSLog(@"WRITING SHA: %s", sha1);

// write object to file
shaStr = [NSString stringWithCString:sha1 encoding:NSASCIIStringEncoding];
Expand All @@ -119,7 +127,7 @@ - (NSString *) writeObject:(NSData *)objectData withType:(NSString *)type withSi

- (BOOL) openRepo:(NSString *)dirPath
{
gitDirectory = dirPath;
self.gitDirectory = dirPath;
return YES;
}

Expand Down Expand Up @@ -154,7 +162,7 @@ - (NSMutableArray *) getCommitsFromSha:(NSString *)shaValue withLimit:(int)commi
- (ObjGitObject *) getObjectFromSha:(NSString *)sha1
{
NSString *objectPath = [self getLooseObjectPathBySha:sha1];
// NSLog(@"READ FROM FILE: %@", objectPath);
NSLog(@"READ FROM FILE: %@", objectPath);
NSFileHandle *fm = [NSFileHandle fileHandleForReadingAtPath:objectPath];
return [[ObjGitObject alloc] initFromRaw:[fm availableData] withSha:sha1];
}
Expand All @@ -177,7 +185,7 @@ - (NSString *) getLooseObjectPathBySha: (NSString *)shaValue
NSString *looseSubDir = [shaValue substringWithRange:NSMakeRange(0, 2)];
NSString *looseFileName = [shaValue substringWithRange:NSMakeRange(2, 38)];

NSString *dir = [NSString stringWithFormat: @"%@/objects/%@", gitDirectory, looseSubDir];
NSString *dir = [NSString stringWithFormat: @"%@/objects/%@", self.gitDirectory, looseSubDir];

BOOL isDir;
NSFileManager *fm = [NSFileManager defaultManager];
Expand All @@ -186,7 +194,7 @@ - (NSString *) getLooseObjectPathBySha: (NSString *)shaValue
}

return [NSString stringWithFormat: @"%@/objects/%@/%@", \
gitDirectory, looseSubDir, looseFileName];
self.gitDirectory, looseSubDir, looseFileName];
}


Expand Down
6 changes: 4 additions & 2 deletions ObjGitCommit.h
Expand Up @@ -7,6 +7,7 @@
#import "ObjGitObject.h"

@interface ObjGitCommit : NSObject {
NSString *sha;
NSArray *parentShas;
NSString *treeSha;
NSString *author;
Expand All @@ -19,14 +20,15 @@
ObjGitObject *git_object;
}

@property(assign, readwrite) NSString *sha;
@property(assign, readwrite) NSArray *parentShas;
@property(assign, readwrite) NSString *treeSha;
@property(assign, readwrite) NSString *author;
@property(assign, readwrite) NSString *author_email;
@property(assign, readwrite) NSDate *authored_date;
@property(copy , readwrite) NSDate *authored_date;
@property(assign, readwrite) NSString *committer;
@property(assign, readwrite) NSString *committer_email;
@property(assign, readwrite) NSDate *committed_date;
@property(retain, readwrite) NSDate *committed_date;
@property(assign, readwrite) NSString *message;
@property(assign, readwrite) ObjGitObject *git_object;

Expand Down
29 changes: 16 additions & 13 deletions ObjGitCommit.m
Expand Up @@ -18,20 +18,23 @@ @implementation ObjGitCommit
@synthesize committed_date;
@synthesize message;
@synthesize git_object;
@synthesize sha;

- (id) initFromGitObject:(ObjGitObject *)gitObject {
self = [super init];
git_object = gitObject;
self.sha = [gitObject sha];
self.git_object = gitObject;
[self parseContent];
return self;
}

- (id) initFromRaw:(NSData *)rawData withSha:(NSString *)shaValue
{
self = [super init];
git_object = [[ObjGitObject alloc] initFromRaw:rawData withSha:shaValue];
self.git_object = [[ObjGitObject alloc] initFromRaw:rawData withSha:shaValue];
self.sha = shaValue;
[self parseContent];
// [self logObject];
//[self logObject];
return self;
}

Expand All @@ -47,7 +50,7 @@ - (void) logObject
- (void) parseContent
{
// extract parent shas, tree sha, author/committer info, message
NSArray *lines = [git_object.contents componentsSeparatedByString:@"\n"];
NSArray *lines = [self.git_object.contents componentsSeparatedByString:@"\n"];
NSEnumerator *enumerator;
NSMutableArray *parents;
NSMutableString *buildMessage;
Expand All @@ -68,27 +71,27 @@ - (void) parseContent
key = [values objectAtIndex: 0];
val = [values objectAtIndex: 1];
if([key isEqualToString: @"tree"]) {
treeSha = val;
self.treeSha = val;
} else if ([key isEqualToString: @"parent"]) {
[parents addObject: val];
} else if ([key isEqualToString: @"author"]) {
NSArray *name_email_date = [self parseAuthorString:line withType:@"author "];
author = [name_email_date objectAtIndex: 0];
author_email = [name_email_date objectAtIndex: 1];
authored_date = [name_email_date objectAtIndex: 2];
self.author = [name_email_date objectAtIndex: 0];
self.author_email = [name_email_date objectAtIndex: 1];
self.authored_date = [name_email_date objectAtIndex: 2];
} else if ([key isEqualToString: @"committer"]) {
NSArray *name_email_date = [self parseAuthorString:line withType:@"committer "];
committer = [name_email_date objectAtIndex: 0];
committer_email = [name_email_date objectAtIndex: 1];
committed_date = [name_email_date objectAtIndex: 2];
self.committer = [name_email_date objectAtIndex: 0];
self.committer_email = [name_email_date objectAtIndex: 1];
self.committed_date = [name_email_date objectAtIndex: 2];
}
}
} else {
[buildMessage appendString: line];
}
}
message = buildMessage;
parentShas = parents;
self.message = buildMessage;
self.parentShas = parents;
}

- (NSArray *) parseAuthorString:(NSString *)authorString withType:(NSString *)typeString
Expand Down
8 changes: 4 additions & 4 deletions ObjGitObject.h
Expand Up @@ -15,13 +15,13 @@
NSData* raw;
}

@property(assign, readwrite) NSString *sha;
@property(copy, readwrite) NSString *sha;
@property(assign, readwrite) NSInteger size;
@property(assign, readwrite) NSString *type;
@property(assign, readwrite) NSString *contents;
@property(copy, readwrite) NSString *type;
@property(copy, readwrite) NSString *contents;
@property(assign, readwrite) char *rawContents;
@property(assign, readwrite) int rawContentLen;
@property(assign, readwrite) NSData *raw;
@property(copy, readwrite) NSData *raw;

- (id) initFromRaw:(NSData *)rawData withSha:(NSString *)shaValue;
- (void) parseRaw;
Expand Down
2 changes: 1 addition & 1 deletion ObjGitServerHandler.h
Expand Up @@ -56,7 +56,7 @@
- (void) unpackDeltified:(int)type size:(int)size;

- (NSData *) patchDelta:(NSData *)deltaData withObject:(ObjGitObject *)gitObject;
- (NSArray *) patchDeltaHeaderSize:(NSData *)deltaData position:(int)position;
- (NSArray *) patchDeltaHeaderSize:(NSData *)deltaData position:(unsigned long)position;

- (NSString *)readServerSha;
- (int) readPackHeader;
Expand Down

0 comments on commit 45abfbb

Please sign in to comment.