@@ -142,23 +142,38 @@ - (NSString *)unstagedChangesForFile:(PBChangedFile *)file
142
142
return [commitController.repository outputInWorkdirForArguments: [NSArray arrayWithObjects: @" diff" , @" --" , file.path, nil ]];
143
143
}
144
144
145
- // - (void) forceRevertChanges
146
- // {
147
- // [repository outputInWorkdirForArguments:[NSArray arrayWithObjects:@"checkout", @"--", file.path, nil]];
148
- // self.hasUnstagedChanges = NO;
149
- // }
150
- //
151
- // - (void) revertChanges
152
- // {
153
- // int ret = [[NSAlert alertWithMessageText:@"Revert changes"
154
- // defaultButton:nil
155
- // alternateButton:@"Cancel"
156
- // otherButton:nil
157
- // informativeTextWithFormat:@"Are you sure you wish to revert the changes in '%@'?\n\n You cannot undo this operation.", path] runModal];
158
- //
159
- // if (ret == NSAlertDefaultReturn)
160
- // [self forceRevertChanges];
161
- // }
145
+ - (void ) forceRevertChangesForFiles : (NSArray *)files
146
+ {
147
+ NSArray *paths = [files valueForKey: @" path" ];
148
+ NSString *input = [paths componentsJoinedByString: @" \0 " ];
149
+
150
+ NSArray *arguments = [NSArray arrayWithObjects: @" checkout-index" , @" --index" , @" --quiet" , @" --force" , @" -z" , @" --stdin" , nil ];
151
+ int ret = 1 ;
152
+ [commitController.repository outputForArguments: arguments inputString: input retValue: &ret];
153
+ if (ret) {
154
+ [[NSAlert alertWithMessageText: @" Reverting changes failed"
155
+ defaultButton: nil
156
+ alternateButton: nil
157
+ otherButton: nil
158
+ informativeTextWithFormat: @" Reverting changes failed with error code %i " , ret] runModal ];
159
+ return ;
160
+ }
161
+
162
+ for (PBChangedFile *file in files)
163
+ file.hasUnstagedChanges = NO ;
164
+ }
165
+
166
+ - (void ) revertChangesForFiles : (NSArray *)files
167
+ {
168
+ int ret = [[NSAlert alertWithMessageText: @" Revert changes"
169
+ defaultButton: nil
170
+ alternateButton: @" Cancel"
171
+ otherButton: nil
172
+ informativeTextWithFormat: @" Are you sure you wish to revert changes?\n\n You cannot undo this operation." ] runModal ];
173
+
174
+ if (ret == NSAlertDefaultReturn )
175
+ [self forceRevertChangesForFiles: files];
176
+ }
162
177
163
178
164
179
# pragma mark Context Menu methods
@@ -207,20 +222,23 @@ - (NSMenu *) menuForTable:(NSTableView *)table
207
222
[menu addItem: ignoreItem];
208
223
}
209
224
210
- // Do not add "revert" options for untracked files
211
- // if (selectedItem.status == NEW)
212
- // return a;
213
- //
214
- // NSMenuItem *revertItem = [[NSMenuItem alloc] initWithTitle:@"Revert Changes…" action:@selector(revertChanges) keyEquivalent:@""];
215
- // [revertItem setTarget:selectedItem];
216
- // [revertItem setAlternate:NO];
217
- // [a addItem:revertItem];
218
- //
219
- // NSMenuItem *revertForceItem = [[NSMenuItem alloc] initWithTitle:@"Revert Changes" action:@selector(forceRevertChanges) keyEquivalent:@""];
220
- // [revertForceItem setTarget:selectedItem];
221
- // [revertForceItem setAlternate:YES];
222
- // [revertForceItem setKeyEquivalentModifierMask:NSAlternateKeyMask];
223
- // [a addItem:revertForceItem];
225
+ for (PBChangedFile *file in selectedFiles)
226
+ if (!file.hasUnstagedChanges )
227
+ return menu;
228
+
229
+ NSMenuItem *revertItem = [[NSMenuItem alloc ] initWithTitle: @" Revert Changes…" action: @selector (revertFilesAction: ) keyEquivalent: @" " ];
230
+ [revertItem setTarget: self ];
231
+ [revertItem setAlternate: NO ];
232
+ [revertItem setRepresentedObject: selectedFiles];
233
+
234
+ [menu addItem: revertItem];
235
+
236
+ NSMenuItem *revertForceItem = [[NSMenuItem alloc ] initWithTitle: @" Revert Changes" action: @selector (forceRevertFilesAction: ) keyEquivalent: @" " ];
237
+ [revertForceItem setTarget: self ];
238
+ [revertForceItem setAlternate: YES ];
239
+ [revertForceItem setRepresentedObject: selectedFiles];
240
+ [revertForceItem setKeyEquivalentModifierMask: NSAlternateKeyMask ];
241
+ [menu addItem: revertForceItem];
224
242
225
243
return menu;
226
244
}
@@ -252,6 +270,20 @@ - (void) ignoreFilesAction:(id) sender
252
270
[commitController refresh: NULL ];
253
271
}
254
272
273
+ - (void ) revertFilesAction : (id ) sender
274
+ {
275
+ NSArray *selectedFiles = [sender representedObject ];
276
+ if ([selectedFiles count ] > 0 )
277
+ [self revertChangesForFiles: selectedFiles];
278
+ }
279
+
280
+ - (void ) forceRevertFilesAction : (id ) sender
281
+ {
282
+ NSArray *selectedFiles = [sender representedObject ];
283
+ if ([selectedFiles count ] > 0 )
284
+ [self forceRevertChangesForFiles: selectedFiles];
285
+ }
286
+
255
287
256
288
# pragma mark TableView icon delegate
257
289
- (void )tableView : (NSTableView *)tableView willDisplayCell : (id )cell forTableColumn : (NSTableColumn *)tableColumn row : (int )rowIndex
0 commit comments