]> wimlib.net Git - wimlib/blobdiff - programs/imagex.c
Fix completed_streams of write streams progress and update docs
[wimlib] / programs / imagex.c
index ce5ac8d5b947e9e515ec07ec190ca6957470ebca..9569a255cd2d1f90cfcab3dab469702f79488441 100644 (file)
@@ -119,7 +119,6 @@ static FILE *imagex_info_file;
 enum {
        IMAGEX_ALLOW_OTHER_OPTION,
        IMAGEX_BOOT_OPTION,
-       IMAGEX_CASE_INSENSITIVE_WILDCARDS_OPTION,
        IMAGEX_CHECK_OPTION,
        IMAGEX_CHUNK_SIZE_OPTION,
        IMAGEX_COMMAND_OPTION,
@@ -257,7 +256,6 @@ static const struct option extract_options[] = {
        {T("include-invalid-names"), no_argument, NULL, IMAGEX_INCLUDE_INVALID_NAMES_OPTION},
        {T("strict-wildcards"), no_argument,  NULL, IMAGEX_STRICT_WILDCARDS_OPTION},
        {T("no-wildcards"), no_argument,      NULL, IMAGEX_NO_WILDCARDS_OPTION},
-       {T("case-insensitive-wildcards"), no_argument, NULL, IMAGEX_CASE_INSENSITIVE_WILDCARDS_OPTION},
        {NULL, 0, NULL, 0},
 };
 
@@ -1081,7 +1079,7 @@ report_scan_progress(const struct wimlib_progress_info_scan *scan, bool done)
 
                unit_shift = get_unit(scan->num_bytes_scanned, &unit_name);
                imagex_printf(T("\r%"PRIu64" %"TS" scanned (%"PRIu64" files, "
-                               "%"PRIu64" directories)"),
+                               "%"PRIu64" directories)    "),
                              scan->num_bytes_scanned >> unit_shift,
                              unit_name,
                              scan->num_nondirs_scanned,
@@ -1103,16 +1101,22 @@ imagex_progress_func(enum wimlib_progress_msg msg,
                return 0;
        switch (msg) {
        case WIMLIB_PROGRESS_MSG_WRITE_STREAMS:
+               {
+                       static bool first = false;
+                       if (!first) {
+                               imagex_printf(T("Writing %"TS"-compressed data "
+                                               "using %u thread%"TS"\n"),
+                                             wimlib_get_compression_type_string(
+                                                       info->write_streams.compression_type),
+                                       info->write_streams.num_threads,
+                                       (info->write_streams.num_threads == 1) ? T("") : T("s"));
+                               first = true;
+                       }
+               }
                unit_shift = get_unit(info->write_streams.total_bytes, &unit_name);
                percent_done = TO_PERCENT(info->write_streams.completed_bytes,
                                          info->write_streams.total_bytes);
 
-               if (info->write_streams.completed_streams == 0) {
-                       imagex_printf(T("Writing %"TS"-compressed data using %u thread%"TS"\n"),
-                               wimlib_get_compression_type_string(info->write_streams.compression_type),
-                               info->write_streams.num_threads,
-                               (info->write_streams.num_threads == 1) ? T("") : T("s"));
-               }
                if (info->write_streams.total_parts <= 1) {
                        imagex_printf(T("\r%"PRIu64" %"TS" of %"PRIu64" %"TS" (uncompressed) "
                                "written (%u%% done)"),
@@ -1161,6 +1165,14 @@ imagex_progress_func(enum wimlib_progress_msg msg,
                        imagex_printf(T("\nWARNING: Excluding unsupported file or directory\n"
                                        "         \"%"TS"\" from capture\n"), info->scan.cur_path);
                        break;
+               case WIMLIB_SCAN_DENTRY_EXCLUDED_SYMLINK:
+                       imagex_printf(T("\nWARNING: Ignoring absolute symbolic link "
+                                       "with out-of-tree target:\n"
+                                       "           \"%"TS"\" => \"%"TS"\"\n"
+                                       "           (Use --norpfix to capture "
+                                       "absolute symbolic links as-is)\n"),
+                                       info->scan.cur_path, info->scan.symlink_target);
+                       break;
                }
                break;
        case WIMLIB_PROGRESS_MSG_SCAN_END:
@@ -1207,14 +1219,17 @@ imagex_progress_func(enum wimlib_progress_msg msg,
                        info->extract.target);
                break;
        case WIMLIB_PROGRESS_MSG_EXTRACT_TREE_BEGIN:
-               imagex_printf(T("Extracting "
-                         "\""WIMLIB_WIM_PATH_SEPARATOR_STRING"%"TS"\" from image %d (\"%"TS"\") "
-                         "in \"%"TS"\" to \"%"TS"\"\n"),
-                       info->extract.extract_root_wim_source_path,
-                       info->extract.image,
-                       info->extract.image_name,
-                       info->extract.wimfile_name,
-                       info->extract.target);
+               if (info->extract.extract_root_wim_source_path[0] != T('\0')) {
+                       imagex_printf(T("Extracting "
+                                 "\""WIMLIB_WIM_PATH_SEPARATOR_STRING"%"TS"\" "
+                                 "from image %d (\"%"TS"\") "
+                                 "in \"%"TS"\" to \"%"TS"\"\n"),
+                               info->extract.extract_root_wim_source_path,
+                               info->extract.image,
+                               info->extract.image_name,
+                               info->extract.wimfile_name,
+                               info->extract.target);
+               }
                break;
        case WIMLIB_PROGRESS_MSG_EXTRACT_STREAMS:
                percent_done = TO_PERCENT(info->extract.completed_bytes,
@@ -1543,7 +1558,7 @@ imagex_apply(int argc, tchar **argv, int cmd)
        const tchar *wimfile;
        const tchar *target;
        const tchar *image_num_or_name = NULL;
-       int extract_flags = WIMLIB_EXTRACT_FLAG_SEQUENTIAL;
+       int extract_flags = 0;
 
        STRING_SET(refglobs);
 
@@ -2705,7 +2720,7 @@ imagex_extract(int argc, tchar **argv, int cmd)
        const tchar *image_num_or_name;
        const tchar *pathlist;
        tchar *dest_dir = T(".");
-       int extract_flags = WIMLIB_EXTRACT_FLAG_SEQUENTIAL | WIMLIB_EXTRACT_FLAG_NORPFIX;
+       int extract_flags = WIMLIB_EXTRACT_FLAG_NORPFIX;
        int listfile_extract_flags = WIMLIB_EXTRACT_FLAG_GLOB_PATHS;
 
        STRING_SET(refglobs);
@@ -2750,9 +2765,6 @@ imagex_extract(int argc, tchar **argv, int cmd)
                case IMAGEX_NO_WILDCARDS_OPTION:
                        listfile_extract_flags &= ~WIMLIB_EXTRACT_FLAG_GLOB_PATHS;
                        break;
-               case IMAGEX_CASE_INSENSITIVE_WILDCARDS_OPTION:
-                       listfile_extract_flags |= WIMLIB_EXTRACT_FLAG_CASE_INSENSITIVE_GLOB;
-                       break;
                case IMAGEX_STRICT_WILDCARDS_OPTION:
                        listfile_extract_flags |= WIMLIB_EXTRACT_FLAG_STRICT_GLOB;
                        break;
@@ -3886,7 +3898,7 @@ T(
 ),
 [CMD_EXTRACT] =
 T(
-"    %"TS" WIMFILE (IMAGE_NUM | IMAGE_NAME) [PATH...]\n"
+"    %"TS" WIMFILE (IMAGE_NUM | IMAGE_NAME) ([PATH...] | @LISTFILE)\n"
 "                    [--check] [--ref=\"GLOB\"] [--no-acls] [--strict-acls]\n"
 "                    [--to-stdout] [--dest-dir=CMD_DIR]\n"
 "                    [--include-invalid-names]\n"
@@ -4091,8 +4103,26 @@ main(int argc, char **argv)
 
                }
        }
+
 #endif /* !__WIN32__ */
 
+       {
+               tchar *igcase = tgetenv(T("WIMLIB_IMAGEX_IGNORE_CASE"));
+               if (igcase != NULL) {
+                       if (!tstrcmp(igcase, T("no")) ||
+                           !tstrcmp(igcase, T("0")))
+                               init_flags |= WIMLIB_INIT_FLAG_DEFAULT_CASE_SENSITIVE;
+                       else if (!tstrcmp(igcase, T("yes")) ||
+                                !tstrcmp(igcase, T("1")))
+                               init_flags |= WIMLIB_INIT_FLAG_DEFAULT_CASE_INSENSITIVE;
+                       else {
+                               fprintf(stderr,
+                                       "WARNING: Ignoring unknown setting of "
+                                       "WIMLIB_IMAGEX_IGNORE_CASE\n");
+                       }
+               }
+       }
+
        /* Allow being invoked as wimCOMMAND (e.g. wimapply).  */
        cmd = CMD_NONE;
        if (!tstrncmp(invocation_name, T("wim"), 3) &&