blob: 1cd518bd91b48231fb427258eeb78fb0cb3ef097 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
// file : bpkg/utility.cxx -*- C++ -*-
// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd
// license : MIT; see accompanying LICENSE file
#include <bpkg/utility>
#include <system_error>
#include <butl/process>
#include <butl/filesystem>
#include <bpkg/types>
#include <bpkg/diagnostics>
using namespace std;
using namespace butl;
namespace bpkg
{
bool
exists (const path& f)
{
try
{
return file_exists (f);
}
catch (const system_error& e)
{
error << "unable to stat path " << f << ": " << e.what ();
throw failed ();
}
}
bool
exists (const dir_path& d)
{
try
{
return file_exists (d);
}
catch (const system_error& e)
{
error << "unable to stat path " << d << ": " << e.what ();
throw failed ();
}
}
bool
empty (const dir_path& d)
{
try
{
dir_iterator i (d);
return i == end (i);
}
catch (const system_error& e)
{
error << "unable to scan directory " << d << ": " << e.what ();
throw failed ();
}
}
void
mk (const dir_path& d)
{
try
{
try_mkdir (d);
}
catch (const system_error& e)
{
fail << "unable to create directory " << d << ": " << e.what ();
}
}
void
mk_p (const dir_path& d)
{
try
{
try_mkdir_p (d);
}
catch (const system_error& e)
{
fail << "unable to create directory " << d << ": " << e.what ();
}
}
void
rm_r (const dir_path& d, bool dir)
{
try
{
rmdir_r (d, dir);
}
catch (const system_error& e)
{
fail << "unable to remove " << (dir ? "" : "contents of ")
<< "directory " << d << ": " << e.what ();
}
}
void
run (const char* const args[])
{
if (verb >= 2)
print_process (args);
try
{
process pr (args);
if (!pr.wait ())
throw failed (); // Assume the child issued diagnostics.
}
catch (const process_error& e)
{
error << "unable to execute " << args[0] << ": " << e.what ();
if (e.child ())
exit (1);
throw failed ();
}
}
}
|