Add a python tool to generate a config fragment from a unified diff of two
kernel configurations. The diff is read from stdin and the fragment is printed
to stdout.

Usage:
        $ diff -u config1 config2 | kconfig-diff2frag.py

Signed-off-by: Trevor Woerner <twoer...@gmail.com>
---
 Makefile                   |  3 ++-
 tools/kconfig-diff2frag.py | 31 +++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)
 create mode 100755 tools/kconfig-diff2frag.py

diff --git a/Makefile b/Makefile
index 2818ecd2fefc..6d481ed52f04 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,8 @@ kern_tools_LIST = kgit kgit-meta \
                  kgit-create-buckets \
                  get_defconfig scc \
                  merge_config.sh spp kgit-s2q \
-                 symbol_why.py
+                 symbol_why.py \
+                 kconfig-diff2frag.py
 
 cmds := $(wildcard tools/scc-cmds/*)
 libs := Kconfiglib/kconfiglib.py
diff --git a/tools/kconfig-diff2frag.py b/tools/kconfig-diff2frag.py
new file mode 100755
index 000000000000..2c2b2e37b826
--- /dev/null
+++ b/tools/kconfig-diff2frag.py
@@ -0,0 +1,31 @@
+#! /usr/bin/env python3
+#
+## Copyright (C) 2023  Trevor Woerner <twoer...@gmail.com>
+## SPDX-License-Identifier: OSLv3
+## vim: sw=4 ts=4 sts=4 expandtab
+
+# This tool takes a unified diff (diff -u <before> <after>) of two kconfig
+# files and generates a kconfig fragment from the differences.
+# It reads the diff on stdin and outputs the fragment on stdout.
+#
+# Example usage:
+#    $ diff -u config-before config-after | ./kconfig-diff2frag.py
+
+import sys
+
+def main():
+    for LINE in sys.stdin:
+        # if a line starts with '+CONFIG_*'
+        # then output the line without the leading '+'
+        if LINE.find('+CONFIG_') == 0:
+            print(LINE[1:],end='')
+
+        # if a line starts with '+# CONFIG_* is not set'
+        # then output the line as: CONFIG_*=n
+        if LINE.find('+# CONFIG_') == 0:
+            print(LINE.split()[1].strip(),'=n',sep='')
+
+        # ignore any other lines
+
+if __name__ == "__main__":
+    main()
-- 
2.41.0.327.gaa9166bcc0ba

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#12977): 
https://lists.yoctoproject.org/g/linux-yocto/message/12977
Mute This Topic: https://lists.yoctoproject.org/mt/100761334/21656
Group Owner: linux-yocto+ow...@lists.yoctoproject.org
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to