Skip to contentSkip to conversation

devtool: set up git repos so that singletask.lock is ignored

PATCH New Paul Eggleton 1 participant 2 messages Jan 31, 2018

lore
Share & tools
lore
#0 lore raw

cover devtool: set up git repos so that singletask.lock is ignored

The following changes since commit a0988c3374e964170d1d24fc230306b887432d31:

tcmode-default.inc: drop preferred version of gzip-native (2018-01-31 17:01:12 +0000)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib paule/devtool-singletask-lock-fix
http://cgit.openembedded.org/openembedded-core-contrib/log/?h=paule/devtool-singletask-lock-fix

Paul Eggleton (1):
devtool: set up git repos so that singletask.lock is ignored

 scripts/lib/devtool/__init__.py | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
Signature · 1 line
2.9.5
#1 lore raw

PATCH 1/1 devtool: set up git repos so that singletask.lock is ignored

singletask.lock is written out while certain tasks execute for recipes that have externalsrc.bbclass enabled - this includes recipes in devtool's workspace. It appears that there's a race where singletask.lock will be there one minute and then when we try to get the file checksum of it (since we want to know if anything in the source tree has changed) it will be gone, and git chokes. To fix that, add singletask.lock to .git/info/exclude in the repository, regardless of whether we created the repository or not. In any case singletask.lock should never be tracked by git, so this is a good thing to be doing for that reason as well.

This fixes oe-selftest failures in test_devtool_modify that we've seen on the Yocto Project autobuilder:

bb.data_smart.ExpansionError: Failure expanding variable do_compile[file-checksums], expression was ${@srctree_hash_files(d)} which triggered exception CalledProcessError: Command '['git', 'add', '-A', '.']' returned non-zero exit status 128.

Note that this only fixes this issue for devtool; if you are using externalsrc independently of devtool there's a chance this will still be an issue unless you add singletask.lock to your .gitignore.

---
 scripts/lib/devtool/__init__.py | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
scripts/lib/devtool/__init__.py +14 -0
index 07d774d..89f098a 100644
@@ -220,6 +220,20 @@ def setup_git_repo(repodir, version, devbranch, basetag='devtool-base', d=None):
         commit_cmd += ['-m', commitmsg]
         bb.process.run(commit_cmd, cwd=repodir)
 
+    # Ensure singletask.lock (as used by externalsrc.bbclass) is ignored by git
+    excludes = []
+    excludefile = os.path.join(repodir, '.git', 'info', 'exclude')
+    try:
+        with open(excludefile, 'r') as f:
+            excludes = f.readlines()
+    except FileNotFoundError:
+        pass
+    if 'singletask.lock\n' not in excludes:
+        excludes.append('singletask.lock\n')
+    with open(excludefile, 'w') as f:
+        for line in excludes:
+            f.write(line)
+
     bb.process.run('git checkout -b %s' % devbranch, cwd=repodir)
     bb.process.run('git tag -f %s' % basetag, cwd=repodir)
 
Signature · 1 line
2.9.5