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:
Nathan Kinsinger
2010-09-11 14:34:22 -06:00
parent d77d85b807
commit c605b74476
4 changed files with 38 additions and 13 deletions
+2 -8
View File
@@ -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
+1
View File
@@ -13,6 +13,7 @@ typedef enum historySearchModes {
kGitXBasicSeachMode = 1,
kGitXPickaxeSearchMode,
kGitXRegexSearchMode,
kGitXPathSearchMode,
kGitXMaxSearchMode // always keep this item last
} PBHistorySearchMode;
+27 -4
View File
@@ -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];
+8 -1
View File
@@ -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;
}