mirror of
https://github.com/kennethreitz-archive/gitx.git
synced 2026-06-05 15:30:18 +00:00
183 lines
3.0 KiB
Objective-C
183 lines
3.0 KiB
Objective-C
//
|
|
// PBGitCommit.m
|
|
// GitTest
|
|
//
|
|
// Created by Pieter de Bie on 13-06-08.
|
|
// Copyright 2008 __MyCompanyName__. All rights reserved.
|
|
//
|
|
|
|
#import "PBGitCommit.h"
|
|
#import "PBGitDefaults.h"
|
|
|
|
|
|
NSString * const kGitXCommitType = @"commit";
|
|
|
|
|
|
@implementation PBGitCommit
|
|
|
|
@synthesize repository, subject, timestamp, author, sign, lineInfo;
|
|
@synthesize sha;
|
|
@synthesize parents;
|
|
@synthesize committer;
|
|
|
|
|
|
- (NSDate *)date
|
|
{
|
|
return [NSDate dateWithTimeIntervalSince1970:timestamp];
|
|
}
|
|
|
|
- (NSString *) dateString
|
|
{
|
|
NSDateFormatter* formatter = [[NSDateFormatter alloc] initWithDateFormat:@"%Y-%m-%d %H:%M:%S" allowNaturalLanguage:NO];
|
|
return [formatter stringFromDate: self.date];
|
|
}
|
|
|
|
- (NSArray*) treeContents
|
|
{
|
|
return self.tree.children;
|
|
}
|
|
|
|
+ (PBGitCommit *)commitWithRepository:(PBGitRepository*)repo andSha:(NSString *)newSha
|
|
{
|
|
return [[self alloc] initWithRepository:repo andSha:newSha];
|
|
}
|
|
|
|
- (id)initWithRepository:(PBGitRepository*) repo andSha:(NSString *)newSha
|
|
{
|
|
details = nil;
|
|
repository = repo;
|
|
sha = newSha;
|
|
return self;
|
|
}
|
|
|
|
- (NSString *)realSha
|
|
{
|
|
return sha;
|
|
}
|
|
|
|
- (BOOL) isOnSameBranchAs:(PBGitCommit *)otherCommit
|
|
{
|
|
if (!otherCommit)
|
|
return NO;
|
|
|
|
if ([self isEqual:otherCommit])
|
|
return YES;
|
|
|
|
return [repository isOnSameBranch:otherCommit.sha asSHA:self.sha];
|
|
}
|
|
|
|
- (BOOL) isOnHeadBranch
|
|
{
|
|
return [self isOnSameBranchAs:[repository headCommit]];
|
|
}
|
|
|
|
- (BOOL)isEqual:(id)otherCommit
|
|
{
|
|
if (self == otherCommit)
|
|
return YES;
|
|
|
|
if (![otherCommit isMemberOfClass:[PBGitCommit class]])
|
|
return NO;
|
|
|
|
return [self.sha isEqual:[(PBGitCommit *)otherCommit sha]];
|
|
}
|
|
|
|
- (NSUInteger)hash
|
|
{
|
|
return [self.sha hash];
|
|
}
|
|
|
|
// FIXME: Remove this method once it's unused.
|
|
- (NSString*) details
|
|
{
|
|
return @"";
|
|
}
|
|
|
|
- (NSString *) patch
|
|
{
|
|
if (_patch != nil)
|
|
return _patch;
|
|
|
|
NSString *p = [repository outputForArguments:[NSArray arrayWithObjects:@"format-patch", @"-1", @"--stdout", [self realSha], nil]];
|
|
// Add a GitX identifier to the patch ;)
|
|
_patch = [[p substringToIndex:[p length] -1] stringByAppendingString:@"+GitX"];
|
|
return _patch;
|
|
}
|
|
|
|
- (PBGitTree*) tree
|
|
{
|
|
return [PBGitTree rootForCommit: self];
|
|
}
|
|
|
|
- (void)addRef:(PBGitRef *)ref
|
|
{
|
|
if (!self.refs)
|
|
self.refs = [NSMutableArray arrayWithObject:ref];
|
|
else
|
|
[self.refs addObject:ref];
|
|
}
|
|
|
|
- (void)removeRef:(id)ref
|
|
{
|
|
if (!self.refs)
|
|
return;
|
|
|
|
[self.refs removeObject:ref];
|
|
}
|
|
|
|
- (BOOL) hasRef:(PBGitRef *)ref
|
|
{
|
|
if (!self.refs)
|
|
return NO;
|
|
|
|
for (PBGitRef *existingRef in self.refs)
|
|
if ([existingRef isEqualToRef:ref])
|
|
return YES;
|
|
|
|
return NO;
|
|
}
|
|
|
|
- (NSMutableArray *)refs
|
|
{
|
|
return [[repository refs] objectForKey:[self sha]];
|
|
}
|
|
|
|
- (void) setRefs:(NSMutableArray *)refs
|
|
{
|
|
[[repository refs] setObject:refs forKey:[self sha]];
|
|
}
|
|
|
|
- (void)finalize
|
|
{
|
|
[super finalize];
|
|
}
|
|
|
|
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
|
|
{
|
|
return NO;
|
|
}
|
|
|
|
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name {
|
|
return NO;
|
|
}
|
|
|
|
|
|
#pragma mark <PBGitRefish>
|
|
|
|
- (NSString *) refishName
|
|
{
|
|
return [self realSha];
|
|
}
|
|
|
|
- (NSString *) shortName
|
|
{
|
|
return [[self realSha] substringToIndex:10];
|
|
}
|
|
|
|
- (NSString *) refishType
|
|
{
|
|
return kGitXCommitType;
|
|
}
|
|
|
|
@end
|