| Index: git_common.py
|
| diff --git a/git_common.py b/git_common.py
|
| index 9e0adf24741494b6c3b3a04b82674383993fdd68..5a01c835a96b67929c55cbca573a1804fd648d11 100644
|
| --- a/git_common.py
|
| +++ b/git_common.py
|
| @@ -22,6 +22,7 @@ import functools
|
| import logging
|
| import os
|
| import re
|
| +import shutil
|
| import signal
|
| import sys
|
| import tempfile
|
| @@ -817,3 +818,38 @@ def get_branches_info(include_tracking_status):
|
| missing_upstreams[info.upstream] = None
|
|
|
| return dict(info_map.items() + missing_upstreams.items())
|
| +
|
| +
|
| +def make_workdir_common(repository, new_workdir, files_to_symlink,
|
| + files_to_copy):
|
| + os.makedirs(new_workdir)
|
| + for entry in files_to_symlink:
|
| + clone_file(repository, new_workdir, entry, os.symlink)
|
| + for entry in files_to_copy:
|
| + clone_file(repository, new_workdir, entry, shutil.copy)
|
| +
|
| +
|
| +def make_workdir(repository, new_workdir):
|
| + GIT_DIRECTORY_WHITELIST = [
|
| + 'config',
|
| + 'info',
|
| + 'hooks',
|
| + 'logs/refs',
|
| + 'objects',
|
| + 'packed-refs',
|
| + 'refs',
|
| + 'remotes',
|
| + 'rr-cache',
|
| + 'svn'
|
| + ]
|
| + make_workdir_common(repository, new_workdir, GIT_DIRECTORY_WHITELIST,
|
| + ['HEAD'])
|
| +
|
| +
|
| +def clone_file(repository, new_workdir, link, operation):
|
| + if not os.path.exists(os.path.join(repository, link)):
|
| + return
|
| + link_dir = os.path.dirname(os.path.join(new_workdir, link))
|
| + if not os.path.exists(link_dir):
|
| + os.makedirs(link_dir)
|
| + operation(os.path.join(repository, link), os.path.join(new_workdir, link))
|
|
|