From: bkylerussell@gmail.com
To: openembedded-core@lists.openembedded.org
Cc: wesley.lindauer@gmail.com, richard.purdie@linuxfoundation.org,
Kyle Russell <bkylerussell@gmail.com>
Subject: [PATCH v2 1/1] patch.py: don't apply striplevel to git am command
Date: Wed, 29 Apr 2020 20:01:45 -0400 [thread overview]
Message-ID: <20200430000145.8359-2-bkylerussell@gmail.com> (raw)
In-Reply-To: <20200430000145.8359-1-bkylerussell@gmail.com>
Don't pass a path removal parameter to git am since it always applies
patches from the root of the git repo, not from each individual patchdir
(like quilt).
GitApplyTree uses `git rev-parse --show-toplevel` to find the root of
the repo no matter which patchdir is passed into the GitApplyTree instance.
But for recipes who set S to a subdirectory within their repo, patches
may be added to SRC_URI using a striplevel parameter to match the depth of S.
Currently when these patches are applied with git am in GitApplyTree instead
of quilt, the striplevel still takes effect even though git applies the
patch itself from the repo root, not from within S.
In most cases when a patch modifies existing files within a repo, git am
works fine and the desired outcome is still achieved because the three-way
merge figures out which file the patch was intended to modify based on the
repo history.
An exception to this occurs if the patch adds a new file to the repo.
For example, consider a patch that adds a new file src/foo to a repo.
Additionally, assume the recipe for this repo sets S = "${WORKDIR}/git/src",
and the patch is added to SRC_URI using "striplevel=2" since the default
patch tool, quilt, applies each patch at its patchdir, ${S}.
--- /dev/null
+++ b/src/foo
@@ -0,0 +1 @@
+new file test
When the GitApplyTree patch class is used (through either devtool or
PATCHTOOL = "git"), the root of the repo is passed to git as the work tree,
in addition to the path removal paramter. In the case above, GitApplyTree
creates ${WORKDIR}/git/foo instead of ${WORKDIR}/git/src/foo.
This is demonstrated with the included selftest. By not passing the striplevel
parameter to git am, the patch creates the new file at the intended depth in
the repo.
---
.../llvm/files/0001-Test-new-file.patch | 17 +++++++++++++++++
.../recipes-test/llvm/llvm_%.bbappend | 2 ++
meta/lib/oe/patch.py | 2 +-
meta/lib/oeqa/selftest/cases/bbtests.py | 18 ++++++++++++++++++
4 files changed, 38 insertions(+), 1 deletion(-)
create mode 100644 meta-selftest/recipes-test/llvm/files/0001-Test-new-file.patch
create mode 100644 meta-selftest/recipes-test/llvm/llvm_%.bbappend
diff --git a/meta-selftest/recipes-test/llvm/files/0001-Test-new-file.patch b/meta-selftest/recipes-test/llvm/files/0001-Test-new-file.patch
new file mode 100644
index 0000000000..8af0afeb12
--- /dev/null
+++ b/meta-selftest/recipes-test/llvm/files/0001-Test-new-file.patch
@@ -0,0 +1,17 @@
+From 057c3da44affb47c154ec1ef67bd11646a6429fa Mon Sep 17 00:00:00 2001
+From: Kyle Russell <bkylerussell@gmail.com>
+Date: Tue, 28 Apr 2020 15:18:43 -0400
+Subject: [PATCH] Test new file
+
+---
+ llvm/README.new | 1 +
+ 1 file changed, 1 insertion(+)
+ create mode 100644 llvm/README.new
+
+diff --git a/llvm/README.new b/llvm/README.new
+new file mode 100644
+index 00000000000..0527e6bd2d7
+--- /dev/null
++++ b/llvm/README.new
+@@ -0,0 +1 @@
++This is a test
diff --git a/meta-selftest/recipes-test/llvm/llvm_%.bbappend b/meta-selftest/recipes-test/llvm/llvm_%.bbappend
new file mode 100644
index 0000000000..205720982c
--- /dev/null
+++ b/meta-selftest/recipes-test/llvm/llvm_%.bbappend
@@ -0,0 +1,2 @@
+# This bbappend is used to alter the recipe using the test_recipe.inc file created by tests.
+include test_recipe.inc
diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py
index 2b1eee1003..7b9fd67194 100644
--- a/meta/lib/oe/patch.py
+++ b/meta/lib/oe/patch.py
@@ -517,7 +517,7 @@ class GitApplyTree(PatchTree):
try:
shellcmd = [patchfilevar, "git", "--work-tree=%s" % reporoot]
self.gitCommandUserOptions(shellcmd, self.commituser, self.commitemail)
- shellcmd += ["am", "-3", "--keep-cr", "-p%s" % patch['strippath']]
+ shellcmd += ["am", "-3", "--keep-cr"]
return _applypatchhelper(shellcmd, patch, force, reverse, run)
except CmdError:
# Need to abort the git am, or we'll still be within it at the end
diff --git a/meta/lib/oeqa/selftest/cases/bbtests.py b/meta/lib/oeqa/selftest/cases/bbtests.py
index dc423ec439..6d863b425a 100644
--- a/meta/lib/oeqa/selftest/cases/bbtests.py
+++ b/meta/lib/oeqa/selftest/cases/bbtests.py
@@ -4,6 +4,7 @@
import os
import re
+import tempfile
import oeqa.utils.ftools as ftools
from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars
@@ -81,6 +82,23 @@ class BitbakeTests(OESelftestTestCase):
found = l
self.assertTrue(found and found.startswith("ERROR:"), msg = "Incorrectly formed patch application didn't fail. bitbake output: %s" % result.output)
+ def test_patchtool_git(self):
+ test_recipe = 'llvm'
+ tmpdir = tempfile.mkdtemp(prefix='bitbakeqa')
+ bb_vars = get_bb_vars(['S'], test_recipe)
+ src_dir = bb_vars['S']
+
+ self.write_recipeinc('llvm', 'FILESEXTRAPATHS_prepend := "${THISDIR}/files:"\nSRC_URI += "file://0001-Test-new-file.patch;striplevel=2"')
+ bitbake('llvm -c patch')
+ self.assertExists('%s/README.new' % src_dir)
+
+ bitbake('%s -c clean' % test_recipe)
+ self.append_recipeinc('llvm', 'PATCHTOOL = "git"')
+ bitbake('llvm -c patch')
+ self.assertExists('%s/README.new' % src_dir)
+
+ self.delete_recipeinc('llvm')
+
def test_force_task_1(self):
# test 1 from bug 5875
test_recipe = 'zlib'
--
2.17.1
next prev parent reply other threads:[~2020-04-30 0:02 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-09 4:41 [PATCH 0/1] patch: don't strip GitApplyTree patches bkylerussell
2020-04-09 4:41 ` [PATCH 1/1] " bkylerussell
2020-04-09 10:07 ` [OE-core] " Richard Purdie
2020-04-27 20:32 ` bkylerussell
2020-04-30 0:01 ` [PATCH v2 0/1] patch.py: don't apply striplevel to git am command bkylerussell
2020-04-30 0:01 ` bkylerussell [this message]
2020-04-10 3:44 ` [OE-core] [PATCH 1/1] patch: don't strip GitApplyTree patches Peter Kjellerstedt
2020-04-09 5:02 ` ✗ patchtest: failure for " Patchwork
-- strict thread matches above, loose matches on Subject: below --
2020-06-05 1:35 [PATCH v2 0/1] patch.py: don't apply striplevel to git am command bkylerussell
2020-06-05 1:35 ` [PATCH v2 1/1] " bkylerussell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200430000145.8359-2-bkylerussell@gmail.com \
--to=bkylerussell@gmail.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=richard.purdie@linuxfoundation.org \
--cc=wesley.lindauer@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox