@@ -337,36 +337,17 @@ let copy_file_aux ?chmod ~src ~dst () =
337337 (try Unix. unlink dst with Unix. Unix_error _ -> () );
338338 internal_error " Cannot copy %s to %s (%s)." src dst (Printexc. to_string e)
339339
340- let chdir dir =
341- try Unix. chdir dir
342- with Unix. Unix_error _ -> raise (File_not_found dir)
343-
344- let in_dir dir fn =
345- let reset_cwd =
346- let cwd =
347- try Some (Sys. getcwd () )
348- with Sys_error _ -> None in
349- fun () ->
350- match cwd with
351- | None -> ()
352- | Some cwd -> try chdir cwd with File_not_found _ -> () in
353- chdir dir;
354- try
355- let r = fn () in
356- reset_cwd () ;
357- r
358- with e ->
359- OpamStd.Exn. finalise e reset_cwd
360-
361340let list kind dir =
362- try
363- in_dir dir (fun () ->
364- let d = Sys. readdir (Sys. getcwd () ) in
365- let d = Array. to_list d in
366- let l = List. filter kind d in
367- List. map (Filename. concat dir) (List. sort compare l)
368- )
369- with File_not_found _ -> []
341+ let d = try Sys. readdir dir with Sys_error _ -> [||] in
342+ let filtered =
343+ Array. fold_left
344+ (fun acc base ->
345+ let path = Filename. concat dir base in
346+ if kind path then path::acc else acc)
347+ []
348+ d
349+ in
350+ List. sort String. compare filtered
370351
371352let ls dir = list (fun _ -> true ) dir
372353
@@ -433,10 +414,6 @@ let with_tmp_dir fn =
433414 OpamStd.Exn. finalise e @@ fun () ->
434415 remove_dir dir
435416
436- let in_tmp_dir fn =
437- with_tmp_dir @@ fun dir ->
438- in_dir dir fn
439-
440417let with_tmp_dir_job fjob =
441418 let dir = mk_temp_dir () in
442419 mkdir dir;
@@ -573,7 +550,7 @@ let make_command
573550 | `Denied -> permission_denied cmd
574551
575552let run_process
576- ?verbose ?env ~name ?metadata ?stdout ?allow_stdin command =
553+ ?verbose ?env ~name ?metadata ?dir ? stdout ?allow_stdin command =
577554 let env = match env with None -> OpamProcess. default_env () | Some e -> e in
578555 let chrono = OpamConsole. timer () in
579556 match command with
@@ -588,7 +565,7 @@ let run_process
588565 let r =
589566 OpamProcess. run
590567 (OpamProcess. command
591- ~env ~name ~verbose ?metadata ?allow_stdin ?stdout
568+ ~env ~name ~verbose ?metadata ?dir ? allow_stdin ?stdout
592569 full_cmd args)
593570 in
594571 let str = String. concat " " (cmd :: args) in
@@ -599,15 +576,15 @@ let run_process
599576 | `Not_found -> command_not_found cmd
600577 | `Denied -> permission_denied cmd
601578
602- let command ?verbose ?env ?name ?metadata ?allow_stdin cmd =
579+ let command ?verbose ?env ?name ?metadata ?dir ? allow_stdin cmd =
603580 let name = log_file name in
604- let r = run_process ?verbose ?env ~name ?metadata ?allow_stdin cmd in
581+ let r = run_process ?verbose ?env ~name ?metadata ?dir ? allow_stdin cmd in
605582 OpamProcess. cleanup r;
606583 raise_on_process_error r
607584
608- let commands ?verbose ?env ?name ?metadata ?(keep_going =false ) commands =
585+ let commands ?verbose ?env ?name ?metadata ?dir ? (keep_going =false ) commands =
609586 let name = log_file name in
610- let run = run_process ?verbose ?env ~name ?metadata in
587+ let run = run_process ?verbose ?env ~name ?metadata ?dir in
611588 let command r0 c =
612589 match r0, keep_going with
613590 | (`Error _ | `Exception _ ), false -> r0
@@ -625,12 +602,12 @@ let commands ?verbose ?env ?name ?metadata ?(keep_going=false) commands =
625602 | `Error e -> process_error e
626603 | `Exception e -> raise e
627604
628- let read_command_output ?verbose ?env ?metadata ?allow_stdin
605+ let read_command_output ?verbose ?env ?metadata ?dir ? allow_stdin
629606 ?(ignore_stderr =false ) cmd =
630607 let name = log_file None in
631608 let stdout = name ^ (if ignore_stderr then " .stdout" else " .out" ) in
632609 let r =
633- run_process ?verbose ?env ~name ?metadata ?allow_stdin
610+ run_process ?verbose ?env ~name ?metadata ?dir ? allow_stdin
634611 ~stdout
635612 cmd
636613 in
0 commit comments