Skip to content

Commit 85fa5a1

Browse files
committed
GitCommit: Restore revert functionality
This restores the "Revert Changes.." functionality that was removed when changing the file list stuff. It's now possible to revert multiple files. Also, it now uses 'git checkout-index', which should be a bit more robust.
1 parent d0c5db4 commit 85fa5a1

File tree

1 file changed

+63
-31
lines changed

1 file changed

+63
-31
lines changed

PBGitIndexController.m

+63-31
Original file line numberDiff line numberDiff line change
@@ -142,23 +142,38 @@ - (NSString *)unstagedChangesForFile:(PBChangedFile *)file
142142
return [commitController.repository outputInWorkdirForArguments:[NSArray arrayWithObjects:@"diff", @"--", file.path, nil]];
143143
}
144144

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+
}
162177

163178

164179
# pragma mark Context Menu methods
@@ -207,20 +222,23 @@ - (NSMenu *) menuForTable:(NSTableView *)table
207222
[menu addItem:ignoreItem];
208223
}
209224

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];
224242

225243
return menu;
226244
}
@@ -252,6 +270,20 @@ - (void) ignoreFilesAction:(id) sender
252270
[commitController refresh:NULL];
253271
}
254272

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+
255287

256288
# pragma mark TableView icon delegate
257289
- (void)tableView:(NSTableView*)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn*)tableColumn row:(int)rowIndex

0 commit comments

Comments
 (0)