<s> """<STR_LIT>""" <EOL> import os <EOL> from constants import * <EOL> from exceptions import * <EOL> import obj <EOL> import commit <EOL> import config <EOL> import diff <EOL> import repo <EOL> def is_git_dir ( path ) : <EOL> """<STR_LIT>""" <EOL> if os . environ . has_key ( '<STR_LIT>' ) : <EOL> object_dir = os . environ [ '<STR_LIT>' ] <EOL> else : <EOL> object_dir = os . path . join ( path , '<STR_LIT>' ) <EOL> if not os . path . isdir ( object_dir ) : <EOL> return False <EOL> if not os . path . isdir ( os . path . join ( path , '<STR_LIT>' ) ) : <EOL> return False <EOL> return True <EOL> def _get_git_dir ( git_dir = None , cwd = None ) : <EOL> """<STR_LIT>""" <EOL> if cwd is None : <EOL> cwd = os . getcwd ( ) <EOL> if git_dir == None and os . environ . has_key ( '<STR_LIT>' ) : <EOL> git_dir = os . environ [ '<STR_LIT>' ] <EOL> if git_dir != None : <EOL> if not is_git_dir ( git_dir ) : <EOL> raise NotARepoError ( git_dir ) <EOL> return ( git_dir , cwd ) <EOL> ceiling_dirs = [ ] <EOL> if os . environ . has_key ( '<STR_LIT>' ) : <EOL> ceiling_dirs = os . environ [ '<STR_LIT>' ] . split ( '<STR_LIT::>' ) <EOL> ceiling_dirs . append ( os . path . sep ) <EOL> dir = os . path . normpath ( cwd ) <EOL> while True : <EOL> git_dir = os . path . join ( dir , '<STR_LIT>' ) <EOL> if os . path . isdir ( git_dir ) : <EOL> if is_git_dir ( git_dir ) : <EOL> return ( git_dir , dir ) <EOL> if is_git_dir ( dir ) : <EOL> return ( dir , None ) <EOL> ( parent_dir , rest ) = os . path . split ( dir ) <EOL> if parent_dir in ceiling_dirs : <EOL> raise NotARepoError ( cwd ) <EOL> dir = parent_dir <EOL> def get_repo ( git_dir = None , working_dir = None ) : <EOL> """<STR_LIT>""" <EOL> ( git_dir , default_working_dir ) = _get_git_dir ( git_dir ) <EOL> git_config = config . load ( git_dir ) <EOL> if working_dir == None and os . environ . has_key ( '<STR_LIT>' ) : <EOL> working_dir = os . environ [ '<STR_LIT>' ] <EOL> if working_dir == None : <EOL> is_bare = git_config . getBool ( '<STR_LIT>' , False ) <EOL> if is_bare : <EOL> working_dir = None <EOL> else : <EOL> working_dir = git_config . get ( '<STR_LIT>' , default_working_dir ) <EOL> return repo . Repository ( git_dir , working_dir , git_config ) </s>
