Changeset 3275

Show
Ignore:
Timestamp:
02/26/08 14:59:03 (6 months ago)
Author:
hvr
Message:

GitPlugin: added new option git_bin for providing a custom git
binary; made git version parsing more tolerant; minor fixes

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gitplugin/0.11/tracext/git/git_fs.py

    r3270 r3275  
    2121from trac.versioncontrol.cache import CachedRepository 
    2222from trac.versioncontrol.web_ui import IPropertyRenderer 
    23 from trac.config import BoolOption, IntOption 
     23from trac.config import BoolOption, IntOption, PathOption, Option 
    2424 
    2525# for some reason CachedRepository doesn't pass-through short_rev()s 
     
    6464 
    6565                try: 
    66                         self._version = PyGIT.Storage.git_version(
     66                        self._version = PyGIT.Storage.git_version(git_bin=self._git_bin
    6767                except PyGIT.GitError, e: 
    6868                        self.log.error("GitError: "+e.message) 
     
    135135 
    136136        _shortrev_len = IntOption('git', 'shortrev_len', 7, 
    137                                   "length rev sha sums should be tried to abbreviated to" 
     137                                  "length rev sha sums should be tried to be abbreviated to" 
    138138                                  " (must be >= 4 and <= 40)") 
     139 
     140        _git_bin = PathOption('git', 'git_bin', 'git', "file name of git executable") 
     141 
    139142 
    140143        def get_supported_types(self): 
     
    153156                repos = GitRepository(dir, self.log, 
    154157                                      persistent_cache=self._persistent_cache, 
     158                                      git_bin=self._git_bin, 
    155159                                      shortrev_len=self._shortrev_len) 
    156160 
     
    164168 
    165169class GitRepository(Repository): 
    166         def __init__(self, path, log, persistent_cache=False, shortrev_len=7): 
     170        def __init__(self, path, log, persistent_cache=False, git_bin='git', shortrev_len=7): 
    167171                self.logger = log 
    168172                self.gitrepo = path 
    169173                self._shortrev_len = max(4, min(shortrev_len, 40)) 
    170174 
    171                 self.git = PyGIT.StorageFactory(path, log, not persistent_cache).getInstance() 
     175                self.git = PyGIT.StorageFactory(path, log, not persistent_cache, 
     176                                                git_bin=git_bin).getInstance() 
    172177                Repository.__init__(self, "git:"+path, None, log) 
    173178 
     
    191196 
    192197        def normalize_rev(self, rev): 
    193                 if not rev or rev=='None'
     198                if not rev
    194199                        return self.get_youngest_rev() 
    195200                normrev=self.git.verifyrev(rev) 
  • gitplugin/0.11/tracext/git/PyGIT.py

    r3268 r3275  
    9393    __dict_lock = Lock() 
    9494 
    95     def __init__(self, repo, log, weak=True): 
     95    def __init__(self, repo, log, weak=True, git_bin='git'): 
    9696        self.logger = log 
    9797 
     
    100100                i = StorageFactory.__dict[repo] 
    101101            except KeyError: 
    102                 i = Storage(repo, log
     102                i = Storage(repo, log, git_bin
    103103                StorageFactory.__dict[repo] = i 
    104104 
     
    133133 
    134134    @staticmethod 
    135     def git_version(): 
     135    def git_version(git_bin="git"): 
    136136        GIT_VERSION_MIN_REQUIRED = (1,5,2) 
    137137        try: 
    138             g = GitCore(
     138            g = GitCore(git_bin=git_bin
    139139            output = g.version() 
    140140            [v] = output.readlines() 
    141             [a,b,version] = v.strip().split() 
    142             split_version = tuple(map(int, version.split('.'))) 
     141            _,_,version = v.strip().split() 
     142            # 'version' has usually at least 3 numeric version components, e.g.:: 
     143            #  1.5.4.2 
     144            #  1.5.4.3.230.g2db511 
     145            #  1.5.4.GIT 
     146 
     147            def try_int(s): 
     148                try: 
     149                    return int(s) 
     150                except ValueError: 
     151                    return s 
     152 
     153            split_version = tuple(map(try_int, version.split('.'))) 
    143154 
    144155            result = {} 
     
    152163            raise GitError("Could not retrieve GIT version") 
    153164 
    154     def __init__(self, git_dir, log): 
     165    def __init__(self, git_dir, log, git_bin='git'): 
    155166        self.logger = log 
    156167 
     
    168179        self.logger.debug("PyGIT.Storage instance %d constructed" % id(self)) 
    169180 
    170         self.repo = GitCore(git_dir
     181        self.repo = GitCore(git_dir, git_bin=git_bin
    171182 
    172183        self.commit_encoding = None 
     
    227238                    return __rev_seen.setdefault(rev, rev) 
    228239 
    229                 ord_rev = 0 
     240                rev = ord_rev = 0 
    230241                for revs in self.repo.rev_list("--parents", "--all").readlines(): 
    231242                    revs = revs.strip().split() 
     
    430441            return None 
    431442 
    432         srevs = sdb[self.__rev_key(srev)] 
     443        try: 
     444            srevs = sdb[self.__rev_key(srev)] 
     445        except KeyError: 
     446            return None 
    433447 
    434448        srevs = filter(lambda s: s.startswith(srev), srevs)