original_docstring: 
          Find the specified file in the specified environment
          
docstring: Find the specified file in the specified environment
docstring_tokens: Find the specified file in the specified environment
code: def find_file(self, path, tgt_env):
          '''
          Find the specified file in the specified environment
          '''
          tree = self.get_tree(tgt_env)
          if not tree:
              # Branch/tag/SHA not found
              return None, None, None
          blob = None
          depth = 0
          while True:
              depth += 1
              if depth > SYMLINK_RECURSE_DEPTH:
                  blob = None
                  break
              try:
                  file_blob = tree / path
                  if stat.S_ISLNK(file_blob.mode):
                      # Path is a symlink. The blob data corresponding to
                      # this path's object ID will be the target of the
                      # symlink. Follow the symlink and set path to the
                      # location indicated in the blob data.
                      stream = six.StringIO()
                      file_blob.stream_data(stream)
                      stream.seek(0)
                      link_tgt = stream.read()
                      stream.close()
                      path = salt.utils.path_join(os.path.dirname(path), link_tgt)
                  else:
                      blob = file_blob
                      if isinstance(blob, git.Tree):
                          # Path is a directory, not a file.
                          blob = None
                      break
              except KeyError:
                  # File not found or repo_path points to a directory
                  blob = None
                  break
          if isinstance(blob, git.Blob):
              return blob, blob.hexsha, blob.mode
          return None, None, None
code_tokens: def find_file ( self , path , tgt_env ) : tree = self . get_tree ( tgt_env ) if not tree : return None , None , None blob = None depth = 0 while True : depth += 1 if depth > SYMLINK_RECURSE_DEPTH : blob = None break try : file_blob = tree / path if stat . S_ISLNK ( file_blob . mode ) : stream = six . StringIO ( ) file_blob . stream_data ( stream ) stream . seek ( 0 ) link_tgt = stream . read ( ) stream . close ( ) path = salt . utils . path_join ( os . path . dirname ( path ) , link_tgt ) else : blob = file_blob if isinstance ( blob , git . Tree ) : blob = None break except KeyError : blob = None break if isinstance ( blob , git . Blob ) : return blob , blob . hexsha , blob . mode return None , None , None
short_docstring: Find the specified file in the specified environment
short_docstring_tokens: Find the specified file in the specified environment
comment: '''
          Find the specified file in the specified environment
          '''$SEP$# Branch/tag/SHA not found$SEP$# Path is a symlink. The blob data corresponding to$SEP$# this path's object ID will be the target of the$SEP$# symlink. Follow the symlink and set path to the$SEP$# location indicated in the blob data.$SEP$# Path is a directory, not a file.$SEP$# File not found or repo_path points to a directory