]> git.donarmstrong.com Git - bin.git/blobdiff - sa
add reset usb bus command
[bin.git] / sa
diff --git a/sa b/sa
index 0557d25f952b3d6725e6dda1389cf1c84a5580b5..acf37dff3827ffc7d70ba98c366fa8920d2e39c0 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
 
  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
   --quiet, -q be quiet
   --debug, -d debugging level (Default 0)
   --help, -h display this help
@@ -45,18 +46,20 @@ Display this manual.
 
 
 
 
 
 
-use User;
+#use User;
 use IO::File;
 use IO::File;
-use vars qw($DEBUG);
+use vars qw($DEBUG $VERBOSE);
 
 my %options = (quick           => 1,
               quiet           => 1,
               debug           => 0,
               help            => 0,
               man             => 0,
 
 my %options = (quick           => 1,
               quiet           => 1,
               debug           => 0,
               help            => 0,
               man             => 0,
+              verbose         => 0,
+              hooks_only      => 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+','hooks_only|hooks-only');
 
 pod2usage() if $options{help};
 pod2usage({verbose=>2}) if $options{man};
 
 pod2usage() if $options{help};
 pod2usage({verbose=>2}) if $options{man};
@@ -66,11 +69,11 @@ pod2usage({verbose=>2}) if $options{man};
 =head1 CONFIGURATION
 
 Reads configuration information from Start by parsing /etc/sa.conf,
 =head1 CONFIGURATION
 
 Reads configuration information from Start by parsing /etc/sa.conf,
-then ~/.sarc then ~/.sarc_$hostname, then ~/.sarc_local
+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
 
 The configuration file contains a list of svn repositories which
 should be queried; each line can contain a tab, which indicates that
-the command following the tab should be run fater the svn directory is
+the command following the tab should be run after the svn directory is
 updated.
 
 The configuration files are read in the order given above.
 updated.
 
 The configuration files are read in the order given above.
@@ -90,19 +93,32 @@ sub parse_config_file {
      }
 }
 
      }
 }
 
-
-my $HOME=User->Home;
+my $HOME=$ENV{HOME};
 my $HOSTNAME=qx(hostname);
 $HOSTNAME=~s/\n//g;
 my $HOSTNAME=qx(hostname);
 $HOSTNAME=~s/\n//g;
+my $CAN_IGNORE_EXTERNALS = 0;
+if (not $options{hooks_only}) {
+     qx(svn --version) =~ /\(r(\d+)\)/;
+     if ($1 > 13838) {
+         $CAN_IGNORE_EXTERNALS = 1;
+     }
+}
+
+sub available_config_files{
+     my $dir;
+     opendir($dir, "$HOME/.sa.d/") or return ();
+     return map {"$HOME/.sa.d/$_"} grep /^[\w\d][\w\d_.-]+$/, readdir $dir;
+}
+
 my %repos;
 my %repos;
-for ('/etc/sa.conf', "${HOME}/.sarc", "${HOME}/.sarc_${HOSTNAME}", "${HOME}/.sarc_local") {
+for ('/etc/sa.conf', available_config_files()) {
      if (-e $_) {
          parse_config_file(\%repos,$_,$HOME);
      }
 }
 
      if (-e $_) {
          parse_config_file(\%repos,$_,$HOME);
      }
 }
 
-
 $DEBUG = $options{debug};
 $DEBUG = $options{debug};
+$VERBOSE = $options{verbose};
 
 my $command;
 
 
 my $command;
 
@@ -113,17 +129,19 @@ else {
      $command = 'status';
 }
 
      $command = 'status';
 }
 
-
 while (my ($repo,$run_after) = each(%repos)) {
 while (my ($repo,$run_after) = each(%repos)) {
-     if (-e "$repo/.svn") {
+     print "Checking [$repo]\n";
+     if (-e "$repo/.svn" and not $options{hooks_only}) {
          system('svn',
                 $command,
          system('svn',
                 $command,
-                $options{quiet}?'-q':(),
-                $options{quick}?('--ignore-externals','-N'):(),
+                (not $VERBOSE and $options{quiet})?'-q':(),
+                ($VERBOSE >= 2)?'-v':(),
+                ($options{quick} and $CAN_IGNORE_EXTERNALS)?'--ignore-externals':(),
+                $options{quick}>1?'-N':(),
                 $repo,
                );
      }
                 $repo,
                );
      }
-     if ($command =~ /^up(?:date)|checkout$/) {
-         system($run_after,$repo) if defined $run_after and length $run_after;
+     if ($command =~ /^up(?:date)?|checkout$/) {
+         system('sh', '-c',"$run_after $repo") if defined $run_after and length $run_after;
      }
 }
      }
 }