diff options
author | Taras Kondratiuk <takondra@cisco.com> | 2019-03-21 17:56:59 -0700 |
---|---|---|
committer | Armin Kuster <akuster808@gmail.com> | 2019-04-13 12:42:54 -0700 |
commit | eae5caaf050f54a065e2654a60f55fda2c3afd95 (patch) | |
tree | 42cbaf35d5986ec733e12761fa436a2359284cad | |
parent | 65042ebf07afad2922dcdfceb6e8931c05255649 (diff) | |
download | openembedded-core-eae5caaf050f54a065e2654a60f55fda2c3afd95.tar.gz openembedded-core-eae5caaf050f54a065e2654a60f55fda2c3afd95.tar.bz2 openembedded-core-eae5caaf050f54a065e2654a60f55fda2c3afd95.zip |
devtool: prevent starting git gc in background
Devtool creates a git repository for extracted sources in a temporary
directory and then moves it to a final destination after patching is
done. Unfortunately devtool is not aware that some of its git operations
may have caused git garbage collector to start in background. If timing
is just right a repository move fails because GC is removing git objects
while they are being moved.
The issue was hit on Krogoth release, but the code that moves created
git repository is still the same.
Disable gc.autodetach to make GC run synchronously and block git until
it is done.
Traceback (most recent call last):
File "<snip>/openembedded-core/scripts/devtool", line 342, in <module>
ret = main()
File "<snip>/openembedded-core/scripts/devtool", line 329, in main
ret = args.func(args, config, basepath, workspace)
File "<snip>/openembedded-core/scripts/lib/devtool/standard.py", line 352, in extract
initial_rev = _extract_source(srctree, args.keep_temp, args.branch, False, rd)
File "<snip>/openembedded-core/scripts/lib/devtool/standard.py", line 644, in _extract_source
shutil.move(srcsubdir, srctree)
File "/usr/lib/python2.7/shutil.py", line 299, in move
copytree(src, real_dst, symlinks=True)
File "/usr/lib/python2.7/shutil.py", line 208, in copytree
raise Error, errors
Error: [('/tmp/devtool5RXkuX/workdir/grpc-1.2.5/.git/objects/5e', '<snip>/build/grpc/grpc_src/.git/objects/5e', "[Errno 2] No such file or directory: '/tmp/devtool5RXkuX/workdir/grpc-1.2.5/.git/objects/5e'"), ('/tmp/devtool5RXkuX/workdir/grpc-1.2.5/.git/objects/57', '<snip>/build/grpc/grpc_src/.git/objects/57', "[Errno 2] No such file or directory: '/tmp/devtool5RXkuX/workdir/grpc-1.2.5/.git/objects/57'"), many git objects ... ]
Signed-off-by: Taras Kondratiuk <takondra@cisco.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
-rw-r--r-- | scripts/lib/devtool/__init__.py | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/scripts/lib/devtool/__init__.py b/scripts/lib/devtool/__init__.py index 89f098a912..8fc7fffcd6 100644 --- a/scripts/lib/devtool/__init__.py +++ b/scripts/lib/devtool/__init__.py @@ -205,6 +205,7 @@ def setup_git_repo(repodir, version, devbranch, basetag='devtool-base', d=None): import oe.patch if not os.path.exists(os.path.join(repodir, '.git')): bb.process.run('git init', cwd=repodir) + bb.process.run('git config --local gc.autodetach 0', cwd=repodir) bb.process.run('git add .', cwd=repodir) commit_cmd = ['git'] oe.patch.GitApplyTree.gitCommandUserOptions(commit_cmd, d=d) |