@@ -43,13 +43,6 @@ @interface GTTreeBuilder ()
4343@property (nonatomic , assign , readonly ) git_treebuilder *git_treebuilder;
4444@property (nonatomic , strong , readonly ) GTRepository *repository;
4545
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-
5346@end
5447
5548@implementation GTTreeBuilder
@@ -80,8 +73,6 @@ - (instancetype)initWithTree:(GTTree *)treeOrNil repository:(GTRepository *)repo
8073 }
8174
8275 _repository = repository;
83- _fileNameToPendingData = [NSMutableDictionary dictionary ];
84-
8576 return self;
8677}
8778
@@ -122,12 +113,11 @@ - (GTTreeEntry *)addEntryWithData:(NSData *)data fileName:(NSString *)fileName f
122113 NSParameterAssert (data != nil );
123114 NSParameterAssert (fileName != nil );
124115
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 ;
127118
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 ;
131121
132122 return [self addEntryWithOID: OID fileName: fileName fileMode: fileMode error: error];
133123}
@@ -153,38 +143,10 @@ - (BOOL)removeEntryWithFileName:(NSString *)fileName error:(NSError **)error {
153143 if (error != NULL ) *error = [NSError git_errorFor: status description: @" Failed to remove entry with name %@ from tree builder." , fileName];
154144 }
155145
156- @synchronized (self) {
157- [self .fileNameToPendingData removeObjectForKey: fileName];
158- }
159-
160146 return status == GIT_OK;
161147}
162148
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-
184149- (GTTree *)writeTree : (NSError **)error {
185- BOOL success = [self writePendingData: error];
186- if (!success) return nil ;
187-
188150 git_oid treeOid;
189151 int status = git_treebuilder_write (&treeOid, self.git_treebuilder );
190152 if (status != GIT_OK) {
0 commit comments