#NEWLINE# def get_tagsfile( self , git_repo_path , git_rev ) : #NEWLINE# #INDENT# "Get the ctags tagsfile for the given Git repository and revision.\n\n        - If the tagsfile is still in cache, and in uncompressed form, return it\n          without any further cost.\n        - If the tagsfile is still in cache, but in compressed form, uncompress\n          it, put it into uncompressed space, and return the uncompressed version.\n        - If the tagsfile isn't in cache at all, create it, put it into\n          uncompressed cache and return the newly created version.\n        " #NEWLINE# assert ( len ( git_rev ) == 40 ) #NEWLINE# with git_repo_path . _lock : #NEWLINE# #INDENT# if ( git_rev in self . _uncompressed_cache ) : #NEWLINE# #INDENT# return self . _uncompressed_cache [ git_rev ] #NEWLINE# #UNINDENT# if ( git_rev in self . _compressed_cache ) : #NEWLINE# #INDENT# compressed_tagsfile_path = self . _compressed_cache [ git_rev ] #NEWLINE# uncompressed_tagsfile_path = uncompress_tagsfile ( compressed_tagsfile_path ) #NEWLINE# self . _compressed_cache . _remove_node ( self . _compressed_cache . _cache [ git_rev ] ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# uncompressed_tagsfile_path = create_tagsfile ( git_repo_path , git_rev ) #NEWLINE# #UNINDENT# self . _uncompressed_cache . add ( git_rev , uncompressed_tagsfile_path , self . _clear_uncompressed_entry ) #NEWLINE# return uncompressed_tagsfile_path