X-Git-Url: http://git.annexia.org/?p=virt-mem.git;a=blobdiff_plain;f=extract%2Ffedora-koji%2Ffedora_koji_download_kernels.ml;h=df12f66d15d192b1f65c5a97b6783f37b7cd484d;hp=57abfd3471a50f1793f51b263bd39246a4589483;hb=9392e738c4c65284145e50644d463fc0aa05bbad;hpb=03dcc62ed37ff0160f211927196e48033a6aeb81 diff --git a/extract/fedora-koji/fedora_koji_download_kernels.ml b/extract/fedora-koji/fedora_koji_download_kernels.ml index 57abfd3..df12f66 100644 --- a/extract/fedora-koji/fedora_koji_download_kernels.ml +++ b/extract/fedora-koji/fedora_koji_download_kernels.ml @@ -223,32 +223,37 @@ let main outputdir = contains_debuginfo name && not (contains_common name) ) rpms in - List.iter ( - fun rpm -> + let nr_rpms = List.length rpms in + + List.iteri ( + fun j rpm -> let uri, filename = koji_rpm_download_url rpm in - let infofile = outputdir // filename ^ ".info" in + let infoname = filename ^ ".info" in + let infopath = outputdir // infoname in let infoexists = - try ignore (Unix.access infofile [Unix.F_OK]); true + try ignore (Unix.access infopath [Unix.F_OK]); true with Unix.Unix_error _ -> false in if infoexists then printf "Skipping %s\n%!" (string_of_rpm rpm) else ( - printf "%s\n%!" (string_of_rpm rpm); + printf "%d/%d %d/%d %s\n%!" + (i+1) nr_builds (j+1) nr_rpms (string_of_rpm rpm); let run cmd = let r = Sys.command cmd in if r <> 0 then failwith (sprintf "%s: command exited with code %d" cmd r) in + let run cmd = ksprintf run cmd in (* Function to clean up the RPM & the temporary subdirectory * (usr/, used for unpacking the RPM). *) let cleanup () = (try Unix.unlink filename with _ -> ()); - ignore (Sys.command "rm -rf usr/") + ignore (Sys.command "rm -rf *.info *.data usr") in cleanup (); @@ -263,19 +268,19 @@ let main outputdir = * than it's worth. So shell out to 'wget' instead. *) printf "Downloading RPM ...\n%!"; - run (sprintf "wget --quiet %s" (Filename.quote uri)); + run "wget --quiet %s" (Filename.quote uri); printf "Finished downloading RPM.\n%!"; (* Unpack vmlinux binary from the RPM. *) - run (sprintf "rpm2cpio %s | cpio -id --quiet '*/vmlinux'" - (Filename.quote filename)); + run "rpm2cpio %s | cpio -id --quiet '*/vmlinux'" + (Filename.quote filename); - run (sprintf "find usr/ -name vmlinux -print0 | - xargs -0 pahole -E > %s.data" - (Filename.quote outputdir // Filename.quote filename)); + run "find usr/ -name vmlinux -print0 | + xargs -0 pahole -E > %s.data" + (Filename.quote filename); - let chan = open_out infofile in + let chan = open_out infoname in fprintf chan "Source: fedora-koji\n"; fprintf chan "Distribution: Fedora\n"; fprintf chan "RPM_id: %d\n" rpm.rpm_id; @@ -288,8 +293,17 @@ let main outputdir = fprintf chan "\n"; close_out chan; - run (sprintf "rpm -qip %s >> %s" - (Filename.quote filename) (Filename.quote infofile)); + run "rpm -qip %s >> %s" + (Filename.quote filename) (Filename.quote infoname); + + (* Atomically move the info & data files to their final + * destination. + *) + run "mv %s.data %s.data" + (Filename.quote filename) + (Filename.quote (outputdir // filename)); + run "mv %s %s" + (Filename.quote infoname) (Filename.quote infopath); ) () with Failure msg ->