From: Eric Biggers Date: Thu, 25 Apr 2013 00:58:07 +0000 (-0500) Subject: Fix capturing non-directories in source list mode X-Git-Tag: v1.3.3~47 X-Git-Url: https://wimlib.net/git/?p=wimlib;a=commitdiff_plain;h=3e7f9503cec2df67295fa878f5a6230ad3871160 Fix capturing non-directories in source list mode --- diff --git a/src/add_image.c b/src/add_image.c index b50b05b5..2a7f938e 100644 --- a/src/add_image.c +++ b/src/add_image.c @@ -256,11 +256,6 @@ unix_build_dentry_tree_recursive(struct wim_dentry **root_ret, struct wim_inode *inode; if (exclude_path(path, path_len, params->config, true)) { - if (params->add_image_flags & WIMLIB_ADD_IMAGE_FLAG_ROOT) { - ERROR("Cannot exclude the root directory from capture"); - ret = WIMLIB_ERR_INVALID_CAPTURE_CONFIG; - goto out; - } if ((params->add_image_flags & WIMLIB_ADD_IMAGE_FLAG_EXCLUDE_VERBOSE) && params->progress_func) { @@ -388,7 +383,9 @@ unix_build_dentry_tree(struct wim_dentry **root_ret, return WIMLIB_ERR_STAT; } - if (!S_ISDIR(root_stbuf.st_mode)) { + if ((params->add_image_flags & WIMLIB_ADD_IMAGE_FLAG_ROOT) && + !S_ISDIR(root_stbuf.st_mode)) + { ERROR("Root of capture \"%s\" is not a directory", root_disk_path); return WIMLIB_ERR_NOTDIR; diff --git a/tests/test-imagex-capture_and_apply b/tests/test-imagex-capture_and_apply index ce54c74a..90145e30 100755 --- a/tests/test-imagex-capture_and_apply +++ b/tests/test-imagex-capture_and_apply @@ -114,6 +114,7 @@ if [ -e out.dir/hiberfil.sys -o -e "out.dir/System Volume Information" ]; then error "Files were not excluded from capture as expected" fi +# Make sure reparse point fixups are working as expected __msg "Testing --rpfix" rm -r in.dir out.dir mkdir in.dir @@ -151,6 +152,46 @@ then error "imagex apply failed to apply fixed absolute symlinks" fi +# Make sure source list mode is working as expected +rm -rf in.dir out.dir +mkdir in.dir +echo 1 > in.dir/1 +ln in.dir/1 in.dir/1link +echo 5 > 5 +mkdir otherdir +cp $srcdir/src/add_image.c otherdir +cat > srclist << EOF +in.dir / +5 /5 +otherdir /otherdir +EOF +imagex capture srclist --source-list test.wim +imagex apply test.wim out.dir +if [[ ! -f out.dir/5 || ! -f out.dir/1 || ! -f out.dir/1link || \ + ! -d out.dir/otherdir ]]; then + error "source list capture failed to work as expected" +fi + +# Still testing source list capture: add quoted name, and try overlay +rm -rf out.dir +cat > srclist << EOF +in.dir / +5 /5 +otherdir /otherdir + "overlay dir 1" 'otherdir' + "overlay dir 2" 'otherdir' +EOF +mkdir "overlay dir 1" +mkdir "overlay dir 2" +echo A > "overlay dir 1"/A +echo B > "overlay dir 2"/B +imagex capture srclist --source-list test.wim +imagex apply test.wim out.dir +if [[ ! -f out.dir/5 || ! -f out.dir/1 || ! -f out.dir/1link || \ + ! -f out.dir/otherdir/A || ! -f out.dir/otherdir/B ]]; then + error "source list capture (with quoted names and overlay) failed to work as expected" +fi + echo "**********************************************************" echo " imagex capture/apply tests passed " echo "**********************************************************"