Merge branch 'pu/pb/index_quick_fix' into stable
[GitX.git] / PBGitCommit.m
blobb883c9560eed0d8ef2992d40cab81a35b5cab076
1 //
2 //  PBGitCommit.m
3 //  GitTest
4 //
5 //  Created by Pieter de Bie on 13-06-08.
6 //  Copyright 2008 __MyCompanyName__. All rights reserved.
7 //
9 #import "PBGitCommit.h"
10 #import "PBGitDefaults.h"
12 @implementation PBGitCommit
14 @synthesize repository, subject, timestamp, author, parentShas, nParents, sign, lineInfo;
16 - (NSArray *) parents
18         if (nParents == 0)
19                 return NULL;
21         int i;
22         NSMutableArray *p = [NSMutableArray arrayWithCapacity:nParents];
23         for (i = 0; i < nParents; ++i)
24         {
25                 char *s = git_oid_mkhex(parentShas + i);
26                 [p addObject:[NSString stringWithUTF8String:s]];
27                 free(s);
28         }
29         return p;
32 - (NSDate *)date
34         return [NSDate dateWithTimeIntervalSince1970:timestamp];
37 - (NSString *) dateString
39         NSDateFormatter* formatter = [[NSDateFormatter alloc] initWithDateFormat:@"%Y-%m-%d %H:%M:%S" allowNaturalLanguage:NO];
40         return [formatter stringFromDate: self.date];
43 - (NSArray*) treeContents
45         return self.tree.children;
48 - (git_oid *)sha
50         return &sha;
53 - initWithRepository:(PBGitRepository*) repo andSha:(git_oid)newSha
55         details = nil;
56         repository = repo;
57         sha = newSha;
58         return self;
61 - (NSString *)realSha
63         char *hex = git_oid_mkhex(&sha);
64         NSString *str = [NSString stringWithUTF8String:hex];
65         free(hex);
66         return str;
69 // NOTE: This method should remain threadsafe, as we load it in async
70 // from the web view.
71 - (NSString*) details
73         if (details != nil)
74                 return details;
76         NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"show", @"--pretty=raw", @"-M", @"--no-color", [self realSha], nil];
77         if (![PBGitDefaults showWhitespaceDifferences])
78                 [arguments insertObject:@"-w" atIndex:1];
80         details = [self.repository outputForArguments:arguments];
82         return details;
85 - (NSString *) patch
87         if (_patch != nil)
88                 return _patch;
90         NSString *p = [repository outputForArguments:[NSArray arrayWithObjects:@"format-patch",  @"-1", @"--stdout", [self realSha], nil]];
91         // Add a GitX identifier to the patch ;)
92         _patch = [[p substringToIndex:[p length] -1] stringByAppendingString:@"+GitX"];
93         return _patch;
96 - (PBGitTree*) tree
98         return [PBGitTree rootForCommit: self];
101 - (void)addRef:(PBGitRef *)ref
103         if (!self.refs)
104                 self.refs = [NSMutableArray arrayWithObject:ref];
105         else
106                 [self.refs addObject:ref];
109 - (void)removeRef:(id)ref
111         if (!self.refs)
112                 return;
114         [self.refs removeObject:ref];
117 - (NSMutableArray *)refs
119         return [[repository refs] objectForKey:[self realSha]];
122 - (void) setRefs:(NSMutableArray *)refs
124         [[repository refs] setObject:refs forKey:[self realSha]];
127 - (void)finalize
129         free(parentShas);
130         [super finalize];
133 + (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
135         return NO;
138 + (BOOL)isKeyExcludedFromWebScript:(const char *)name {
139         return NO;
141 @end