-
Notifications
You must be signed in to change notification settings - Fork 280
/
Copy pathGTNote.m
105 lines (82 loc) · 2.59 KB
/
GTNote.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//
// GTNote.m
// ObjectiveGitFramework
//
// Created by Slava Karpenko on 16.05.16.
// Copyright © 2016 Wildbit LLC. All rights reserved.
//
#import "GTNote.h"
#import "NSError+Git.h"
#import "GTSignature.h"
#import "GTReference.h"
#import "GTRepository.h"
#import "NSString+Git.h"
#import "GTOID.h"
#import "git2/errors.h"
#import "git2/notes.h"
@interface GTNote ()
{
git_note *_note;
}
@end
@implementation GTNote
- (NSString *)description {
return [NSString stringWithFormat:@"<%@: %p>", NSStringFromClass([self class]), self];
}
#pragma mark API
- (void)dealloc {
if (_note != NULL) {
git_note_free(_note);
}
}
- (git_note *)git_note {
return _note;
}
- (NSString *)note {
NSString *message = @(git_note_message(self.git_note));
NSAssert(message, @"message is nil");
return message;
}
- (GTSignature *)author {
return [[GTSignature alloc] initWithGitSignature:git_note_author(self.git_note)];
}
- (GTSignature *)committer {
return [[GTSignature alloc] initWithGitSignature:git_note_committer(self.git_note)];
}
- (GTOID *)targetOID {
return [GTOID oidWithGitOid:git_note_id(self.git_note)];
}
- (instancetype)initWithTargetOID:(GTOID *)oid repository:(GTRepository *)repository referenceName:(NSString *)referenceName error:(NSError **)error {
return [self initWithTargetGitOID:(git_oid *)oid.git_oid repository:repository.git_repository referenceName:referenceName.UTF8String error:error];
}
- (instancetype)initWithTargetGitOID:(git_oid *)oid repository:(git_repository *)repository referenceName:(const char *)referenceName error:(NSError **)error {
self = [super init];
if (self == nil) return nil;
int gitErr = git_note_read(&_note, repository, referenceName, oid);
if (gitErr != GIT_OK) {
if (error != NULL) *error = [NSError git_errorFor:gitErr description:@"Unable to read note"];
return nil;
}
return self;
}
- (instancetype)init {
NSAssert(NO, @"Call to an unavailable initializer.");
return nil;
}
+ (NSString *)defaultReferenceNameForRepository:(GTRepository *)repository error:(NSError **)error {
NSString *noteRef = nil;
git_buf default_ref_name = { 0 };
int gitErr = git_note_default_ref(&default_ref_name, repository.git_repository);
if (gitErr != GIT_OK) {
if (error != NULL) *error = [NSError git_errorFor:gitErr description:@"Unable to get default git notes reference name"];
return nil;
}
if (default_ref_name.ptr != NULL) {
noteRef = @(default_ref_name.ptr);
} else {
if (error != NULL) *error = [NSError git_errorFor:GIT_ERROR description:@"Unable to get default git notes reference name"];
}
git_buf_free(&default_ref_name);
return noteRef;
}
@end