diff mbox

[OpenWrt-Devel] opkg: Extend 'opkg list' command to optionally display package size

Message ID 55E31540.3050600@iki.fi
State Superseded
Headers show

Commit Message

Hannu Nyman Aug. 30, 2015, 2:37 p.m. UTC
'opkg list' command only displays the available packages' name, version and 
description.
It would be useful to also see the approximate size of the available package.

This patch extends "opkg list" command with "--size" to optionally show also 
the *.ipk size in the listing.
* Default behaviour is to print the list of available packages as earlier: 
"name - version - description"
* with "--size" the output of is "name - version - size - description".

All current functionality should continue working without any change. Luci 
might be extended to utilize the new options to e.g. answer 
https://github.com/openwrt/luci/issues/19

Signed-off-by: Hannu Nyman < hannu.nyman@iki.fi>

---

Tested with ar71xx / WNDR3700:

opkg package size increase is minimal:

root@OpenWrt2:~# ls -l /bin/opkg
-rwxr-xr-x    1 root     root        101532 Aug 29 23:05 /bin/opkg

root@OpenWrt2:~# opkg install 
/tmp/opkg_9c97d5ecd795709c8584e972bfdf3aee3a5b846d-9_ar71xx.ipk
Upgrading opkg on root from 9c97d5ecd795709c8584e972bfdf3aee3a5b846d-8 to 
9c97d5ecd795709c8584e972bfdf3aee3a5b846d-9...
Configuring opkg.

root@OpenWrt2:~# ls -l /bin/opkg
-rwxr-xr-x    1 root     root        101548 Aug 29 23:05 /bin/opkg

--size works as expected:
(packages not from "packages" feed have been removed for clarity)

root@OpenWrt2:/tmp# opkg list j*
jansson - 2.7-1 - Jansson is a C library for encoding, decoding and 
manipulating JSON data
joe - 4.0-4 - Joe is world-famous Wordstar like text editor, that also features
  Emacs and Pico emulation
jpeg-tools - 9a-1 - The Independent JPEG Group's JPEG manipulation tools
json4lua - 0.9.53-1 - JSON and JSONRPC for Lua

root@OpenWrt2:/tmp# opkg list --size j*
jansson - 2.7-1 - 19182 - Jansson is a C library for encoding, decoding and 
manipulating JSON data
joe - 4.0-4 - 173911 - Joe is world-famous Wordstar like text editor, that 
also features
  Emacs and Pico emulation
jpeg-tools - 9a-1 - 31188 - The Independent JPEG Group's JPEG manipulation tools
json4lua - 0.9.53-1 - 7205 - JSON and JSONRPC for Lua

-------------
https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/packages/packages/

jansson_2.7-1_ar71xx.ipk                           26-Aug-2015 
05:20               19182
joe_4.0-4_ar71xx.ipk                               26-Aug-2015 
05:20              173911
jpeg-tools_9a-1_ar71xx.ipk                         26-Aug-2015 
00:04               31188
json4lua_0.9.53-1_ar71xx.ipk                       26-Aug-2015 
05:21                7205

Comments

Hannu Nyman Sept. 1, 2015, 8:02 a.m. UTC | #1
I created a Luci implementation that utilises this opkg change to show the 
.ipk size to the user in GUI:
https://github.com/openwrt/luci/issues/19#issuecomment-136397807


On 30.8.2015 17:37, Hannu Nyman wrote:
> ... Luci might be extended to utilize the new options to e.g. answer 
> https://github.com/openwrt/luci/issues/19
>
John Crispin Sept. 16, 2015, 7:35 a.m. UTC | #2
On 30/08/2015 16:37, Hannu Nyman wrote:
> 'opkg list' command only displays the available packages' name, version
> and description.
> It would be useful to also see the approximate size of the available
> package.
> 
> This patch extends "opkg list" command with "--size" to optionally show
> also the *.ipk size in the listing.
> * Default behaviour is to print the list of available packages as
> earlier: "name - version - description"
> * with "--size" the output of is "name - version - size - description".
> 
> All current functionality should continue working without any change.
> Luci might be extended to utilize the new options to e.g. answer
> https://github.com/openwrt/luci/issues/19
> 
> Signed-off-by: Hannu Nyman < hannu.nyman@iki.fi>
> 
> 

Looks good but needs a rebase to apply. can you send a V2 please

	John




---
> 
> Tested with ar71xx / WNDR3700:
> 
> opkg package size increase is minimal:
> 
> root@OpenWrt2:~# ls -l /bin/opkg
> -rwxr-xr-x    1 root     root        101532 Aug 29 23:05 /bin/opkg
> 
> root@OpenWrt2:~# opkg install
> /tmp/opkg_9c97d5ecd795709c8584e972bfdf3aee3a5b846d-9_ar71xx.ipk
> Upgrading opkg on root from 9c97d5ecd795709c8584e972bfdf3aee3a5b846d-8
> to 9c97d5ecd795709c8584e972bfdf3aee3a5b846d-9...
> Configuring opkg.
> 
> root@OpenWrt2:~# ls -l /bin/opkg
> -rwxr-xr-x    1 root     root        101548 Aug 29 23:05 /bin/opkg
> 
> --size works as expected:
> (packages not from "packages" feed have been removed for clarity)
> 
> root@OpenWrt2:/tmp# opkg list j*
> jansson - 2.7-1 - Jansson is a C library for encoding, decoding and
> manipulating JSON data
> joe - 4.0-4 - Joe is world-famous Wordstar like text editor, that also
> features
>  Emacs and Pico emulation
> jpeg-tools - 9a-1 - The Independent JPEG Group's JPEG manipulation tools
> json4lua - 0.9.53-1 - JSON and JSONRPC for Lua
> 
> root@OpenWrt2:/tmp# opkg list --size j*
> jansson - 2.7-1 - 19182 - Jansson is a C library for encoding, decoding
> and manipulating JSON data
> joe - 4.0-4 - 173911 - Joe is world-famous Wordstar like text editor,
> that also features
>  Emacs and Pico emulation
> jpeg-tools - 9a-1 - 31188 - The Independent JPEG Group's JPEG
> manipulation tools
> json4lua - 0.9.53-1 - 7205 - JSON and JSONRPC for Lua
> 
> -------------
> https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/packages/packages/
> 
> 
> jansson_2.7-1_ar71xx.ipk                           26-Aug-2015
> 05:20               19182
> joe_4.0-4_ar71xx.ipk                               26-Aug-2015
> 05:20              173911
> jpeg-tools_9a-1_ar71xx.ipk                         26-Aug-2015
> 00:04               31188
> json4lua_0.9.53-1_ar71xx.ipk                       26-Aug-2015
> 05:21                7205
> 
> 
> 
> 
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
>
diff mbox

Patch

Index: package/system/opkg/Makefile
===================================================================
--- package/system/opkg/Makefile	(revision 46751)
+++ package/system/opkg/Makefile	(working copy)
@@ -1,5 +1,5 @@ 
 #
-# Copyright (C) 2006-2014 OpenWrt.org
+# Copyright (C) 2006-2015 OpenWrt.org
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -12,7 +12,7 @@ 
 PKG_NAME:=opkg
 PKG_REV:=9c97d5ecd795709c8584e972bfdf3aee3a5b846d
 PKG_VERSION:=$(PKG_REV)
-PKG_RELEASE:=8
+PKG_RELEASE:=9
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_VERSION:=$(PKG_REV)
Index: package/system/opkg/patches/250-add-print-package-size.patch
===================================================================
--- package/system/opkg/patches/250-add-print-package-size.patch	(revision 0)
+++ package/system/opkg/patches/250-add-print-package-size.patch	(working copy)
@@ -0,0 +1,74 @@ 
+--- a/libopkg/opkg_conf.c
++++ b/libopkg/opkg_conf.c
+@@ -69,6 +69,7 @@ opkg_option_t options[] = {
+ 	  { "proxy_passwd", OPKG_OPT_TYPE_STRING, &_conf.proxy_passwd },
+ 	  { "proxy_user", OPKG_OPT_TYPE_STRING, &_conf.proxy_user },
+ 	  { "query-all", OPKG_OPT_TYPE_BOOL, &_conf.query_all },
++	  { "size", OPKG_OPT_TYPE_BOOL, &_conf.size },
+ 	  { "tmp_dir", OPKG_OPT_TYPE_STRING, &_conf.tmp_dir },
+ 	  { "verbosity", OPKG_OPT_TYPE_INT, &_conf.verbosity },
+ #if defined(HAVE_OPENSSL)
+--- a/libopkg/opkg_conf.h
++++ b/libopkg/opkg_conf.h
+@@ -88,6 +88,7 @@ struct opkg_conf
+      int query_all;
+      int verbosity;
+      int noaction;
++     int size;
+      int download_only;
+      char *cache;
+ 
+--- a/src/opkg-cl.c
++++ b/src/opkg-cl.c
+@@ -52,6 +52,7 @@ enum {
+ 	ARGS_OPT_AUTOREMOVE,
+ 	ARGS_OPT_CACHE,
+ 	ARGS_OPT_FORCE_SIGNATURE,
++	ARGS_OPT_SIZE,
+ };
+ 
+ static struct option long_options[] = {
+@@ -98,6 +99,7 @@ static struct option long_options[] = {
+ 	{"offline-root", 1, 0, 'o'},
+ 	{"add-arch", 1, 0, ARGS_OPT_ADD_ARCH},
+ 	{"add-dest", 1, 0, ARGS_OPT_ADD_DEST},
++	{"size", 0, 0, ARGS_OPT_SIZE},
+ 	{"test", 0, 0, ARGS_OPT_NOACTION},
+ 	{"tmp-dir", 1, 0, 't'},
+ 	{"tmp_dir", 1, 0, 't'},
+@@ -207,6 +209,9 @@ args_parse(int argc, char *argv[])
+ 			}
+ 			free(tuple);
+ 			break;
++		case ARGS_OPT_SIZE:
++			conf->size = 1;
++			break;
+ 		case ARGS_OPT_NOACTION:
+ 			conf->noaction = 1;
+ 			break;
+@@ -310,6 +315,7 @@ usage()
+ 	printf("\t--download-only	No action -- download only\n");
+ 	printf("\t--nodeps		Do not follow dependencies\n");
+ 	printf("\t--nocase		Perform case insensitive pattern matching\n");
++	printf("\t--size			Print package size when listing available packages\n");
+ 	printf("\t--force-removal-of-dependent-packages\n");
+ 	printf("\t			Remove package and all dependencies\n");
+ 	printf("\t--autoremove		Remove packages that were installed\n");
+--- a/libopkg/opkg_cmd.c
++++ b/libopkg/opkg_cmd.c
+@@ -47,10 +47,12 @@ static void
+ print_pkg(pkg_t *pkg)
+ {
+ 	char *version = pkg_version_str_alloc(pkg);
++	printf("%s - %s", pkg->name, version);
++	if (conf->size)
++		printf(" - %lu", pkg->size);
+ 	if (pkg->description)
+-		printf("%s - %s - %s\n", pkg->name, version, pkg->description);
+-	else
+-		printf("%s - %s\n", pkg->name, version);
++		printf(" - %s", pkg->description);
++	printf("\n");
+ 	free(version);
+ }
+