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)) |