On Thu, Aug 21, 2014 at 05:09:13PM +0300, Shahar Havivi wrote: [...] You'll also need to update documentation (v2v/virt-v2v.pod) and maybe add a test if it is possible to test this without carrying around huge/proprietary files.
+ (* verify sha1 from manifest file *) + let mf = dir // !mf in + let rex = Str.regexp "SHA1(\\(.*\\))= *\\(.*?\\).*$" in + let lines = read_whole_file mf in
In here, add: let lines = string_nsplit "\n" lines in and replace the (Str.split ... lines) with just lines (after List.iter).
+ List.iter ( + fun line -> + if Str.string_match rex line 0 then + let file = Str.matched_group 1 line in + let sha1 = Str.matched_group 2 line in + + let cmd = sprintf "sha1sum %s" (quote(dir // file)) in
Might be easier to use: let cmd = sprintf "sha1sum %s | awk '{print $1}'" (quote (dir // file)) in
+ let out = external_command ~prog cmd in
and then: (match out with | [] -> error (f_"no output from sha1sum command, see previous errors") | [line] -> let len = String.length sha1 in let line = if len > 0 && sha1.[len-1] = '\n' then String.sub sha1 0 (len-1) else line in if line <> sha1 then error (f_"Checksum of %s does not match manifest sha1 %s") file sha1; | _::_ -> error (f_"cannot parse output of sha1sum command") ); Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org