mirror of
https://github.com/kennethreitz-archive/gitx.git
synced 2026-06-05 23:40:18 +00:00
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:
+63
-31
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user