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.
This commit is contained in:
Pieter de Bie
2008-12-22 22:22:10 +01:00
parent d0c5db47ea
commit 85fa5a1d8f
+63 -31
View File
@@ -142,23 +142,38 @@
return [commitController.repository outputInWorkdirForArguments:[NSArray arrayWithObjects:@"diff", @"--", file.path, nil]];
}
//- (void) forceRevertChanges
//{
// [repository outputInWorkdirForArguments:[NSArray arrayWithObjects:@"checkout", @"--", file.path, nil]];
// self.hasUnstagedChanges = NO;
//}
//
//- (void) revertChanges
//{
// int ret = [[NSAlert alertWithMessageText:@"Revert changes"
// defaultButton:nil
// alternateButton:@"Cancel"
// otherButton:nil
// informativeTextWithFormat:@"Are you sure you wish to revert the changes in '%@'?\n\n You cannot undo this operation.", path] runModal];
//
// if (ret == NSAlertDefaultReturn)
// [self forceRevertChanges];
//}
- (void) forceRevertChangesForFiles:(NSArray *)files
{
NSArray *paths = [files valueForKey:@"path"];
NSString *input = [paths componentsJoinedByString:@"\0"];
NSArray *arguments = [NSArray arrayWithObjects:@"checkout-index", @"--index", @"--quiet", @"--force", @"-z", @"--stdin", nil];
int ret = 1;
[commitController.repository outputForArguments:arguments inputString:input retValue:&ret];
if (ret) {
[[NSAlert alertWithMessageText:@"Reverting changes failed"
defaultButton:nil
alternateButton:nil
otherButton:nil
informativeTextWithFormat:@"Reverting changes failed with error code %i", ret] runModal];
return;
}
for (PBChangedFile *file in files)
file.hasUnstagedChanges = NO;
}
- (void) revertChangesForFiles:(NSArray *)files
{
int ret = [[NSAlert alertWithMessageText:@"Revert changes"
defaultButton:nil
alternateButton:@"Cancel"
otherButton:nil
informativeTextWithFormat:@"Are you sure you wish to revert changes?\n\n You cannot undo this operation."] runModal];
if (ret == NSAlertDefaultReturn)
[self forceRevertChangesForFiles:files];
}
# pragma mark Context Menu methods
@@ -207,20 +222,23 @@
[menu addItem:ignoreItem];
}
// Do not add "revert" options for untracked files
// if (selectedItem.status == NEW)
// return a;
//
// NSMenuItem *revertItem = [[NSMenuItem alloc] initWithTitle:@"Revert Changes…" action:@selector(revertChanges) keyEquivalent:@""];
// [revertItem setTarget:selectedItem];
// [revertItem setAlternate:NO];
// [a addItem:revertItem];
//
// NSMenuItem *revertForceItem = [[NSMenuItem alloc] initWithTitle:@"Revert Changes" action:@selector(forceRevertChanges) keyEquivalent:@""];
// [revertForceItem setTarget:selectedItem];
// [revertForceItem setAlternate:YES];
// [revertForceItem setKeyEquivalentModifierMask:NSAlternateKeyMask];
// [a addItem:revertForceItem];
for (PBChangedFile *file in selectedFiles)
if (!file.hasUnstagedChanges)
return menu;
NSMenuItem *revertItem = [[NSMenuItem alloc] initWithTitle:@"Revert Changes…" action:@selector(revertFilesAction:) keyEquivalent:@""];
[revertItem setTarget:self];
[revertItem setAlternate:NO];
[revertItem setRepresentedObject:selectedFiles];
[menu addItem:revertItem];
NSMenuItem *revertForceItem = [[NSMenuItem alloc] initWithTitle:@"Revert Changes" action:@selector(forceRevertFilesAction:) keyEquivalent:@""];
[revertForceItem setTarget:self];
[revertForceItem setAlternate:YES];
[revertForceItem setRepresentedObject:selectedFiles];
[revertForceItem setKeyEquivalentModifierMask:NSAlternateKeyMask];
[menu addItem:revertForceItem];
return menu;
}
@@ -252,6 +270,20 @@
[commitController refresh:NULL];
}
- (void) revertFilesAction:(id) sender
{
NSArray *selectedFiles = [sender representedObject];
if ([selectedFiles count] > 0)
[self revertChangesForFiles:selectedFiles];
}
- (void) forceRevertFilesAction:(id) sender
{
NSArray *selectedFiles = [sender representedObject];
if ([selectedFiles count] > 0)
[self forceRevertChangesForFiles:selectedFiles];
}
# pragma mark TableView icon delegate
- (void)tableView:(NSTableView*)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn*)tableColumn row:(int)rowIndex