mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 21:09:03 +02:00
lib/oe/patch: commit with a dummy user/email when PATCHTOOL=git
When using PATCHTOOL = "git", the user of the system is not really the committer - it's the build system itself. Thus, specify "dummy" values for username and email instead of using the user's configured values. Various parts of the devtool code that need to make commits have also been updated to use the same logic. This allows PATCHTOOL = "git" and devtool to be used on systems where git user.name / user.email has not been set (on versions of git where it doesn't default a value under this circumstance). If you want to return to the old behaviour where the externally configured user name / email are used, set the following in your local.conf: PATCH_GIT_USER_NAME = "" PATCH_GIT_USER_EMAIL = "" Fixes [YOCTO #8703]. (From OE-Core rev: 765a9017eaf77ea3204fb10afb8181629680bd82) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
e5f61f85c5
commit
4b4387455c
|
@ -5,6 +5,9 @@ QUILTRCFILE ?= "${STAGING_ETCDIR_NATIVE}/quiltrc"
|
||||||
|
|
||||||
PATCHDEPENDENCY = "${PATCHTOOL}-native:do_populate_sysroot"
|
PATCHDEPENDENCY = "${PATCHTOOL}-native:do_populate_sysroot"
|
||||||
|
|
||||||
|
PATCH_GIT_USER_NAME ?= "OpenEmbedded"
|
||||||
|
PATCH_GIT_USER_EMAIL ?= "oe.patch@oe"
|
||||||
|
|
||||||
inherit terminal
|
inherit terminal
|
||||||
|
|
||||||
def src_patches(d, all = False ):
|
def src_patches(d, all = False ):
|
||||||
|
|
|
@ -281,6 +281,8 @@ class GitApplyTree(PatchTree):
|
||||||
|
|
||||||
def __init__(self, dir, d):
|
def __init__(self, dir, d):
|
||||||
PatchTree.__init__(self, dir, d)
|
PatchTree.__init__(self, dir, d)
|
||||||
|
self.commituser = d.getVar('PATCH_GIT_USER_NAME', True)
|
||||||
|
self.commitemail = d.getVar('PATCH_GIT_USER_EMAIL', True)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def extractPatchHeader(patchfile):
|
def extractPatchHeader(patchfile):
|
||||||
|
@ -348,7 +350,17 @@ class GitApplyTree(PatchTree):
|
||||||
return outlines, author, date, subject
|
return outlines, author, date, subject
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def prepareCommit(patchfile):
|
def gitCommandUserOptions(cmd, commituser=None, commitemail=None, d=None):
|
||||||
|
if d:
|
||||||
|
commituser = d.getVar('PATCH_GIT_USER_NAME', True)
|
||||||
|
commitemail = d.getVar('PATCH_GIT_USER_EMAIL', True)
|
||||||
|
if commituser:
|
||||||
|
cmd += ['-c', 'user.name="%s"' % commituser]
|
||||||
|
if commitemail:
|
||||||
|
cmd += ['-c', 'user.email="%s"' % commitemail]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def prepareCommit(patchfile, commituser=None, commitemail=None):
|
||||||
"""
|
"""
|
||||||
Prepare a git commit command line based on the header from a patch file
|
Prepare a git commit command line based on the header from a patch file
|
||||||
(typically this is useful for patches that cannot be applied with "git am" due to formatting)
|
(typically this is useful for patches that cannot be applied with "git am" due to formatting)
|
||||||
|
@ -380,7 +392,9 @@ class GitApplyTree(PatchTree):
|
||||||
for line in outlines:
|
for line in outlines:
|
||||||
tf.write(line)
|
tf.write(line)
|
||||||
# Prepare git command
|
# Prepare git command
|
||||||
cmd = ["git", "commit", "-F", tmpfile]
|
cmd = ["git"]
|
||||||
|
GitApplyTree.gitCommandUserOptions(cmd, commituser, commitemail)
|
||||||
|
cmd += ["commit", "-F", tmpfile]
|
||||||
# git doesn't like plain email addresses as authors
|
# git doesn't like plain email addresses as authors
|
||||||
if author and '<' in author:
|
if author and '<' in author:
|
||||||
cmd.append('--author="%s"' % author)
|
cmd.append('--author="%s"' % author)
|
||||||
|
@ -456,7 +470,9 @@ class GitApplyTree(PatchTree):
|
||||||
try:
|
try:
|
||||||
patchfilevar = 'PATCHFILE="%s"' % os.path.basename(patch['file'])
|
patchfilevar = 'PATCHFILE="%s"' % os.path.basename(patch['file'])
|
||||||
try:
|
try:
|
||||||
shellcmd = [patchfilevar, "git", "--work-tree=%s" % reporoot, "am", "-3", "--keep-cr", "-p%s" % patch['strippath']]
|
shellcmd = [patchfilevar, "git", "--work-tree=%s" % reporoot]
|
||||||
|
self.gitCommandUserOptions(shellcmd, self.commituser, self.commitemail)
|
||||||
|
shellcmd += ["am", "-3", "--keep-cr", "-p%s" % patch['strippath']]
|
||||||
return _applypatchhelper(shellcmd, patch, force, reverse, run)
|
return _applypatchhelper(shellcmd, patch, force, reverse, run)
|
||||||
except CmdError:
|
except CmdError:
|
||||||
# Need to abort the git am, or we'll still be within it at the end
|
# Need to abort the git am, or we'll still be within it at the end
|
||||||
|
@ -486,7 +502,7 @@ class GitApplyTree(PatchTree):
|
||||||
shellcmd = ["git", "reset", "HEAD", self.patchdir]
|
shellcmd = ["git", "reset", "HEAD", self.patchdir]
|
||||||
output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
|
output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
|
||||||
# Commit the result
|
# Commit the result
|
||||||
(tmpfile, shellcmd) = self.prepareCommit(patch['file'])
|
(tmpfile, shellcmd) = self.prepareCommit(patch['file'], self.commituser, self.commitemail)
|
||||||
try:
|
try:
|
||||||
shellcmd.insert(0, patchfilevar)
|
shellcmd.insert(0, patchfilevar)
|
||||||
output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
|
output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
|
||||||
|
|
|
@ -196,15 +196,18 @@ def use_external_build(same_dir, no_same_dir, d):
|
||||||
b_is_s = False
|
b_is_s = False
|
||||||
return b_is_s
|
return b_is_s
|
||||||
|
|
||||||
def setup_git_repo(repodir, version, devbranch, basetag='devtool-base'):
|
def setup_git_repo(repodir, version, devbranch, basetag='devtool-base', d=None):
|
||||||
"""
|
"""
|
||||||
Set up the git repository for the source tree
|
Set up the git repository for the source tree
|
||||||
"""
|
"""
|
||||||
import bb.process
|
import bb.process
|
||||||
|
import oe.patch
|
||||||
if not os.path.exists(os.path.join(repodir, '.git')):
|
if not os.path.exists(os.path.join(repodir, '.git')):
|
||||||
bb.process.run('git init', cwd=repodir)
|
bb.process.run('git init', cwd=repodir)
|
||||||
bb.process.run('git add .', cwd=repodir)
|
bb.process.run('git add .', cwd=repodir)
|
||||||
commit_cmd = ['git', 'commit', '-q']
|
commit_cmd = ['git']
|
||||||
|
oe.patch.GitApplyTree.gitCommandUserOptions(commit_cmd, d=d)
|
||||||
|
commit_cmd += ['commit', '-q']
|
||||||
stdout, _ = bb.process.run('git status --porcelain', cwd=repodir)
|
stdout, _ = bb.process.run('git status --porcelain', cwd=repodir)
|
||||||
if not stdout:
|
if not stdout:
|
||||||
commit_cmd.append('--allow-empty')
|
commit_cmd.append('--allow-empty')
|
||||||
|
|
|
@ -212,19 +212,19 @@ def add(args, config, basepath, workspace):
|
||||||
for fn in os.listdir(recipedir):
|
for fn in os.listdir(recipedir):
|
||||||
_add_md5(config, recipename, os.path.join(recipedir, fn))
|
_add_md5(config, recipename, os.path.join(recipedir, fn))
|
||||||
|
|
||||||
|
tinfoil = setup_tinfoil(config_only=True, basepath=basepath)
|
||||||
|
rd = oe.recipeutils.parse_recipe(tinfoil.cooker, recipefile, None)
|
||||||
|
if not rd:
|
||||||
|
return 1
|
||||||
|
|
||||||
if args.fetchuri and not args.no_git:
|
if args.fetchuri and not args.no_git:
|
||||||
setup_git_repo(srctree, args.version, 'devtool')
|
setup_git_repo(srctree, args.version, 'devtool', d=tinfoil.config_data)
|
||||||
|
|
||||||
initial_rev = None
|
initial_rev = None
|
||||||
if os.path.exists(os.path.join(srctree, '.git')):
|
if os.path.exists(os.path.join(srctree, '.git')):
|
||||||
(stdout, _) = bb.process.run('git rev-parse HEAD', cwd=srctree)
|
(stdout, _) = bb.process.run('git rev-parse HEAD', cwd=srctree)
|
||||||
initial_rev = stdout.rstrip()
|
initial_rev = stdout.rstrip()
|
||||||
|
|
||||||
tinfoil = setup_tinfoil(config_only=True, basepath=basepath)
|
|
||||||
rd = oe.recipeutils.parse_recipe(tinfoil.cooker, recipefile, None)
|
|
||||||
if not rd:
|
|
||||||
return 1
|
|
||||||
|
|
||||||
if args.src_subdir:
|
if args.src_subdir:
|
||||||
srctree = os.path.join(srctree, args.src_subdir)
|
srctree = os.path.join(srctree, args.src_subdir)
|
||||||
|
|
||||||
|
@ -420,7 +420,10 @@ class BbTaskExecutor(object):
|
||||||
|
|
||||||
class PatchTaskExecutor(BbTaskExecutor):
|
class PatchTaskExecutor(BbTaskExecutor):
|
||||||
def __init__(self, rdata):
|
def __init__(self, rdata):
|
||||||
|
import oe.patch
|
||||||
self.check_git = False
|
self.check_git = False
|
||||||
|
self.useroptions = []
|
||||||
|
oe.patch.GitApplyTree.gitCommandUserOptions(self.useroptions, d=rdata)
|
||||||
super(PatchTaskExecutor, self).__init__(rdata)
|
super(PatchTaskExecutor, self).__init__(rdata)
|
||||||
|
|
||||||
def exec_func(self, func, report):
|
def exec_func(self, func, report):
|
||||||
|
@ -447,7 +450,7 @@ class PatchTaskExecutor(BbTaskExecutor):
|
||||||
|
|
||||||
stdout, _ = bb.process.run('git status --porcelain', cwd=srcsubdir)
|
stdout, _ = bb.process.run('git status --porcelain', cwd=srcsubdir)
|
||||||
if stdout:
|
if stdout:
|
||||||
bb.process.run('git add .; git commit -a -m "Committing changes from %s\n\n%s"' % (func, GitApplyTree.ignore_commit_prefix + ' - from %s' % func), cwd=srcsubdir)
|
bb.process.run('git add .; git %s commit -a -m "Committing changes from %s\n\n%s"' % (' '.join(self.useroptions), func, GitApplyTree.ignore_commit_prefix + ' - from %s' % func), cwd=srcsubdir)
|
||||||
|
|
||||||
|
|
||||||
def _prep_extract_operation(config, basepath, recipename, tinfoil=None):
|
def _prep_extract_operation(config, basepath, recipename, tinfoil=None):
|
||||||
|
@ -592,7 +595,7 @@ def _extract_source(srctree, keep_temp, devbranch, sync, d):
|
||||||
"doesn't use any source or the correct source "
|
"doesn't use any source or the correct source "
|
||||||
"directory could not be determined" % pn)
|
"directory could not be determined" % pn)
|
||||||
|
|
||||||
setup_git_repo(srcsubdir, crd.getVar('PV', True), devbranch)
|
setup_git_repo(srcsubdir, crd.getVar('PV', True), devbranch, d=d)
|
||||||
|
|
||||||
(stdout, _) = bb.process.run('git rev-parse HEAD', cwd=srcsubdir)
|
(stdout, _) = bb.process.run('git rev-parse HEAD', cwd=srcsubdir)
|
||||||
initial_rev = stdout.rstrip()
|
initial_rev = stdout.rstrip()
|
||||||
|
|
|
@ -227,7 +227,9 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, branch, keep_temp, tin
|
||||||
for f in stdout.splitlines():
|
for f in stdout.splitlines():
|
||||||
__run('git add "%s"' % f)
|
__run('git add "%s"' % f)
|
||||||
|
|
||||||
__run('git commit -q -m "Commit of upstream changes at version %s" --allow-empty' % newpv)
|
useroptions = []
|
||||||
|
oe.patch.GitApplyTree.gitCommandUserOptions(useroptions, d=rd)
|
||||||
|
__run('git %s commit -q -m "Commit of upstream changes at version %s" --allow-empty' % (' '.join(useroptions), newpv))
|
||||||
__run('git tag -f devtool-base-%s' % newpv)
|
__run('git tag -f devtool-base-%s' % newpv)
|
||||||
|
|
||||||
(stdout, _) = __run('git rev-parse HEAD')
|
(stdout, _) = __run('git rev-parse HEAD')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user