~rdoering/ubuntu/karmic/erlang/fix-535090

« back to all changes in this revision

Viewing changes to lib/common_test/src/ct_logs.erl

  • Committer: Bazaar Package Importer
  • Author(s): Sergei Golovan
  • Date: 2009-02-15 16:42:52 UTC
  • mfrom: (3.1.2 squeeze)
  • Revision ID: james.westby@ubuntu.com-20090215164252-q5x4rcf8a5pbesb1
Tags: 1:12.b.5-dfsg-2
Upload to unstable after lenny is released.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
%%<copyright>
2
 
%% <year>2003-2007</year>
 
2
%% <year>2003-2008</year>
3
3
%% <holder>Ericsson AB, All Rights Reserved</holder>
4
4
%%</copyright>
5
5
%%<legalnotice>
100
100
%%% (tool-internal use only).
101
101
close(How) ->
102
102
    make_last_run_index(),
 
103
 
 
104
    ct_event:notify(#event{name=stop_logging,node=node(),data=[]}),
 
105
 
 
106
    case whereis(?MODULE) of
 
107
        Pid when pid(Pid) ->
 
108
            MRef = erlang:monitor(process,Pid),
 
109
            ?MODULE ! stop,
 
110
            receive
 
111
                {'DOWN',MRef,process,_,_} ->
 
112
                    ok
 
113
            end;
 
114
        undefined ->
 
115
            ok
 
116
    end,
 
117
 
103
118
    if How == clean ->
104
119
            case cleanup() of
105
120
                ok ->
110
125
       true -> 
111
126
            file:set_cwd("..")
112
127
    end,       
 
128
 
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
117
 
        Pid when pid(Pid) ->
118
 
            MRef = erlang:monitor(process,Pid),
119
 
            ?MODULE ! stop,
120
 
            receive
121
 
                {'DOWN',MRef,process,_,_} ->
122
 
                    ok
123
 
            end;
124
 
        undefined ->
125
 
            ok
126
 
    end,
 
131
 
127
132
    ok.
128
133
 
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),
 
392
 
 
393
    %%! Below is a temporary workaround for the limitation of
 
394
    %%! max one test run per second. 
 
395
    %%! --->
 
396
    Time0 = calendar:local_time(),
 
397
    Dir0 = make_dirname(Time0),
 
398
    {Time,Dir} = 
 
399
        case filelib:is_dir(Dir0) of
 
400
            true ->
 
401
                timer:sleep(1000),
 
402
                Time1 = calendar:local_time(),
 
403
                Dir1 = make_dirname(Time1),
 
404
 
 
405
                {Time1,Dir1};
 
406
            false ->
 
407
                {Time0,Dir0}
 
408
        end,
 
409
    %%! <---
 
410
 
389
411
    file:make_dir(Dir),
390
412
    ct_event:notify(#event{name=start_logging,node=node(),
391
413
                           data=?abs(Dir)}),
1248
1270
            ok ->
1249
1271
                ok;
1250
1272
            {'EXIT',Reason} ->
1251
 
                {error,{cleanup_failed,Reason}};
 
1273
                {error,Reason};
1252
1274
            Error ->
1253
 
                {error,{cleanup_failed,Error}}
 
1275
                {error,Error}
1254
1276
        end,
1255
1277
    ok = file:set_cwd(Top),
1256
1278
    Result.
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);
 
1286
                    rm_dir(CTRunDir);
1265
1287
                _ ->
1266
1288
                    unknown_logdir
1267
1289
            end;
1269
1291
            unknown_logdir
1270
1292
    end.
1271
1293
 
1272
 
delete_dir(Dir) ->
1273
 
    {ok,Files} = file:list_dir(Dir),
1274
 
    recursive_delete(Files,Dir).
 
1294
rm_dir(Dir) ->
 
1295
    case file:list_dir(Dir) of
 
1296
        {error,Errno} ->
 
1297
            exit({ls_failed,Dir,Errno});
 
1298
        {ok,Files} ->
 
1299
            rm_files([filename:join(Dir, F) || F <- Files]),
 
1300
            case file:del_dir(Dir) of
 
1301
                {error,Errno} ->
 
1302
                    exit({rmdir_failed,Errno});
 
1303
                ok ->
 
1304
                    ok
 
1305
            end
 
1306
    end.
1275
1307
 
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)
1289
 
    end,
1290
 
    recursive_delete(Files,Dir);
1291
 
recursive_delete([],Dir) ->                     % leaf = dir
1292
 
    ok = file:set_cwd("../"),
1293
 
    ok = file:del_dir(Dir).
1294
 
    
 
1308
rm_files([F | Fs]) ->
 
1309
    Base = filename:basename(F),
 
1310
    if Base == "." ; Base == ".." ->
 
1311
            rm_files(Fs);
 
1312
       true ->
 
1313
            case file:read_file_info(F) of
 
1314
                {ok,#file_info{type=directory}} ->
 
1315
                    rm_dir(F),
 
1316
                    rm_files(Fs);
 
1317
                {ok,_Regular} ->
 
1318
                    case file:delete(F) of
 
1319
                        ok ->
 
1320
                            rm_files(Fs);
 
1321
                        {error,Errno} ->
 
1322
                            exit({del_failed,F,Errno})
 
1323
                    end
 
1324
            end
 
1325
    end;
 
1326
rm_files([]) ->
 
1327
    ok.    
1295
1328
 
1296
1329
%%%-----------------------------------------------------------------
1297
1330
%%% @spec simulate() -> pid()