[oe-commits] [openembedded-core] 12/23: lib/oe/patch: improve accuracy of patch header extraction

git at git.openembedded.org git at git.openembedded.org
Fri Sep 23 14:54:01 UTC 2016


rpurdie pushed a commit to branch master-next
in repository openembedded-core.

commit adcc2c52e2a4dbd2207cb19411e048985489144b
Author: Paul Eggleton <paul.eggleton at linux.intel.com>
AuthorDate: Fri Sep 23 21:22:11 2016 +1200

    lib/oe/patch: improve accuracy of patch header extraction
    
    When PATCHTOOL = "git", if we need to manually apply a patch and then
    commit it (i.e. when git am doesn't work) we try to extract the author /
    date / shortlog from the patch header. Make the following improvements
    to that extraction process:
    
    * If there's no explicit Subject: but the first line is followed by a
      blank line, isn't an Upstream-Status: or Index: marker and isn't too
      long, then assume it's good enough to be the shortlog. This avoids
      having too many patches with "Upgrade to version x.y" as the shortlog
      (since that is often when patches get added).
    * Add --follow to the command we use to find the commit that added the
      patch, so we mostly get the commit that added the patch rather than
      getting stuck on upgrade commits that last moved/renamed the patch
    * Populate the date from the commit that added the patch if we were able
      to get the author but not the date from the patch (otherwise you get
      today's date which is less useful).
    
    Signed-off-by: Paul Eggleton <paul.eggleton at linux.intel.com>
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 meta/lib/oe/patch.py | 28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py
index c04f098..0332f10 100644
--- a/meta/lib/oe/patch.py
+++ b/meta/lib/oe/patch.py
@@ -351,6 +351,21 @@ class GitApplyTree(PatchTree):
                 # We don't want the From <commit> line - if it's present it will break rebasing
                 continue
             outlines.append(line)
+
+        if not subject:
+            firstline = None
+            for line in headerlines:
+                line = line.strip()
+                if firstline:
+                    if line:
+                        # Second line is not blank, the first line probably isn't usable
+                        firstline = None
+                    break
+                elif line:
+                    firstline = line
+            if firstline and not firstline.startswith(('#', 'Index:', 'Upstream-Status:')) and len(firstline) < 100:
+                subject = firstline
+
         return outlines, author, date, subject
 
     @staticmethod
@@ -373,21 +388,24 @@ class GitApplyTree(PatchTree):
         # Process patch header and extract useful information
         lines = GitApplyTree.extractPatchHeader(patchfile)
         outlines, author, date, subject = GitApplyTree.interpretPatchHeader(lines)
-        if not author or not subject:
+        if not author or not subject or not date:
             try:
-                shellcmd = ["git", "log", "--format=email", "--diff-filter=A", "--", patchfile]
+                shellcmd = ["git", "log", "--format=email", "--follow", "--diff-filter=A", "--", patchfile]
                 out = runcmd(["sh", "-c", " ".join(shellcmd)], os.path.dirname(patchfile))
             except CmdError:
                 out = None
             if out:
                 _, newauthor, newdate, newsubject = GitApplyTree.interpretPatchHeader(out.splitlines())
-                if not author or not date:
-                    # These really need to go together
+                if not author:
+                    # If we're setting the author then the date should be set as well
                     author = newauthor
                     date = newdate
+                elif not date:
+                    # If we don't do this we'll get the current date, at least this will be closer
+                    date = newdate
                 if not subject:
                     subject = newsubject
-        if subject:
+        if subject and outlines and not outlines[0].strip() == subject:
             outlines.insert(0, '%s\n\n' % subject.strip())
 
         # Write out commit message to a file

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list