diff options
author | Julien Stephan <jstephan@baylibre.com> | 2023-08-24 09:34:57 +0200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-08-29 09:41:07 +0100 |
commit | 060f285e58509fd1f38bc4eca990d4643e648c1a (patch) | |
tree | be3fd9a6cd58e1b992853057d7e90302116f5a2d /meta/lib/oe/patch.py | |
parent | 3664a232feb7dbe1bb19132a7d2d94d260fbf272 (diff) | |
download | poky-060f285e58509fd1f38bc4eca990d4643e648c1a.tar.gz |
patch.py: use --absolute-git-dir instead of --show-toplevel to retrieve gitdir
[YOCTO #14141]
Currently the gitdir is manually constructed using `git
rev-parse --show-toplevel` and appending `.git`. This is most of the time
correct but not always: `.git` can be a file with the following content:
gitdir: <some_folder>
This is the case for submodules, so when using devtool modify on a recipe
using submodules *and* patching files inside one of the submodules, do_patch
fails with the following error:
ERROR: Error executing a python function in exec_func_python() autogenerated:
The stack trace of python calls that resulted in this exception/failure was:
File: 'exec_func_python() autogenerated', lineno: 2, function: <module>
0001:
*** 0002:patch_do_patch(d)
0003:
File: '<..>/poky/meta/classes-global/patch.bbclass', lineno: 157, function: patch_do_patch
0153: except Exception as exc:
0154: bb.utils.remove(process_tmpdir, True)
0155: bb.fatal("Importing patch '%s' with striplevel '%s'\n%s" % (parm['patchname'], parm['striplevel'], repr(exc).replace("\\n", "\n")))
0156: try:
*** 0157: resolver.Resolve()
0158: except bb.BBHandledException as e:
0159: bb.utils.remove(process_tmpdir, True)
0160: bb.fatal("Applying patch '%s' on target directory '%s'\n%s" % (parm['patchname'], patchdir, repr(e).replace("\\n", "\n")))
0161:
File: '<..>/poky/meta/lib/oe/patch.py', lineno: 769, function: Resolve
0765: def Resolve(self):
0766: olddir = os.path.abspath(os.curdir)
0767: os.chdir(self.patchset.dir)
0768: try:
*** 0769: self.patchset.Push()
0770: except Exception:
0771: import sys
0772: os.chdir(olddir)
0773: raise
File: '<..>/poky/meta/lib/oe/patch.py', lineno: 274, function: Push
0270: else:
0271: next = 0
0272:
0273: bb.note("applying patch %s" % self.patches[next])
*** 0274: ret = self._applypatch(self.patches[next], force)
0275:
0276: self._current = next
0277: return ret
0278:
File: '<..>/poky/meta/lib/oe/patch.py', lineno: 556, function: _applypatch
0552: if os.path.lexists(hooks_dir_backup):
0553: raise Exception("Git hooks backup directory already exists: %s" % hooks_dir_backup)
0554: if os.path.lexists(hooks_dir):
0555: shutil.move(hooks_dir, hooks_dir_backup)
*** 0556: os.mkdir(hooks_dir)
0557: commithook = os.path.join(hooks_dir, 'commit-msg')
0558: applyhook = os.path.join(hooks_dir, 'applypatch-msg')
0559: with open(commithook, 'w') as f:
0560: # NOTE: the formatting here is significant; if you change it you'll also need to
Exception: NotADirectoryError: [Errno 20] Not a directory: '<..>/build/tmp/work/core2-64-poky-linux/vulkan-samples/git/devtooltmp-n87_zx1i/workdir/git/third_party/spdlog/.git/hooks'
Using `git rev-parse --absolute-git-dir` instead of `git rev-parse
--show-toplevel` ensure we get the correct gitdir
(From OE-Core rev: f74879dd95b19504ce8a8554636d2310d0336806)
Signed-off-by: Julien Stephan <jstephan@baylibre.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oe/patch.py')
-rw-r--r-- | meta/lib/oe/patch.py | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py index 5990896fdc..ff9afc9df9 100644 --- a/meta/lib/oe/patch.py +++ b/meta/lib/oe/patch.py | |||
@@ -547,7 +547,10 @@ class GitApplyTree(PatchTree): | |||
547 | reporoot = (runcmd("git rev-parse --show-toplevel".split(), self.dir) or '').strip() | 547 | reporoot = (runcmd("git rev-parse --show-toplevel".split(), self.dir) or '').strip() |
548 | if not reporoot: | 548 | if not reporoot: |
549 | raise Exception("Cannot get repository root for directory %s" % self.dir) | 549 | raise Exception("Cannot get repository root for directory %s" % self.dir) |
550 | hooks_dir = os.path.join(reporoot, '.git', 'hooks') | 550 | gitdir = (runcmd("git rev-parse --absolute-git-dir".split(), self.dir) or '').strip() |
551 | if not gitdir: | ||
552 | raise Exception("Cannot get gitdir for directory %s" % self.dir) | ||
553 | hooks_dir = os.path.join(gitdir, 'hooks') | ||
551 | hooks_dir_backup = hooks_dir + '.devtool-orig' | 554 | hooks_dir_backup = hooks_dir + '.devtool-orig' |
552 | if os.path.lexists(hooks_dir_backup): | 555 | if os.path.lexists(hooks_dir_backup): |
553 | raise Exception("Git hooks backup directory already exists: %s" % hooks_dir_backup) | 556 | raise Exception("Git hooks backup directory already exists: %s" % hooks_dir_backup) |