使用gitpython后如何在Windows上删除临时目录?

时间:2014-05-09 13:59:12

标签: python windows gitpython

我有以下Python函数,我在Windows 7上运行:

def update():
    temp_dir = tempfile.mkdtemp()
    git.Git().clone('my_repo', temp_dir)
    try:
        repo = git.Repo(temp_dir)
        repo.index.add('*')
        repo.index.commit('Empty commit')
    finally:
        from git.util import rmtree
        rmtree(temp_dir)

不幸的是,在rmtree上,我得到了:

WindowsError: [Error 32] The process cannot access the file because it is being used by another process: 'c:\\users\\myaccount\\appdata\\local\\temp\\tmpdega8h\\.git\\objects\\pack\\pack-0ea07d13498ab92388dc33fbabaadf37511623c1.idx'

我应该怎么做才能删除Windows中的临时目录?

1 个答案:

答案 0 :(得分:2)

已花费lot中的一个effort来修复 Windows 中的此行为,在该情况下,文件锁定是文件系统的默认行为,但在{ {3}}:

  

[GitPython]是在析构函数(如   __del__方法)仍然可以确定地运行。”

     

如果您仍想在这种情况下使用它,则需要进行搜索   __del__实现的代码库,并在合适时自行调用。

无论如何,项目测试用例使用的Limitations可能会有所帮助:

repo_dir = tempfile.mktemp()
repo = Repo.init(repo_dir)
try:
    ## use the repo

finally:
    repo.git.clear_cache()    # kill deamon-procs responding to hashes with objects
    repo = None
    if repo_dir is not None:
        gc.collect()
        gitdb.util.mman.collect()  # kept open over git-object files
        gc.collect()
        rmtree(repo_dir)
  

注意:这是repo.close()自2.1.1(2016年12月)以来的工作。