summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaras Kondratiuk <takondra@cisco.com>2019-03-21 17:56:59 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-03-24 17:00:52 +0000
commit21ba8861bdfe9f83527cdc8a54d3b3b33b896413 (patch)
tree81af456488b981dcea4bd466391e3f354170b62b
parent50ce8c47e551d356cef8ea376776a339efae3a91 (diff)
downloadpoky-21ba8861bdfe9f83527cdc8a54d3b3b33b896413.tar.gz
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 ... ] (From OE-Core rev: 3da578a79195a63fb6d4bbd68d8f1548defd205f) Signed-off-by: Taras Kondratiuk <takondra@cisco.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--scripts/lib/devtool/__init__.py1
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):
205 import oe.patch 205 import oe.patch
206 if not os.path.exists(os.path.join(repodir, '.git')): 206 if not os.path.exists(os.path.join(repodir, '.git')):
207 bb.process.run('git init', cwd=repodir) 207 bb.process.run('git init', cwd=repodir)
208 bb.process.run('git config --local gc.autodetach 0', cwd=repodir)
208 bb.process.run('git add .', cwd=repodir) 209 bb.process.run('git add .', cwd=repodir)
209 commit_cmd = ['git'] 210 commit_cmd = ['git']
210 oe.patch.GitApplyTree.gitCommandUserOptions(commit_cmd, d=d) 211 oe.patch.GitApplyTree.gitCommandUserOptions(commit_cmd, d=d)