aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2017-12-05 14:36:58 +1300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-12-10 22:41:42 +0000
commit59ae5b7cbfeedb216a57c3f77fe52527b6c918cc (patch)
tree4f0a7ad7a6b3a0cd2880d39538528126cb3378d9
parent5bc987fb1818ffb9748645bd6e0d80cf5914bad0 (diff)
downloadopenembedded-core-contrib-59ae5b7cbfeedb216a57c3f77fe52527b6c918cc.tar.gz
openembedded-core-contrib-59ae5b7cbfeedb216a57c3f77fe52527b6c918cc.tar.bz2
openembedded-core-contrib-59ae5b7cbfeedb216a57c3f77fe52527b6c918cc.zip
classes/patch: when PATCHTOOL = "git" double-check the repository
If a bug is present or the user has set PATCHTOOL = "git" on a source tree that isn't git, if we try to perform git operations (such as committing or changing branches) when extracting source, then we might in fact be running those operations on the metadata repository if the build directory is underneath, say, poky or OE-Core, and that could make a mess. Check if the source tree is a git repository and refuse to continue if it isn't. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com>
-rw-r--r--meta/classes/patch.bbclass15
1 files changed, 15 insertions, 0 deletions
diff --git a/meta/classes/patch.bbclass b/meta/classes/patch.bbclass
index 930ee33d540..2fc6925e495 100644
--- a/meta/classes/patch.bbclass
+++ b/meta/classes/patch.bbclass
@@ -28,6 +28,21 @@ python patch_task_patch_prefunc() {
# Prefunc for do_patch
srcsubdir = d.getVar('S')
+ workdir = os.path.abspath(d.getVar('WORKDIR'))
+ testsrcdir = os.path.abspath(srcsubdir)
+ if (testsrcdir + os.sep).startswith(workdir + os.sep):
+ # Double-check that either workdir or S or some directory in-between is a git repository
+ found = False
+ while testsrcdir != '/':
+ if os.path.exists(os.path.join(testsrcdir, '.git')):
+ found = True
+ break
+ if testsrcdir == workdir:
+ break
+ testsrcdir = os.path.dirname(testsrcdir)
+ if not found:
+ bb.fatal('PATCHTOOL = "git" set for source tree that is not a git repository. Refusing to continue as that may result in commits being made in your metadata repository.')
+
patchdir = os.path.join(srcsubdir, 'patches')
if os.path.exists(patchdir):
if os.listdir(patchdir):