mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
classes/package_rpm: correctly escape percent characters
This many characters doesn't work with rpm 4.19 packaging (as shown by nodejs recipes), and per documentation a single escape is enough: https://github.com/rpm-software-management/rpm/blob/rpm-4.19.x/docs/manual/spec.md#shell-globbing It also should be done in a function, and just before writing out the corrected filename to .spec, not earlier where the path may still be needed for file operations (such as gettings file attributes). (From OE-Core rev: 6d9fe2623c37e405a80acf71633f7291ecdde533) Signed-off-by: Alexander Kanavin <alex@linutronix.de> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
43f9098a69
commit
4584746c1a
@@ -216,10 +216,12 @@ python write_specfile () {
|
||||
raise e
|
||||
return "%attr({:o},{},{}) ".format(mode, owner, group)
|
||||
|
||||
def escape_chars(p):
|
||||
return p.replace("%", "%%")
|
||||
|
||||
path = rootpath.replace(walkpath, "")
|
||||
if path.endswith("DEBIAN") or path.endswith("CONTROL"):
|
||||
continue
|
||||
path = path.replace("%", "%%%%%%%%")
|
||||
|
||||
# Treat all symlinks to directories as normal files.
|
||||
# os.walk() lists them as directories.
|
||||
@@ -238,29 +240,27 @@ python write_specfile () {
|
||||
for dir in dirs:
|
||||
if dir == "CONTROL" or dir == "DEBIAN":
|
||||
continue
|
||||
dir = dir.replace("%", "%%%%%%%%")
|
||||
p = path + '/' + dir
|
||||
# All packages own the directories their files are in...
|
||||
target.append(get_attr(dir) + '%dir "' + p + '"')
|
||||
target.append(get_attr(dir) + '%dir "' + escape_chars(p) + '"')
|
||||
else:
|
||||
# packages own only empty directories or explict directory.
|
||||
# This will prevent the overlapping of security permission.
|
||||
attr = get_attr(path)
|
||||
if path and not files and not dirs:
|
||||
target.append(attr + '%dir "' + path + '"')
|
||||
target.append(attr + '%dir "' + escape_chars(path) + '"')
|
||||
elif path and path in dirfiles:
|
||||
target.append(attr + '%dir "' + path + '"')
|
||||
target.append(attr + '%dir "' + escape_chars(path) + '"')
|
||||
|
||||
for file in files:
|
||||
if file == "CONTROL" or file == "DEBIAN":
|
||||
continue
|
||||
file = file.replace("%", "%%%%%%%%")
|
||||
attr = get_attr(file)
|
||||
p = path + '/' + file
|
||||
if conffiles.count(p):
|
||||
target.append(attr + '%config "' + p + '"')
|
||||
target.append(attr + '%config "' + escape_chars(p) + '"')
|
||||
else:
|
||||
target.append(attr + '"' + p + '"')
|
||||
target.append(attr + '"' + escape_chars(p) + '"')
|
||||
|
||||
# Prevent the prerm/postrm scripts from being run during an upgrade
|
||||
def wrap_uninstall(scriptvar):
|
||||
|
||||
Reference in New Issue
Block a user