From 366824937c179c0ce7e316f6bbefce99eabab408 Mon Sep 17 00:00:00 2001 From: wenchiching Date: Mon, 23 Aug 2021 10:47:27 +0800 Subject: [PATCH] platform_utils: os.rename exception when src and des on different file system Symptom: repo sync exception Root Cause: os.rename only works when source and destination are on the same file system Solution: using shutil.move to save disk usage, I create links for projects and project-objects, link to folder on another disk lrwxrwxrwx 1 owenwen owenwen 47 Jun 9 16:40 project-objects -> /disk3/AndroidLocalRepos/.repo/project-objects/ lrwxrwxrwx 1 owenwen owenwen 40 Jun 9 16:40 projects -> /disk3/AndroidLocalRepos/.repo/projects/ below are exception I met: """ Traceback (most recent call last): File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker result = (True, func(*args, **kwds)) File "/usr/lib/python3.6/multiprocessing/pool.py", line 44, in mapstar return list(map(*args)) File "/disk2/Android11/.repo/repo/subcmds/sync.py", line 550, in _CheckoutOne project.Sync_LocalHalf(syncbuf, force_sync=force_sync) File "/disk2/Android11/.repo/repo/project.py", line 1251, in Sync_LocalHalf self._InitWorkTree(force_sync=force_sync, submodules=submodules) File "/disk2/Android11/.repo/repo/project.py", line 2801, in _InitWorkTree self._CheckDirReference(self.gitdir, dotgit, share_refs=True) File "/disk2/Android11/.repo/repo/project.py", line 2674, in _CheckDirReference platform_utils.rename(dst_path, src_path) File "/disk2/Android11/.repo/repo/platform_utils.py", line 127, in rename os.rename(src, dst) OSError: [Errno 18] Invalid cross-device link: '/disk2/Android11/system/libhidl/.git/packed-refs' -> '/disk2/Android11/.repo/projects/system/libhidl.git/packed-refs' """ Change-Id: Ifda2f16530cc5a8f280169f482ee858f9e5241d3 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/316002 Tested-by: Mike Frysinger Reviewed-by: Mike Frysinger --- platform_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform_utils.py b/platform_utils.py index 00c51d9b..5741f4d3 100644 --- a/platform_utils.py +++ b/platform_utils.py @@ -124,7 +124,7 @@ def rename(src, dst): else: raise else: - os.rename(src, dst) + shutil.move(src, dst) def remove(path):