Visitar URL original
GitCommandError: Cmd('git') failed due to: exit code(1) when execute 'grep' with regex · Issue #1074 · gitpython-developers/GitPython · GitHub
Skip to content

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

Description

@rmahdav

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.

Activity

  1. Byron commented on Oct 23, 2020

    @Byron
    Member

    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.

  2. rmahdav commented on Oct 23, 2020

    @rmahdav
    Author

    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:]*])"
    
  3. rmahdav commented on Oct 23, 2020

    @rmahdav
    Author

    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?

  4. Byron commented on Oct 23, 2020

    @Byron
    Member

    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.

  5. reopened this on Feb 26, 2021
  6. locked and limited conversation to collaborators on Feb 26, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions