[Libguestfs] [PATCH v2 3/4] sysprep: Add a new operation to remove editor backup files (RHBZ#1401320).

Richard W.M. Jones rjones at redhat.com
Wed Dec 14 16:43:33 UTC 2016


On Wed, Dec 14, 2016 at 05:32:20PM +0100, Pino Toscano wrote:
> On Wednesday, 14 December 2016 13:12:01 CET Richard W.M. Jones wrote:
> > Remove editor backup files such as *~ and *.bak wherever
> > they occur within the guest filesystem.
> > 
> > This also includes a test.
> > ---
> 
> Looks nice -- I have few notes below.
> 
> Also, should this operation include also the swap files that editors
> can leave while editing?
> 
> > +  let fses =
> > +    match g#inspect_get_type root with
> > +    | "hurd"
> > +    | "linux"
> > +    | "minix" -> unix_whitelist
> > +    | f when String.is_suffix f "bsd" -> unix_whitelist
> > +    | _ -> ["/"] in
> 
> There's a similar list also in customize/customize_run.ml for the
> `SSHInject operation -- I guess an helper function could be added to
> Common_utils.

Good idea.

> > +  List.iter (
> > +    fun fs ->
> > +      if g#is_dir ~followsymlinks:false fs then (
> > +        visit g#ocaml_handle fs (
> > +          fun dir filename { G.st_mode = mode } _ ->
> > +            match dir, filename, mode with
> > +            (* Ignore root directory and non-regular files. *)
> > +            | _, None, _ -> ()
> > +            | _, Some _, mode when not (is_reg mode) -> ()
> > +            | dir, Some filename, _ ->
> > +               (* Check the filename against all of the globs, and if it
> > +                * matches any then delete it.
> > +                *)
> > +               let matching glob = fnmatch glob filename [FNM_NOESCAPE] in
> > +               if List.exists matching globs then (
> 
> Considering the current globs are basically filename suffixes, wouldn't
> it be easier (and possibly faster too) to just check for them?
> 
>   let suffixes = [ ".bak"; "~" ] in
>   ...
>     if List.exists (String.is_suffix filename) suffixes then (
>       ...
> 
> This would be easier to extend also for filename prefixes, in case we
> need them, so for now the fnmatch usage can be avoided.

Emacs also uses .#* so I think it's better to leave the full
generality of wildcards available to us.  The main reason the
operation is slow is because of the roundtrips to the daemon.

> > +                 let path = full_path dir (Some filename) in
> > +                 g#rm_f path
> > +               )
> > +        )
> > +      )
> > +  ) fses
> > +
> > +let op = {
> > +  defaults with
> > +    name = "backup-files";
> > +    enabled_by_default = true;
> > +    heading = s_"Remove editor backup files from the guest";
> > +    pod_description = Some (
> > +      sprintf (f_"\
> > +The following files are removed from anywhere in the guest
> > +filesystem:
> > +
> > +%s
> > +
> > +On Linux and Unix operating systems, only the following filesystems
> > +will be examined:
> > +
> > +%s") globs_as_pod unix_whitelist_as_pod);
> > +    perform_on_filesystems = Some backup_files_perform;
> > +}
> > +
> > +let () = register_operation op
> > diff --git a/sysprep/test-virt-sysprep-backup-files.sh b/sysprep/test-virt-sysprep-backup-files.sh
> > new file mode 100755
> > index 0000000..bd9a36c
> > --- /dev/null
> > +++ b/sysprep/test-virt-sysprep-backup-files.sh
> > @@ -0,0 +1,64 @@
> > [...]
> > +guestfish -a test-backup-files.qcow2 -i <<'EOF'
> 
> Can you please specify --format qcow2 explicitly?

OK.

> > +# Check the file list is the same as above.
> > +guestfish -a test-backup-files.qcow2 -i find / > test-backup-files-after
> 
> Ditto.

OK.

Rich.


-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top




More information about the Libguestfs mailing list