15 sa [options] [status|update|checkout] [directories to sync]
18 --quick, -Q don't update external projects
20 --debug, -d debugging level (Default 0)
21 --help, -h display this help
22 --man, -m display manual
30 Debug verbosity. (Default 0)
34 Display brief useage information.
52 my %options = (quick => 1,
59 GetOptions(\%options,'quick|Q+','quiet|q!','debug|d+','help|h|?','man|m');
61 pod2usage() if $options{help};
62 pod2usage({verbose=>2}) if $options{man};
64 # parse configuration file
68 Reads configuration information from Start by parsing /etc/sa.conf,
69 then the contents of ~/sa.d/ which match ^[\w\d][\w\d_-.]+$
71 The configuration file contains a list of svn repositories which
72 should be queried; each line can contain a tab, which indicates that
73 the command following the tab should be run after the svn directory is
76 The configuration files are read in the order given above.
80 sub parse_config_file {
81 my ($repos,$filename,$home) = @_;
82 return unless -e $filename and -r _;
83 my $fh = new IO::File $filename, 'r' or die "Unable to read configuration file $filename $!";
87 my ($repo,$command) = split /\t/,$_,2;
88 $repo =~ s/^\~/$home/;
89 $command =~ s/^\~/$home/ if defined $command;
90 $$repos{$repo} = $command;
95 my $HOSTNAME=qx(hostname);
97 my $CAN_IGNORE_EXTERNALS = 0;
98 qx(svn --version) =~ /\(r(\d+)\)/;
100 $CAN_IGNORE_EXTERNALS = 1;
103 sub available_config_files{
104 my $dir = new IO::Dir "$HOME/.sa.d/";
107 while (defined($file = $dir->read)) {
108 next unless $file =~ /^[\w\d][\w\d_-.]+$/;
109 push @conffiles,$file;
115 for ('/etc/sa.conf', available_config_files()) {
117 parse_config_file(\%repos,$_,$HOME);
121 $DEBUG = $options{debug};
125 if (@ARGV and $ARGV[0] =~ /^(st(?:atus)?|up(?:date)?|checkout)$/) {
132 while (my ($repo,$run_after) = each(%repos)) {
133 if (-e "$repo/.svn") {
134 print "Checking [$repo]\n";
137 $options{quiet}?'-q':(),
138 ($options{quick} and $CAN_IGNORE_EXTERNALS)?'--ignore-externals':(),
139 $options{quick}>1?'-N':(),
143 if ($command =~ /^up(?:date)|checkout$/) {
144 system($run_after,$repo) if defined $run_after and length $run_after;