mirror of
https://github.com/kennethreitz-archive/gitx.git
synced 2026-06-05 23:40:18 +00:00
Add a File Path search mode
Highlights any commit that touches a file. The "Show history of file" context menu item will now set the path search instead of creating a rev specifier.
This commit is contained in:
@@ -516,14 +516,8 @@
|
||||
|
||||
- (void)showCommitsFromTree:(id)sender
|
||||
{
|
||||
// TODO: Enable this from webview as well!
|
||||
|
||||
NSMutableArray *filePaths = [NSMutableArray arrayWithObjects:@"HEAD", @"--", NULL];
|
||||
[filePaths addObjectsFromArray:[sender representedObject]];
|
||||
|
||||
PBGitRevSpecifier *revSpec = [[PBGitRevSpecifier alloc] initWithParameters:filePaths];
|
||||
|
||||
repository.currentBranch = [repository addBranch:revSpec];
|
||||
NSString *searchString = [(NSArray *)[sender representedObject] componentsJoinedByString:@" "];
|
||||
[searchController setHistorySearch:searchString mode:kGitXPathSearchMode];
|
||||
}
|
||||
|
||||
- (void)showInFinderAction:(id)sender
|
||||
|
||||
@@ -13,6 +13,7 @@ typedef enum historySearchModes {
|
||||
kGitXBasicSeachMode = 1,
|
||||
kGitXPickaxeSearchMode,
|
||||
kGitXRegexSearchMode,
|
||||
kGitXPathSearchMode,
|
||||
kGitXMaxSearchMode // always keep this item last
|
||||
} PBHistorySearchMode;
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#define kGitXBasicSearchLabel @"Subject, Author, SHA"
|
||||
#define kGitXPickaxeSearchLabel @"Commit (pickaxe)"
|
||||
#define kGitXRegexSearchLabel @"Commit (pickaxe regex)"
|
||||
#define kGitXPathSearchLabel @"File path"
|
||||
|
||||
#define kGitXSearchArrangedObjectsContext @"GitXSearchArrangedObjectsContext"
|
||||
|
||||
@@ -244,6 +245,11 @@
|
||||
item = [[NSMenuItem alloc] initWithTitle:kGitXRegexSearchLabel action:@selector(selectSearchMode:) keyEquivalent:@""];
|
||||
[item setTarget:self];
|
||||
[item setTag:kGitXRegexSearchMode];
|
||||
[searchMenu addItem:item];
|
||||
|
||||
item = [[NSMenuItem alloc] initWithTitle:kGitXPathSearchLabel action:@selector(selectSearchMode:) keyEquivalent:@""];
|
||||
[item setTarget:self];
|
||||
[item setTag:kGitXPathSearchMode];
|
||||
[searchMenu addItem:item];
|
||||
|
||||
item = [NSMenuItem separatorItem];
|
||||
@@ -289,6 +295,9 @@
|
||||
item = [searchMenu itemWithTag:kGitXRegexSearchMode];
|
||||
[item setState:(searchMode == kGitXRegexSearchMode) ? NSOnState : NSOffState];
|
||||
|
||||
item = [searchMenu itemWithTag:kGitXPathSearchMode];
|
||||
[item setState:(searchMode == kGitXPathSearchMode) ? NSOnState : NSOffState];
|
||||
|
||||
[[searchField cell] setSearchMenuTemplate:searchMenu];
|
||||
|
||||
[PBGitDefaults setHistorySearchMode:searchMode];
|
||||
@@ -303,6 +312,9 @@
|
||||
case kGitXRegexSearchMode:
|
||||
[[searchField cell] setPlaceholderString:kGitXRegexSearchLabel];
|
||||
break;
|
||||
case kGitXPathSearchMode:
|
||||
[[searchField cell] setPlaceholderString:kGitXPathSearchLabel];
|
||||
break;
|
||||
default:
|
||||
[[searchField cell] setPlaceholderString:kGitXBasicSearchLabel];
|
||||
break;
|
||||
@@ -372,7 +384,7 @@
|
||||
|
||||
|
||||
|
||||
#pragma mark Pickaxe/Regex Search
|
||||
#pragma mark Background Search
|
||||
|
||||
- (void)startBackgroundSearch
|
||||
{
|
||||
@@ -390,9 +402,20 @@
|
||||
|
||||
results = nil;
|
||||
|
||||
NSMutableArray *searchArguments = [NSMutableArray arrayWithObjects:@"log", @"--pretty=format:%H", [NSString stringWithFormat:@"-S%@", searchString], nil];
|
||||
if (self.searchMode == kGitXRegexSearchMode)
|
||||
[searchArguments insertObject:@"--pickaxe-regex" atIndex:1];
|
||||
NSMutableArray *searchArguments = [NSMutableArray arrayWithObjects:@"log", @"--pretty=format:%H", nil];
|
||||
switch (self.searchMode) {
|
||||
case kGitXRegexSearchMode:
|
||||
[searchArguments addObject:@"--pickaxe-regex"];
|
||||
case kGitXPickaxeSearchMode:
|
||||
[searchArguments addObject:[NSString stringWithFormat:@"-S%@", searchString]];
|
||||
break;
|
||||
case kGitXPathSearchMode:
|
||||
[searchArguments addObject:@"--"];
|
||||
[searchArguments addObjectsFromArray:[searchString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
backgroundSearchTask = [PBEasyPipe taskForCommand:[PBGitBinary path] withArgs:searchArguments inDir:[[historyController.repository fileURL] path]];
|
||||
[backgroundSearchTask launch];
|
||||
|
||||
@@ -71,6 +71,8 @@ void usage(char const *programName)
|
||||
printf(" commits that introduce or remove an instance of <string>\n");
|
||||
printf(" -r<regex>, --regex=<regex>\n");
|
||||
printf(" commits that introduce or remove strings that match <regex>\n");
|
||||
printf(" -p<file path>, --path=<file path>\n");
|
||||
printf(" commits that modify the file at file path\n");
|
||||
printf("\n");
|
||||
printf("Creating repositories\n");
|
||||
printf(" These commands will create a git repository and then open it up in GitX\n");
|
||||
@@ -214,10 +216,12 @@ void handleClone(NSURL *repositoryURL, NSMutableArray *arguments)
|
||||
#define kPickaxeSearch @"--Search="
|
||||
#define kShortRegexSearch @"-r"
|
||||
#define kRegexSearch @"--regex="
|
||||
#define kShortPathSearch @"-p"
|
||||
#define kPathSearch @"--path="
|
||||
|
||||
NSArray *commandLineSearchPrefixes()
|
||||
{
|
||||
return [NSArray arrayWithObjects:kShortBasicSearch, kBasicSearch, kShortPickaxeSearch, kPickaxeSearch, kShortRegexSearch, kRegexSearch, nil];
|
||||
return [NSArray arrayWithObjects:kShortBasicSearch, kBasicSearch, kShortPickaxeSearch, kPickaxeSearch, kShortRegexSearch, kRegexSearch, kShortPathSearch, kPathSearch, nil];
|
||||
}
|
||||
|
||||
PBHistorySearchMode searchModeForCommandLineArgument(NSString *argument)
|
||||
@@ -231,6 +235,9 @@ PBHistorySearchMode searchModeForCommandLineArgument(NSString *argument)
|
||||
if ([argument hasPrefix:kShortRegexSearch] || [argument hasPrefix:kRegexSearch])
|
||||
return kGitXRegexSearchMode;
|
||||
|
||||
if ([argument hasPrefix:kShortPathSearch] || [argument hasPrefix:kPathSearch])
|
||||
return kGitXPathSearchMode;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user