|
|
@@ -0,0 +1,55 @@
|
|
|
+diff --git a/doc/apk.8.scd b/doc/apk.8.scd
|
|
|
+index bd15fe75d7a4..cbac8c6c8b7b 100644
|
|
|
+--- a/doc/apk.8.scd
|
|
|
++++ b/doc/apk.8.scd
|
|
|
+@@ -461,7 +461,8 @@ timeout 120
|
|
|
+ */lib/apk/db/installed*
|
|
|
+ Database of installed packages and their contents.
|
|
|
+
|
|
|
+-*/lib/apk/db/scripts.tar*
|
|
|
++*/lib/apk/db/scripts.tar*++
|
|
|
++*/lib/apk/db/scripts.tar.gz*
|
|
|
+ Collection of all package scripts from currently installed packages.
|
|
|
+
|
|
|
+ */lib/apk/db/triggers*
|
|
|
+diff --git a/src/apk_database.h b/src/apk_database.h
|
|
|
+index 9f8670ac8ebb..10f1414c9e06 100644
|
|
|
+--- a/src/apk_database.h
|
|
|
++++ b/src/apk_database.h
|
|
|
+@@ -202,6 +202,7 @@ struct apk_database {
|
|
|
+ unsigned int compat_depversions : 1;
|
|
|
+ unsigned int sorted_names : 1;
|
|
|
+ unsigned int sorted_installed_packages : 1;
|
|
|
++ unsigned int scripts_tar : 1;
|
|
|
+
|
|
|
+ struct apk_dependency_array *world;
|
|
|
+ struct apk_id_cache *id_cache;
|
|
|
+diff --git a/src/database.c b/src/database.c
|
|
|
+index cbe58ebbf885..cb1b709140af 100644
|
|
|
+--- a/src/database.c
|
|
|
++++ b/src/database.c
|
|
|
+@@ -1255,8 +1255,11 @@ static int apk_db_read_layer(struct apk_database *db, unsigned layer)
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!(flags & APK_OPENF_NO_SCRIPTS)) {
|
|
|
+- r = apk_tar_parse(apk_istream_from_file(fd, "scripts.tar"),
|
|
|
+- apk_read_script_archive_entry, db, db->id_cache);
|
|
|
++ struct apk_istream *is = apk_istream_from_file(fd, "scripts.tar");
|
|
|
++ if (!IS_ERR(is) || PTR_ERR(is) != -ENOENT) db->scripts_tar = 1;
|
|
|
++ else is = apk_istream_gunzip(apk_istream_from_file(fd, "scripts.tar.gz"));
|
|
|
++
|
|
|
++ r = apk_tar_parse(is, apk_read_script_archive_entry, db, db->id_cache);
|
|
|
+ if (!ret && r != -ENOENT) ret = r;
|
|
|
+ }
|
|
|
+
|
|
|
+@@ -2128,8 +2131,9 @@ static int apk_db_write_layers(struct apk_database *db)
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ ld->installed = apk_ostream_to_file(ld->fd, "installed", 0644);
|
|
|
+- ld->scripts = apk_ostream_to_file(ld->fd, "scripts.tar", 0644);
|
|
|
+ ld->triggers = apk_ostream_to_file(ld->fd, "triggers", 0644);
|
|
|
++ if (db->scripts_tar) ld->scripts = apk_ostream_to_file(ld->fd, "scripts.tar", 0644);
|
|
|
++ else ld->scripts = apk_ostream_gzip(apk_ostream_to_file(ld->fd, "scripts.tar.gz", 0644));
|
|
|
+
|
|
|
+ if (i == APK_DB_LAYER_ROOT)
|
|
|
+ os = apk_ostream_to_file(db->root_fd, apk_world_file, 0644);
|