From c6f8ab56d7546ad7259c39920716646f85813aa3 Mon Sep 17 00:00:00 2001 From: kmotavalli Date: Fri, 6 Jan 2017 07:28:16 +0100 Subject: [PATCH 01/10] add zypper arguments to snapshot description update scripts/zypp-plugin.py to extend the snapshot description with zypper cmdline arguments when zypp is run from zypper. could be made universal by parsing TransactionStepList, maybe --- scripts/zypp-plugin.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/zypp-plugin.py b/scripts/zypp-plugin.py index 110ed3c4c..59db92e98 100755 --- a/scripts/zypp-plugin.py +++ b/scripts/zypp-plugin.py @@ -145,6 +145,12 @@ def match_solvables(self, names): if found and important: return True, True return found, important + + def zypper_arguments(self): + if basename(readlink("/proc/%d/exe" % getppid())) == "zypper": + return " ".join(open("/proc/%s/cmdline" % getppid()).read().split('\x00')[1:]) + else: + return "" def PLUGINBEGIN(self, headers, body): @@ -153,7 +159,7 @@ def PLUGINBEGIN(self, headers, body): logging.debug("headers: %s" % headers) - self.description = "zypp(%s)" % basename(readlink("/proc/%d/exe" % getppid())) + self.description = "zypp(%s) %s" % (basename(readlink("/proc/%d/exe" % getppid())), self.zypper_arguments()) self.userdata = self.get_userdata(headers) self.ack() From 38f167348aed249ddcaca1a88b9d18b64a8f3eea Mon Sep 17 00:00:00 2001 From: kmotavalli Date: Wed, 11 Jan 2017 17:06:18 +0100 Subject: [PATCH 02/10] parse configuration for extended zypper output only append zypper command line arguments to the snapshot description if is set inside in . set the element inside zypper-extended-description to N in order to cut the zypper commandline description after N chars. defaults to 0 (unlimited output). 32 --- scripts/zypp-plugin.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/scripts/zypp-plugin.py b/scripts/zypp-plugin.py index 59db92e98..78592bd2a 100755 --- a/scripts/zypp-plugin.py +++ b/scripts/zypp-plugin.py @@ -56,6 +56,9 @@ class Config: def __init__(self): self.solvables = [] + self.zypper_extended_description = [] + self.zypper_extended_description.append("false") + self.zypper_extended_description.append("0") self.load_file("/etc/snapper/zypp-plugin.conf") @@ -90,6 +93,19 @@ def load_dom(self, dom): except: pass + try: + for tmp3 in dom.getElementsByTagName("description"): + for tmp4 in tmp3.getElementsByTagName("zypper-extended-description"): + string_size = tmp4.childNodes[0].data + description_enabled = tmp4.getAttribute("enabled") + if not description_enabled in [ "true", "false" ]: + loggin.error("unknown extended-config enabled attribute %s" % description_enabled) + continue + if description_enabled == "true": + self.zypper_extended_description[0] = "true" + self.zypper_extended_description[1] = string_size + except: + pass @@ -148,9 +164,13 @@ def match_solvables(self, names): def zypper_arguments(self): if basename(readlink("/proc/%d/exe" % getppid())) == "zypper": - return " ".join(open("/proc/%s/cmdline" % getppid()).read().split('\x00')[1:]) + argument = " ".join(open("/proc/%s/cmdline" % getppid()).read().split('\x00')[1:]) else: return "" + if config.zypper_extended_description[1] == "0": + return argument + else: + return argument[0:int(config.zypper_extended_description[1])] def PLUGINBEGIN(self, headers, body): @@ -158,8 +178,10 @@ def PLUGINBEGIN(self, headers, body): logging.info("PLUGINBEGIN") logging.debug("headers: %s" % headers) - - self.description = "zypp(%s) %s" % (basename(readlink("/proc/%d/exe" % getppid())), self.zypper_arguments()) + if config.zypper_extended_description[0] != "true": + self.description = "zypp(%s)" % basename(readlink("/proc/%d/exe" % getppid())) + elif config.zypper_extended_description[0] == "true": + self.description = "zypp(%s) %s" % (basename(readlink("/proc/%d/exe" % getppid())), self.zypper_arguments()) self.userdata = self.get_userdata(headers) self.ack() From 13a1439f1bcb44a5d66b0a0635fcea1867a37eec Mon Sep 17 00:00:00 2001 From: kmotavalli Date: Wed, 11 Jan 2017 17:18:41 +0100 Subject: [PATCH 03/10] update zypp-plugin.conf with zypper cmdline opts --- data/zypp-plugin.conf | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/data/zypp-plugin.conf b/data/zypp-plugin.conf index b0a2be30a..10c1c4bbd 100644 --- a/data/zypp-plugin.conf +++ b/data/zypp-plugin.conf @@ -15,5 +15,13 @@ udev * + + + + + 32 + + From ed2c4222c1095d036ac33b7969a38a33514ce4a5 Mon Sep 17 00:00:00 2001 From: kmotavalli Date: Wed, 11 Jan 2017 20:48:22 +0100 Subject: [PATCH 04/10] eliminate trailing whitespace in description eliminate trailing whitespace in description when basename is not zypper --- scripts/zypp-plugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/zypp-plugin.py b/scripts/zypp-plugin.py index 78592bd2a..80bd232e3 100755 --- a/scripts/zypp-plugin.py +++ b/scripts/zypp-plugin.py @@ -164,7 +164,7 @@ def match_solvables(self, names): def zypper_arguments(self): if basename(readlink("/proc/%d/exe" % getppid())) == "zypper": - argument = " ".join(open("/proc/%s/cmdline" % getppid()).read().split('\x00')[1:]) + argument = " " + " ".join(open("/proc/%s/cmdline" % getppid()).read().split('\x00')[1:]) else: return "" if config.zypper_extended_description[1] == "0": @@ -181,7 +181,7 @@ def PLUGINBEGIN(self, headers, body): if config.zypper_extended_description[0] != "true": self.description = "zypp(%s)" % basename(readlink("/proc/%d/exe" % getppid())) elif config.zypper_extended_description[0] == "true": - self.description = "zypp(%s) %s" % (basename(readlink("/proc/%d/exe" % getppid())), self.zypper_arguments()) + self.description = "zypp(%s)%s" % (basename(readlink("/proc/%d/exe" % getppid())), self.zypper_arguments()) self.userdata = self.get_userdata(headers) self.ack() From e1e0bac59f92c9644f8f91eaef845f70a52b1955 Mon Sep 17 00:00:00 2001 From: kmotavalli Date: Wed, 11 Jan 2017 22:32:50 +0100 Subject: [PATCH 05/10] fix wording in zypper-extended-description comment --- data/zypp-plugin.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/zypp-plugin.conf b/data/zypp-plugin.conf index 10c1c4bbd..857dc69e2 100644 --- a/data/zypp-plugin.conf +++ b/data/zypp-plugin.conf @@ -17,7 +17,7 @@ + by default argoments following zypp(zypper) are truncated at 32 chars. change to 0 for unlimited output --> 32 From c58c2820f8396c1cdf8561dc287ded2b1bdac110 Mon Sep 17 00:00:00 2001 From: kmotavalli Date: Thu, 12 Jan 2017 07:34:43 +0100 Subject: [PATCH 06/10] fix typo in zypp-plugin comment --- data/zypp-plugin.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/zypp-plugin.conf b/data/zypp-plugin.conf index 857dc69e2..0c4f25981 100644 --- a/data/zypp-plugin.conf +++ b/data/zypp-plugin.conf @@ -17,7 +17,7 @@ + by default arguments following zypp(zypper) are truncated at 32 chars. change to 0 for unlimited output --> 32 From 1243596fb4384206f17bfa02091db68758927fe6 Mon Sep 17 00:00:00 2001 From: kmotavalli Date: Thu, 12 Jan 2017 11:58:25 +0100 Subject: [PATCH 07/10] don't use an array for zypper_extended_description --- scripts/zypp-plugin.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/scripts/zypp-plugin.py b/scripts/zypp-plugin.py index 80bd232e3..052d4b35d 100755 --- a/scripts/zypp-plugin.py +++ b/scripts/zypp-plugin.py @@ -56,9 +56,8 @@ class Config: def __init__(self): self.solvables = [] - self.zypper_extended_description = [] - self.zypper_extended_description.append("false") - self.zypper_extended_description.append("0") + self.self.zypper_extended_description_enabled = "false" + self.self.zypper_extended_description_length = 0 self.load_file("/etc/snapper/zypp-plugin.conf") @@ -102,8 +101,8 @@ def load_dom(self, dom): loggin.error("unknown extended-config enabled attribute %s" % description_enabled) continue if description_enabled == "true": - self.zypper_extended_description[0] = "true" - self.zypper_extended_description[1] = string_size + self.zypper_extended_description_enabled = "true" + self.zypper_extended_description_length = string_size except: pass @@ -167,10 +166,10 @@ def zypper_arguments(self): argument = " " + " ".join(open("/proc/%s/cmdline" % getppid()).read().split('\x00')[1:]) else: return "" - if config.zypper_extended_description[1] == "0": + if config.zypper_extended_description_length == "0": return argument else: - return argument[0:int(config.zypper_extended_description[1])] + return argument[0:int(config.zypper_extended_description_length)] def PLUGINBEGIN(self, headers, body): @@ -178,10 +177,9 @@ def PLUGINBEGIN(self, headers, body): logging.info("PLUGINBEGIN") logging.debug("headers: %s" % headers) - if config.zypper_extended_description[0] != "true": - self.description = "zypp(%s)" % basename(readlink("/proc/%d/exe" % getppid())) - elif config.zypper_extended_description[0] == "true": - self.description = "zypp(%s)%s" % (basename(readlink("/proc/%d/exe" % getppid())), self.zypper_arguments()) + self.description = "zypp(%s)" % basename(readlink("/proc/%d/exe" % getppid())) + if config.zypper_extended_description_enabled == "true": + self.description.append(self.zypper_arguments()) self.userdata = self.get_userdata(headers) self.ack() From d952d2cf5d35cb1e906c4a96900c42bcdc4cfc9c Mon Sep 17 00:00:00 2001 From: kmotavalli Date: Thu, 12 Jan 2017 20:59:04 +0100 Subject: [PATCH 08/10] use boolean True instead of the string "true" --- scripts/zypp-plugin.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/zypp-plugin.py b/scripts/zypp-plugin.py index 052d4b35d..ff05fe15d 100755 --- a/scripts/zypp-plugin.py +++ b/scripts/zypp-plugin.py @@ -101,8 +101,8 @@ def load_dom(self, dom): loggin.error("unknown extended-config enabled attribute %s" % description_enabled) continue if description_enabled == "true": - self.zypper_extended_description_enabled = "true" - self.zypper_extended_description_length = string_size + self.zypper_extended_description_enabled = True + self.zypper_extended_description_length = int(string_size) except: pass @@ -169,7 +169,7 @@ def zypper_arguments(self): if config.zypper_extended_description_length == "0": return argument else: - return argument[0:int(config.zypper_extended_description_length)] + return argument[0:config.zypper_extended_description_length] def PLUGINBEGIN(self, headers, body): @@ -178,7 +178,7 @@ def PLUGINBEGIN(self, headers, body): logging.debug("headers: %s" % headers) self.description = "zypp(%s)" % basename(readlink("/proc/%d/exe" % getppid())) - if config.zypper_extended_description_enabled == "true": + if config.zypper_extended_description_enabled == True: self.description.append(self.zypper_arguments()) self.userdata = self.get_userdata(headers) From 5015c03a1d40eaf2c67dc8c338aee27db859eb3d Mon Sep 17 00:00:00 2001 From: kmotavalli Date: Thu, 12 Jan 2017 20:59:42 +0100 Subject: [PATCH 09/10] use booleans --- scripts/zypp-plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/zypp-plugin.py b/scripts/zypp-plugin.py index ff05fe15d..901921293 100755 --- a/scripts/zypp-plugin.py +++ b/scripts/zypp-plugin.py @@ -56,7 +56,7 @@ class Config: def __init__(self): self.solvables = [] - self.self.zypper_extended_description_enabled = "false" + self.self.zypper_extended_description_enabled = False self.self.zypper_extended_description_length = 0 self.load_file("/etc/snapper/zypp-plugin.conf") From 02130c5ffad42923c09aef1261123e0e993cf36e Mon Sep 17 00:00:00 2001 From: kmotavalli Date: Thu, 12 Jan 2017 21:01:01 +0100 Subject: [PATCH 10/10] use integers instead of a string for string len --- scripts/zypp-plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/zypp-plugin.py b/scripts/zypp-plugin.py index 901921293..831dc11be 100755 --- a/scripts/zypp-plugin.py +++ b/scripts/zypp-plugin.py @@ -166,7 +166,7 @@ def zypper_arguments(self): argument = " " + " ".join(open("/proc/%s/cmdline" % getppid()).read().split('\x00')[1:]) else: return "" - if config.zypper_extended_description_length == "0": + if config.zypper_extended_description_length == 0: return argument else: return argument[0:config.zypper_extended_description_length]