1 |
package SWE::DB::VersionControl; |
2 |
use strict; |
3 |
|
4 |
sub new ($) { |
5 |
my $self = bless { |
6 |
added_directories => {}, |
7 |
added_files => {}, |
8 |
modified_files => {}, |
9 |
}, shift; |
10 |
return $self; |
11 |
} # new |
12 |
|
13 |
sub add_directory ($$) { |
14 |
my $self = shift; |
15 |
my $directory_name = shift; |
16 |
$self->{added_directories}->{$directory_name} = 1; |
17 |
} # add_directory |
18 |
|
19 |
sub add_file ($$) { |
20 |
my $self = shift; |
21 |
my $file_name = shift; |
22 |
$self->{added_files}->{$file_name} = 1; |
23 |
$self->{modified_files}->{$file_name} = 1; |
24 |
} # add_file |
25 |
|
26 |
sub write_file ($$) { |
27 |
my $self = shift; |
28 |
my $file_name = shift; |
29 |
$self->{modified_files}->{$file_name} = 1; |
30 |
} # write_file |
31 |
|
32 |
sub commit_changes ($$) { |
33 |
my $self = shift; |
34 |
my $msg = shift; |
35 |
|
36 |
for (sort {$a cmp $b} keys %{$self->{added_directories}}) { |
37 |
_system ('cvs', 'add', $_); |
38 |
} |
39 |
|
40 |
for (keys %{$self->{added_files}}) { |
41 |
_system ('cvs', 'add', '-kb', $_); |
42 |
} |
43 |
|
44 |
my @changed; |
45 |
for (keys %{$self->{modified_files}}) { |
46 |
push @changed, $_; |
47 |
} |
48 |
|
49 |
if (@changed) { |
50 |
_system ('cvs', 'ci', -m => $msg, @changed) |
51 |
or die "$0: commit_changes: $?"; |
52 |
} |
53 |
} # commit_changes |
54 |
|
55 |
sub _system (@) { |
56 |
return ((system join (' ', map {quotemeta $_} @_) . " > /dev/null") == 0); |
57 |
## If false, see $? for exit value of the program. |
58 |
## TODO: If false, log the stdout/stderr... |
59 |
} # _system |
60 |
|
61 |
|
62 |
1; |