From 8f0a03dbe5ab604db7c6e4d4468b62c674ad2024 Mon Sep 17 00:00:00 2001 From: Juan Wajnerman Date: Tue, 5 Nov 2013 23:22:58 -0300 Subject: [PATCH] Generate one file at a time (don't require ulimit change) --- Makefile | 1 - src/ezic_generator.erl | 27 ++++++++++++--------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index cb69e72..aa3c87f 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,5 @@ zones: mkdir -p priv/tzdata tar -xvzf tzdata-latest.tar.gz -C priv/tzdata rm tzdata-latest.tar.gz - ulimit -n 1024 erl -pa ebin -s ezic_generator generate -s erlang halt erlc -o ebin zones/*.erl diff --git a/src/ezic_generator.erl b/src/ezic_generator.erl index 935ce19..d3962fa 100644 --- a/src/ezic_generator.erl +++ b/src/ezic_generator.erl @@ -22,25 +22,20 @@ generate_links([#link{from = From, to = To} | Rest], MapFile) -> file:write(MapFile, io_lib:format("find(~p) -> find(~p);\n", [To, From])), generate_links(Rest, MapFile). -generate_zones([], _, Files) -> - lists:foreach(fun({_, File}) -> - file:write(File, "]."), - file:close(File) +generate_zones([], MapFile, Files) -> + lists:foreach(fun({ZoneName, Content}) -> + create_file(ZoneName, Content, MapFile) end, Files); generate_zones([FlatZone = #flatzone{tzname = Name} | Rest], MapFile, Files) -> - {File, NewFiles} = case orddict:find(Name, Files) of - error -> - IO = create_file(Name, MapFile), - {IO, orddict:store(Name, IO, Files)}; - {ok, IO} -> - file:write(IO, ",\n"), - {IO, Files} + Files2 = case orddict:is_key(Name, Files) of + true -> orddict:append(Name, ",\n", Files); + false -> Files end, - file:write(File, io_lib:format("~1000p", [FlatZone])), - generate_zones(Rest, MapFile, NewFiles). + Files3 = orddict:append(Name, io_lib:format("~1000p", [FlatZone]), Files2), + generate_zones(Rest, MapFile, Files3). -create_file(ZoneName, MapFile) -> +create_file(ZoneName, Content, MapFile) -> io:format("Creating file for zone ~p~n", [ZoneName]), ModuleName = "ezic_zone_" ++ re:replace(string:to_lower(ZoneName), "/", "_", [global, {return, list}]), FileName = "zones" ++ "/" ++ ModuleName ++ ".erl", @@ -49,4 +44,6 @@ create_file(ZoneName, MapFile) -> file:write(File, "-export([flatzones/0]).\n"), file:write(File, "flatzones() ->\n["), file:write(MapFile, io_lib:format("find(~p) -> ~p;\n", [ZoneName, list_to_atom(ModuleName)])), - File. + file:write(File, Content), + file:write(File, "]."), + file:close(File).