@@ -43,13 +43,6 @@ @interface GTTreeBuilder ()
43
43
@property (nonatomic , assign , readonly ) git_treebuilder *git_treebuilder;
44
44
@property (nonatomic , strong , readonly ) GTRepository *repository;
45
45
46
- // Data to be written with the tree, keyed by the file name. This should only be
47
- // accessed while synchronized on self.
48
- //
49
- // This is needed because we don't want to add the entries to the object
50
- // database until the tree's been written.
51
- @property (nonatomic , strong , readonly ) NSMutableDictionary *fileNameToPendingData;
52
-
53
46
@end
54
47
55
48
@implementation GTTreeBuilder
@@ -80,8 +73,6 @@ - (instancetype)initWithTree:(GTTree *)treeOrNil repository:(GTRepository *)repo
80
73
}
81
74
82
75
_repository = repository;
83
- _fileNameToPendingData = [NSMutableDictionary dictionary ];
84
-
85
76
return self;
86
77
}
87
78
@@ -122,12 +113,11 @@ - (GTTreeEntry *)addEntryWithData:(NSData *)data fileName:(NSString *)fileName f
122
113
NSParameterAssert (data != nil );
123
114
NSParameterAssert (fileName != nil );
124
115
125
- GTOID *OID = [GTOID OIDByHashingData: data type: GTObjectTypeBlob error : error];
126
- if (OID == nil ) return nil ;
116
+ GTObjectDatabase *odb = [self .repository objectDatabaseWithError : error];
117
+ if (odb == nil ) return nil ;
127
118
128
- @synchronized (self) {
129
- self.fileNameToPendingData [fileName] = data;
130
- }
119
+ GTOID *OID = [odb writeData: data type: GTObjectTypeBlob error: error];
120
+ if (OID == nil ) return nil ;
131
121
132
122
return [self addEntryWithOID: OID fileName: fileName fileMode: fileMode error: error];
133
123
}
@@ -153,38 +143,10 @@ - (BOOL)removeEntryWithFileName:(NSString *)fileName error:(NSError **)error {
153
143
if (error != NULL ) *error = [NSError git_errorFor: status description: @" Failed to remove entry with name %@ from tree builder." , fileName];
154
144
}
155
145
156
- @synchronized (self) {
157
- [self .fileNameToPendingData removeObjectForKey: fileName];
158
- }
159
-
160
146
return status == GIT_OK;
161
147
}
162
148
163
- - (BOOL )writePendingData : (NSError **)error {
164
- NSDictionary *copied;
165
- @synchronized (self) {
166
- copied = [self .fileNameToPendingData copy ];
167
- [self .fileNameToPendingData removeAllObjects ];
168
- }
169
-
170
- if (copied.count != 0 ) {
171
- GTObjectDatabase *odb = [self .repository objectDatabaseWithError: error];
172
- if (odb == nil ) return NO ;
173
-
174
- for (NSString *fileName in copied) {
175
- NSData *data = copied[fileName];
176
- GTOID *dataOID = [odb writeData: data type: GTObjectTypeBlob error: error];
177
- if (dataOID == nil ) return NO ;
178
- }
179
- }
180
-
181
- return YES ;
182
- }
183
-
184
149
- (GTTree *)writeTree : (NSError **)error {
185
- BOOL success = [self writePendingData: error];
186
- if (!success) return nil ;
187
-
188
150
git_oid treeOid;
189
151
int status = git_treebuilder_write (&treeOid, self.git_treebuilder );
190
152
if (status != GIT_OK) {
0 commit comments