diff --git a/gclient-new-workdir.py b/gclient-new-workdir.py index e2a61248c..2ec0250e2 100755 --- a/gclient-new-workdir.py +++ b/gclient-new-workdir.py @@ -50,6 +50,8 @@ def parse_options(): def support_cow(src, dest): + # 'cp --reflink' always succeeds when 'src' is a symlink or a directory + assert os.path.isfile(src) and not os.path.islink(src) try: subprocess.check_output(['cp', '-a', '--reflink', src, dest], stderr=subprocess.STDOUT) @@ -74,6 +76,8 @@ def main(): args = parse_options() gclient = os.path.join(args.repository, '.gclient') + if os.path.islink(gclient): + gclient = os.realpath(gclient) new_gclient = os.path.join(args.new_workdir, '.gclient') if try_vol_snapshot(args.repository, args.new_workdir): diff --git a/git_common.py b/git_common.py index 7ce0edbdc..31b74fcbc 100644 --- a/git_common.py +++ b/git_common.py @@ -1047,4 +1047,7 @@ def clone_file(repository, new_workdir, link, operation): 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)) + src = os.path.join(repository, link) + if os.path.islink(src): + src = os.realpath(src) + operation(src, os.path.join(new_workdir, link))