123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960(*********************************************************************************)(* Ojs-base *)(* *)(* Copyright (C) 2014-2021 INRIA. All rights reserved. *)(* *)(* This program is free software; you can redistribute it and/or modify *)(* it under the terms of the GNU General Public License as *)(* published by the Free Software Foundation, version 3 of the License. *)(* *)(* This program is distributed in the hope that it will be useful, *)(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *)(* GNU Library General Public License for more details. *)(* *)(* You should have received a copy of the GNU General Public *)(* License along with this program; if not, write to the Free Software *)(* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA *)(* 02111-1307 USA *)(* *)(* As a special exception, you have permission to link this program *)(* with the OCaml compiler and distribute executables, as long as you *)(* follow the requirements of the GNU GPL in regard to all of the *)(* software in the executable aside from the OCaml compiler. *)(* *)(* Contact: Maxence.Guesdon@inria.fr *)(* *)(*********************************************************************************)(** *)letis_dirfile=(Unix.statfile).Unix.st_kind=Unix.S_DIRletfile_trees_of_dir?(filepred=fun_->true)root_dir=letroot_dir=Ojs_base.Path.to_stringroot_dirinletbases=Filename.basenamesinletfilepreds=filepred(Ojs_base.Path.of_strings)inletreciterdir=letentries=Find.find_listFind.Stderr[dir][Find.Maxdepth1;Find.Predicatefilepred;]inletpreds=s<>dir&&(Filename.basenames<>Filename.current_dir_name)&&(Filename.basenames<>Filename.parent_dir_name)inletentries=List.filterpredentriesinletentries=List.sortString.compareentriesinlet(dirs,files)=List.partitionis_direntriesinletdirs=`Dir(bases,iters)inletfiles=`File(bases,Magic_mime.lookups)in(List.mapdirdirs)@(List.mapfilefiles)initerroot_dir