Changes search prefixes

Fixes issue with author searching
This commit is contained in:
Eric Amodio
2017-04-09 10:58:28 -04:00
parent 82bd510593
commit 2a9b274920
2 changed files with 39 additions and 31 deletions

View File

@@ -1,17 +1,24 @@
'use strict'; 'use strict';
import { commands, InputBoxOptions, TextEditor, Uri, window } from 'vscode'; import { commands, InputBoxOptions, TextEditor, Uri, window } from 'vscode';
import { ActiveEditorCachedCommand, Commands } from './common'; import { ActiveEditorCachedCommand, Commands } from './common';
import { Git, GitService, GitUri } from '../gitService'; import { Git, GitRepoSearchBy, GitService, GitUri } from '../gitService';
import { Logger } from '../logger'; import { Logger } from '../logger';
import { CommandQuickPickItem, CommitsQuickPick } from '../quickPicks'; import { CommandQuickPickItem, CommitsQuickPick } from '../quickPicks';
const searchByRegex = /^([@:#])/;
const searchByMap = new Map<string, GitRepoSearchBy>([
['@', GitRepoSearchBy.Author],
[':', GitRepoSearchBy.Files],
['#', GitRepoSearchBy.Sha]
]);
export class ShowCommitSearchCommand extends ActiveEditorCachedCommand { export class ShowCommitSearchCommand extends ActiveEditorCachedCommand {
constructor(private git: GitService) { constructor(private git: GitService) {
super(Commands.ShowCommitSearch); super(Commands.ShowCommitSearch);
} }
async execute(editor: TextEditor, uri?: Uri, search?: string, searchBy?: undefined | 'author' | 'files' | 'message' | 'sha', goBackCommand?: CommandQuickPickItem) { async execute(editor: TextEditor, uri?: Uri, search?: string, searchBy?: GitRepoSearchBy, goBackCommand?: CommandQuickPickItem) {
if (!(uri instanceof Uri)) { if (!(uri instanceof Uri)) {
if (!editor || !editor.document) return undefined; if (!editor || !editor.document) return undefined;
uri = editor.document.uri; uri = editor.document.uri;
@@ -23,27 +30,20 @@ export class ShowCommitSearchCommand extends ActiveEditorCachedCommand {
search = await window.showInputBox({ search = await window.showInputBox({
value: search, value: search,
prompt: `Please enter a search string`, prompt: `Please enter a search string`,
placeHolder: `search by message, author (use a:<name>), files (use f:<pattern>), or sha (use s:<hash>)` placeHolder: `search by message, author (use @<name>), files (use :<pattern>), or commit id (use #<sha>)`
} as InputBoxOptions); } as InputBoxOptions);
if (search === undefined) return goBackCommand && goBackCommand.execute(); if (search === undefined) return goBackCommand && goBackCommand.execute();
if (Git.isSha(search)) { const match = searchByRegex.exec(search);
searchBy = 'sha'; if (match && match[1]) {
searchBy = searchByMap.get(match[1]);
search = search.substring((search[1] === ' ') ? 2 : 1);
} }
else if (search.startsWith('a:')) { else if (Git.isSha(search)) {
searchBy = 'author'; searchBy = GitRepoSearchBy.Sha;
search = search.substring((search[2] === ' ') ? 3 : 2);
}
else if (search.startsWith('f:')) {
searchBy = 'files';
search = search.substring((search[2] === ' ') ? 3 : 2);
}
else if (search.startsWith('s:')) {
searchBy = 'sha';
search = search.substring((search[2] === ' ') ? 3 : 2);
} }
else { else {
searchBy = 'message'; searchBy = GitRepoSearchBy.Message;
} }
} }
@@ -53,21 +53,21 @@ export class ShowCommitSearchCommand extends ActiveEditorCachedCommand {
let originalSearch: string; let originalSearch: string;
let placeHolder: string; let placeHolder: string;
switch (searchBy) { switch (searchBy) {
case 'author': case GitRepoSearchBy.Author:
originalSearch = `a:${search}`; originalSearch = `@${search}`;
placeHolder = `commits with author matching '${search}'`; placeHolder = `commits with author matching '${search}'`;
break; break;
case 'files': case GitRepoSearchBy.Files:
originalSearch = `f:${search}`; originalSearch = `:${search}`;
placeHolder = `commits with files matching '${search}'`; placeHolder = `commits with files matching '${search}'`;
break; break;
case 'message': case GitRepoSearchBy.Message:
originalSearch = search; originalSearch = search;
placeHolder = `commits with message matching '${search}'`; placeHolder = `commits with message matching '${search}'`;
break; break;
case 'sha': case GitRepoSearchBy.Sha:
originalSearch = `s:${search}`; originalSearch = `#${search}`;
placeHolder = `commits with sha matching '${search}'`; placeHolder = `commits with id matching '${search}'`;
break; break;
} }

View File

@@ -48,6 +48,14 @@ enum RemoveCacheReason {
DocumentSaved DocumentSaved
} }
export type GitRepoSearchBy = 'author' | 'files' | 'message' | 'sha';
export const GitRepoSearchBy = {
Author: 'author' as GitRepoSearchBy,
Files: 'files' as GitRepoSearchBy,
Message: 'message' as GitRepoSearchBy,
Sha: 'sha' as GitRepoSearchBy
};
export class GitService extends Disposable { export class GitService extends Disposable {
private _onDidChangeGitCacheEmitter = new EventEmitter<void>(); private _onDidChangeGitCacheEmitter = new EventEmitter<void>();
@@ -562,7 +570,7 @@ export class GitService extends Disposable {
} }
} }
async getLogForRepoSearch(repoPath: string, search: string, searchBy: 'author' | 'files' | 'message' | 'sha', maxCount?: number): Promise<IGitLog | undefined> { async getLogForRepoSearch(repoPath: string, search: string, searchBy: GitRepoSearchBy, maxCount?: number): Promise<IGitLog | undefined> {
Logger.log(`getLogForRepoSearch('${repoPath}', ${search}, ${searchBy}, ${maxCount})`); Logger.log(`getLogForRepoSearch('${repoPath}', ${search}, ${searchBy}, ${maxCount})`);
if (maxCount == null) { if (maxCount == null) {
@@ -571,16 +579,16 @@ export class GitService extends Disposable {
let searchArgs: string[]; let searchArgs: string[];
switch (searchBy) { switch (searchBy) {
case 'author': case GitRepoSearchBy.Author:
searchArgs = [`'--author='${search}`]; searchArgs = [`--author=${search}`];
break; break;
case 'files': case GitRepoSearchBy.Files:
searchArgs = [`--`, `${search}`]; searchArgs = [`--`, `${search}`];
break; break;
case 'message': case GitRepoSearchBy.Message:
searchArgs = [`--grep=${search}`]; searchArgs = [`--grep=${search}`];
break; break;
case 'sha': case GitRepoSearchBy.Sha:
searchArgs = [search]; searchArgs = [search];
maxCount = 1; maxCount = 1;
break; break;