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 <vapier@google.com>
Reviewed-by: Mike Frysinger <vapier@google.com>
diff --git a/platform_utils.py b/platform_utils.py
index 00c51d9..5741f4d 100644
--- a/platform_utils.py
+++ b/platform_utils.py
@@ -124,7 +124,7 @@
else:
raise
else:
- os.rename(src, dst)
+ shutil.move(src, dst)
def remove(path):