added find to locate files
[bak-git.git] / bak-git-server.pl
index 58d4dfe..5ba7e17 100755 (executable)
@@ -20,7 +20,7 @@ controll channel (or to pass through server ssh hops using C<ProxyCommand>)
 
   RemoteForward 9001 192.168.42.42:9001
 
-bak command overview:
+bak command, overview:
 
   bak add /path
   bak commit [/path [message]]
@@ -34,9 +34,12 @@ bak command overview:
 
   bak cat [host:]/path
   bak grep pattern
+  bak find filename-pattern
 
   bak - push all changed files to server
 
+  bak add,commit /path
+
 See L<http://blog.rot13.org/bak-git> for more information
 
 =cut
@@ -95,7 +98,7 @@ warn "# ssh_client $hostname $server";
 sub _kill_ssh {
        while ( my($host,$pid) = each %$ssh_tunnel ) {
                warn "$host kill TERM $pid";
-               kill 15, $pid; # TERM
+               eval { kill 15, $pid; } # TERM
        }
 }
 
@@ -190,6 +193,8 @@ while (my $client = $server->accept()) {
        }
        my $path = $rel_path =~ m{^/} ? $rel_path : "$pwd/$rel_path";
 
+       foreach my $command ( split /,/, $command ) { # XXX command loop
+
        warn "$hostname [$command] $on_host:$path | $message\n";
 
        my $args_message = $message;
@@ -266,11 +271,14 @@ while (my $client = $server->accept()) {
                        print $client "ERROR: $file_path: $!\n";
                }
        } elsif ( $command eq 'ls' ) {
-               print $client `ls $backup_path`;
+               my $file_path = ( $on_host ? $on_host : $hostname ) . "/$path";
+               print $client `ls $file_path 2>&1`;
        } elsif ( $command eq 'show' ) {
                print $client `git show $rel_path`;
        } elsif ( $command eq 'grep' ) {
                print $client `git log -g --grep=$rel_path`;
+       } elsif ( $command eq 'find' ) {
+               print $client `find . -iname '*$rel_path*' | sed -e 's,^./,,' -e 's,/,:/,'`
        } elsif ( $command eq 'link' ) {
                if ( $on_host ) {
                        mkbasedir "$on_host/$path";
@@ -285,6 +293,8 @@ while (my $client = $server->accept()) {
                print $client "ERROR: unknown command: $command\n";
        }
 
+       } # XXX command, loop
+
        close($client);
 }