Skip to content

GitCommandError: Cmd('git') failed due to: exit code(1) when execute 'grep' with regex #1164

Answered by rmahdav
rmahdav asked this question in Q&A
GitCommandError: Cmd('git') failed due to: exit code(1) when execute 'grep' with regex #1164
Oct 23, 2020 · 4 answers

Hi,

I am trying to execute a grep command with regex using the execute() function. A part of my code is:

for item in toggles:

    files_result = Repo.execute(["git", "grep", "--files-with-matches", "\"config.isEnabled([[:space:]*]'" + item + "'[[:space:]*])\""]) 

I am getting the following error:

---------------------------------------------------------------------------
GitCommandError                           Traceback (most recent call last)
<ipython-input-82-f4329c19384f> in <module>
      3 
      4 for item in toggles:
----> 5     files_result = Repo.execute(["git", "grep", "--files-with-matches", "\"config.isEnabled([[:space:]*]'" + item + "'[[:space:]*])\""])
      6     files = files_result.splitlines()
      7 

/opt/anaconda3/lib/python3.8/site-packages/git/cmd.py in execute(self, command, istream, with_extended_output, with_exceptions, as_process, output_stream, stdout_as_string, kill_after_timeout, with_stdout, universal_newlines, shell, env, max_chunk_size, **subprocess_kwargs)
    820 
    821         if with_exceptions and status != 0:
--> 822             raise GitCommandError(command, status, stderr_value, stdout_value)
    823 
    824         if isinstance(stdout_value, bytes) and stdout_as_string:  # could also be output_stream

GitCommandError: Cmd('git') failed due to: exit code(1)
  cmdline: git grep --files-with-matches "config.isEnabled([[:space:]*]'async-payments'[[:space:]*])"

However, when I run git grep --files-with-matches "config.isEnabled([[:space:]*]'async-payments'[[:space:]*])" in the command line, it works.

I appreciate any help.

The issue is resolved by removing \" from the "\"config.isEnabled([[:space:]*]'" + item + "'[[:space:]*])\"".

Another issue comes up now. If the result of executing grep function is empty, I am getting the same error GitCommandError: Cmd('git') failed due to: exit code(1) . When there is any result, it works fine.

Any ideas to solve this?

Replies

4 suggested answers

It’s unlikely git is executed in the correct directory, which is why one would rather instantiate a Repo instance first along the lines of r = git.Repo(path). Then invoke git like r.git.grep("--files-with-matches", "\"config.isEnabled([[:space:]*]'" + item + "'[[:space:]*])\""]).

Docs for how to invoke git, and here for the troubleshooting.

Please feel free to keep posting into the closed issue for follow ups.

0 replies

Thanks for the response. Repo is my code came from Repo = git.Git(os.path.expanduser(path)), so the directory was correct. However, I did what you said but I am getting the same error.

---------------------------------------------------------------------------
GitCommandError                           Traceback (most recent call last)
<ipython-input-94-9b1915237b33> in <module>
      3 r = Repo(path)
      4 for item in toggles:
----> 5     files_result = r.git.grep("--files-with-matches", "\"config.isEnabled([[:space:]*]'" + item + "'[[:space:]*])\"")
      6     #files_result = r.execute(["git", "grep", "--files-with-matches", "\"config.isEnabled([[:space:]*]'" + item + "'[[:space:]*])\""])
      7     files = files_result.splitlines()

/opt/anaconda3/lib/python3.8/site-packages/git/cmd.py in <lambda>(*args, **kwargs)
    540         if name[0] == '_':
    541             return LazyMixin.__getattr__(self, name)
--> 542         return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)
    543 
    544     def set_persistent_git_options(self, **kwargs):

/opt/anaconda3/lib/python3.8/site-packages/git/cmd.py in _call_process(self, method, *args, **kwargs)
   1003         call.extend(args)
   1004 
-> 1005         return self.execute(call, **exec_kwargs)
   1006 
   1007     def _parse_object_header(self, header_line):

/opt/anaconda3/lib/python3.8/site-packages/git/cmd.py in execute(self, command, istream, with_extended_output, with_exceptions, as_process, output_stream, stdout_as_string, kill_after_timeout, with_stdout, universal_newlines, shell, env, max_chunk_size, **subprocess_kwargs)
    820 
    821         if with_exceptions and status != 0:
--> 822             raise GitCommandError(command, status, stderr_value, stdout_value)
    823 
    824         if isinstance(stdout_value, bytes) and stdout_as_string:  # could also be output_stream

GitCommandError: Cmd('git') failed due to: exit code(1)
  cmdline: git grep --files-with-matches "config.isEnabled([[:space:]*]'async-payments'[[:space:]*])"
0 replies

The issue is resolved by removing \" from the "\"config.isEnabled([[:space:]*]'" + item + "'[[:space:]*])\"".

Another issue comes up now. If the result of executing grep function is empty, I am getting the same error GitCommandError: Cmd('git') failed due to: exit code(1) . When there is any result, it works fine.

Any ideas to solve this?

0 replies
Answer selected by Byron

By the looks of it, there is no way to ignore a non-zero exit code nor does git grep allow to ignore empty results.

As you are effectively executing the git program, maybe it’s easiest to call git yourself.

0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants
Converted from issue