]> git.donarmstrong.com Git - bin.git/commitdiff
update sa with the new features for modular home directories
authorDon Armstrong <don@donarmstrong.com>
Sat, 18 Feb 2006 00:10:11 +0000 (00:10 +0000)
committerDon Armstrong <don@donarmstrong.com>
Sat, 18 Feb 2006 00:10:11 +0000 (00:10 +0000)
sa

diff --git a/sa b/sa
index 74af5e506a4b65274ff5e88d8d7274f71ba00de7..6cacfda6cfebffdf09e8090faefaae8dd5fec0d8 100755 (executable)
--- a/sa
+++ b/sa
@@ -16,6 +16,7 @@ sa [options] [status|update|checkout] [directories to sync]
 
  Options:
   --quick, -Q don't update external projects
+  --verbose, -v be more verbose
   --quiet, -q be quiet
   --debug, -d debugging level (Default 0)
   --help, -h display this help
@@ -47,16 +48,17 @@ Display this manual.
 
 use User;
 use IO::File;
-use vars qw($DEBUG);
+use vars qw($DEBUG $VERBOSE);
 
 my %options = (quick           => 1,
               quiet           => 1,
               debug           => 0,
               help            => 0,
               man             => 0,
+              verbose         => 0,
              );
 
-GetOptions(\%options,'quick|Q+','quiet|q!','debug|d+','help|h|?','man|m');
+GetOptions(\%options,'quick|Q+','quiet|q!','debug|d+','help|h|?','man|m','verbose|v+');
 
 pod2usage() if $options{help};
 pod2usage({verbose=>2}) if $options{man};
@@ -66,7 +68,7 @@ pod2usage({verbose=>2}) if $options{man};
 =head1 CONFIGURATION
 
 Reads configuration information from Start by parsing /etc/sa.conf,
-then the contents of ~/sa.d/ which match ^[\w\d][\w\d_-.]+$
+then the contents of ~/sa.d/ which match ^[\w\d][\w\d_.-]+$
 
 The configuration file contains a list of svn repositories which
 should be queried; each line can contain a tab, which indicates that
@@ -86,7 +88,6 @@ sub parse_config_file {
          next if /^#/;
          my ($repo,$command) = split /\t/,$_,2;
          $repo =~ s/^\~/$home/;
-         $command =~ s/^\~/$home/ if defined $command;
          $$repos{$repo} = $command;
      }
 }
@@ -101,14 +102,9 @@ if ($1 > 13838) {
 }
 
 sub available_config_files{
-     my $dir = new IO::Dir "$HOME/.sa.d/";
-     my @conffiles;
-     my $file;
-     while (defined($file = $dir->read)) {
-         next unless $file =~ /^[\w\d][\w\d_-.]+$/;
-         push @conffiles,$file;
-     }
-     return @conffiles;
+     my $dir;
+     opendir($dir, "$HOME/.sa.d/") or return ();
+     return map {"$HOME/.sa.d/$_"} grep /^[\w\d][\w\d_.-]+$/, readdir $dir;
 }
 
 my %repos;
@@ -119,6 +115,7 @@ for ('/etc/sa.conf', available_config_files()) {
 }
 
 $DEBUG = $options{debug};
+$VERBOSE = $options{verbose};
 
 my $command;
 
@@ -134,13 +131,14 @@ while (my ($repo,$run_after) = each(%repos)) {
          print "Checking [$repo]\n";
          system('svn',
                 $command,
-                $options{quiet}?'-q':(),
+                (not $VERBOSE and $options{quiet})?'-q':(),
+                ($VERBOSE >= 2)?'-v':(),
                 ($options{quick} and $CAN_IGNORE_EXTERNALS)?'--ignore-externals':(),
                 $options{quick}>1?'-N':(),
                 $repo,
                );
      }
      if ($command =~ /^up(?:date)|checkout$/) {
-         system($run_after,$repo) if defined $run_after and length $run_after;
+         system('sh', '-c',"$run_after $repo") if defined $run_after and length $run_after;
      }
 }