[openwrt/openwrt] scripts: package-metadata add pkgmanifestjson call

LEDE Commits lede-commits at lists.infradead.org
Fri Sep 24 00:59:42 PDT 2021


aparcar pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/3128dfc18a5eaff145d17b8a3fe1131d10922384

commit 3128dfc18a5eaff145d17b8a3fe1131d10922384
Author: Paul Spooren <mail at aparcar.org>
AuthorDate: Fri Sep 17 12:00:40 2021 -1000

    scripts: package-metadata add pkgmanifestjson call
    
    The new `pkgmanifestjson` call prints all package manifest of a feed in
    JSON format. This function can be used to print an overview of packages
    information used for downstream tooling.
    
    The script is entirely based on Petrs work on dependency visualisation.
    
    Signed-off-by: Paul Spooren <mail at aparcar.org>
---
 scripts/package-metadata.pl | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/scripts/package-metadata.pl b/scripts/package-metadata.pl
index 02102be8f3..6288584d65 100755
--- a/scripts/package-metadata.pl
+++ b/scripts/package-metadata.pl
@@ -585,6 +585,40 @@ sub gen_usergroup_list() {
 	}
 }
 
+sub gen_package_manifest_json() {
+	my $json;
+	parse_package_metadata($ARGV[0]) or exit 1;
+	foreach my $name (sort {uc($a) cmp uc($b)} keys %package) {
+		my %depends;
+		my $pkg = $package{$name};
+		foreach my $dep (@{$pkg->{depends} || []}) {
+			if ($dep =~ m!^\+?(?:[^:]+:)?([^@]+)$!) {
+				$depends{$1}++;
+			}
+		}
+		my @depends = sort keys %depends;
+		my $pkg_deps = join ' ', map { qq/"$_",/ } @depends;
+		$pkg_deps =~ s/\,$//;
+
+		my $pkg_maintainer = join ' ', map { qq/"$_",/ } @{$pkg->{maintainer} || []};
+		$pkg_maintainer =~ s/\,$//;
+
+		$json = <<"END_JSON";
+${json}{
+"name":"$name",
+"version":"$pkg->{version}",
+"category":"$pkg->{category}",
+"license":"$pkg->{license}",
+"maintainer": [$pkg_maintainer],
+"depends":[$pkg_deps]},
+END_JSON
+	}
+
+	$json =~ s/[\n\r]//g;
+	$json =~ s/\,$//;
+	print "[$json]";
+}
+
 sub parse_command() {
 	GetOptions("ignore=s", \@ignore);
 	my $cmd = shift @ARGV;
@@ -594,6 +628,7 @@ sub parse_command() {
 		/^kconfig/ and return gen_kconfig_overrides();
 		/^source$/ and return gen_package_source();
 		/^pkgaux$/ and return gen_package_auxiliary();
+		/^pkgmanifestjson$/ and return gen_package_manifest_json();
 		/^license$/ and return gen_package_license(0);
 		/^licensefull$/ and return gen_package_license(1);
 		/^usergroup$/ and return gen_usergroup_list();
@@ -606,6 +641,7 @@ Available Commands:
 	$0 kconfig [file] [config] [patchver]	Kernel config overrides
 	$0 source [file] 			Package source file information
 	$0 pkgaux [file]			Package auxiliary variables in makefile format
+	$0 pkgmanifestjson [file]		Package manifests in JSON format
 	$0 license [file] 			Package license information
 	$0 licensefull [file] 			Package license information (full list)
 	$0 usergroup [file]			Package usergroup allocation list



More information about the lede-commits mailing list