class Index(object): def __init__(self, repo, path=None): if path is None: path = join(repo.path, "index") self.git = repo.git else: self.git = Git(repo.wd) env = { "GIT_INDEX_FILE": path, } if not repo.bare: env["GIT_WORK_TREE"] = repo.wd self.git.extra["env"] = env self.path = path self.repo = repo def data_update(self, path, data, mode="0644", **kwargs): path = str(path) if isabs(path): path = path[1:] hash = self.repo.git.hash_object(stdin=True, t="blob", w=True, input=data, path=path) self.git.update_index("--cacheinfo", mode, hash, path, **kwargs) def checkout(self, wd=None, **kwargs): if wd is None: git = self.git wd = self.repo.wd else: git = Git(wd) git.extra = dict(self.git.extra) git.extra["env"]["GIT_WORK_TREE"] = wd try: makedirs(wd) except OSError, exc: if exc.errno != EEXIST: raise return git.checkout_index(**kwargs)