- import { executeGitCommand } from '../commands';
- import type { Container } from '../container';
- import { SearchPattern } from '../git/search';
- import { SearchResultsNode } from '../views/nodes';
- import { Command, command, CommandContext, Commands, isCommandContextViewNodeHasRepository } from './common';
-
- export interface SearchCommitsCommandArgs {
- search?: Partial<SearchPattern>;
- repoPath?: string;
-
- prefillOnly?: boolean;
-
- showResultsInSideBar?: boolean;
- }
-
- @command()
- export class SearchCommitsCommand extends Command {
- constructor(private readonly container: Container) {
- super([Commands.SearchCommits, Commands.SearchCommitsInView]);
- }
-
- protected override preExecute(context: CommandContext, args?: SearchCommitsCommandArgs) {
- if (context.type === 'viewItem') {
- args = { ...args };
- args.showResultsInSideBar = true;
-
- if (context.node instanceof SearchResultsNode) {
- args.repoPath = context.node.repoPath;
- args.search = context.node.search;
- args.prefillOnly = true;
- }
-
- if (isCommandContextViewNodeHasRepository(context)) {
- args.repoPath = context.node.repo.path;
- }
- } else if (context.command === Commands.SearchCommitsInView) {
- args = { ...args };
- args.showResultsInSideBar = true;
- }
-
- return this.execute(args);
- }
-
- async execute(args?: SearchCommitsCommandArgs) {
- void (await executeGitCommand({
- command: 'search',
- prefillOnly: args?.prefillOnly,
- state: {
- repo: args?.repoPath,
- ...args?.search,
- showResultsInSideBar:
- this.container.config.gitCommands.search.showResultsInSideBar ?? args?.showResultsInSideBar,
- },
- }));
- }
- }
|