+static int write_archive_type(const char *format, const char *hex, const char *prefix)
+{
+ struct argv_array argv = ARGV_ARRAY_INIT;
+ argv_array_push(&argv, format);
+ if (prefix) {
+ argv_array_push(&argv, "--prefix");
+ argv_array_push(&argv, fmt("%s/", prefix));
+ }
+ argv_array_push(&argv, hex);
+ return write_archive(argv.argc, argv.argv, NULL, 1, NULL, 0);
+}
+
+static int write_tar_archive(const char *hex, const char *prefix)
+{
+ return write_archive_type("--format=tar", hex, prefix);
+}
+
+static int write_zip_archive(const char *hex, const char *prefix)
+{
+ return write_archive_type("--format=zip", hex, prefix);
+}
+
+static int write_compressed_tar_archive(const char *hex,
+ const char *prefix,
+ char *filter_argv[])