100
100
%%% (tool-internal use only).
102
102
make_last_run_index(),
104
ct_event:notify(#event{name=stop_logging,node=node(),data=[]}),
106
case whereis(?MODULE) of
108
MRef = erlang:monitor(process,Pid),
111
{'DOWN',MRef,process,_,_} ->
103
118
if How == clean ->
104
119
case cleanup() of
111
126
file:set_cwd("..")
113
129
make_all_suites_index(stop),
114
130
make_all_runs_index(stop),
115
ct_event:notify(#event{name=stop_logging,node=node(),data=[]}),
116
case whereis(?MODULE) of
118
MRef = erlang:monitor(process,Pid),
121
{'DOWN',MRef,process,_,_} ->
129
134
%%%-----------------------------------------------------------------
384
389
-record(logger_state,{log_dir,start_time,orig_GL,ct_log_fd,current_fd,stylesheet}).
385
390
logger(Parent,Mode) ->
386
391
register(?MODULE,self()),
387
Time = calendar:local_time(),
388
Dir = make_dirname(Time),
393
%%! Below is a temporary workaround for the limitation of
394
%%! max one test run per second.
396
Time0 = calendar:local_time(),
397
Dir0 = make_dirname(Time0),
399
case filelib:is_dir(Dir0) of
402
Time1 = calendar:local_time(),
403
Dir1 = make_dirname(Time1),
389
411
file:make_dir(Dir),
390
412
ct_event:notify(#event{name=start_logging,node=node(),
391
413
data=?abs(Dir)}),
1261
1283
[[$c,$t,$_,$r,$u,$n,$.|_]|_] ->
1262
1284
case filelib:wildcard(filename:join(CTRunDir,"ct_run.*")) of
1263
1285
[] -> % "double check"
1264
delete_dir(CTRunDir);
1273
{ok,Files} = file:list_dir(Dir),
1274
recursive_delete(Files,Dir).
1295
case file:list_dir(Dir) of
1297
exit({ls_failed,Dir,Errno});
1299
rm_files([filename:join(Dir, F) || F <- Files]),
1300
case file:del_dir(Dir) of
1302
exit({rmdir_failed,Errno});
1276
recursive_delete(["."|Files],Dir) ->
1277
recursive_delete(Files,Dir);
1278
recursive_delete(["../"|Files],Dir) ->
1279
recursive_delete(Files,Dir);
1280
recursive_delete([File|Files],Dir) ->
1281
ok = file:set_cwd(Dir),
1282
case file:read_file_info(File) of
1283
{ok,#file_info{type=directory}} ->
1284
ok = file:set_cwd(File),
1285
{ok,Fs} = file:list_dir("."),
1286
recursive_delete(Fs,?abs("."));
1287
{ok,_Regular} -> % leaf = file
1288
ok = file:delete(File)
1290
recursive_delete(Files,Dir);
1291
recursive_delete([],Dir) -> % leaf = dir
1292
ok = file:set_cwd("../"),
1293
ok = file:del_dir(Dir).
1308
rm_files([F | Fs]) ->
1309
Base = filename:basename(F),
1310
if Base == "." ; Base == ".." ->
1313
case file:read_file_info(F) of
1314
{ok,#file_info{type=directory}} ->
1318
case file:delete(F) of
1322
exit({del_failed,F,Errno})
1296
1329
%%%-----------------------------------------------------------------
1297
1330
%%% @spec simulate() -> pid()