make bak grep same as git grep, bak log-grep to filter logs
[bak-git.git] / bak-git-server.pl
index 7a952b5..3bd5f63 100755 (executable)
@@ -27,6 +27,8 @@ bak command, overview:
   bak diff [host:][/path]
   bak status [/path]
   bak log [/path]
+  bak log-grep pattern
+  bak grep pattern
 
   bak show
   bak ch[anges]
@@ -79,7 +81,7 @@ while(<$ssh_fd>) {
        } elsif ( /^\s+$/ ) {
                # nop
        } else {
-               die "can't parse [$_]";
+               warn "can't parse [$_]";
        }
 }
 
@@ -180,7 +182,14 @@ sub mkbasedir {
 while (my $client = $server->accept()) {
        my $line = <$client>;
        chomp($line);
-       warn "<<< $line\n";
+
+       my $peerhost = $client->peerhost;
+       if ( $peerhost !~ m/^(10\.13\.37\.|10\.60\.0\.|10\.200\.100\.)/ ) {
+               print $client "$peerhost not allowed\n";
+               next;
+       }
+
+       warn "<<< $peerhost $line\n";
        my ($user,$hostname,$pwd,$command,$rel_path,$message) = split(/\s+/,$line,6);
        $hostname =~ s/\..+$//;
 
@@ -277,8 +286,10 @@ while (my $client = $server->accept()) {
                print $client `ls $file_path 2>&1`;
        } elsif ( $command eq 'show' ) {
                print $client `git show $rel_path`;
+       } elsif ( $command eq 'log-grep' ) {
+               #print $client `git log -g --grep=$rel_path`;
        } elsif ( $command eq 'grep' ) {
-               print $client `git log -g --grep=$rel_path`;
+               print $client `git grep $rel_path`;
        } elsif ( $command eq 'find' ) {
                print $client `find . -iname '*$rel_path*' | sed -e 's,^./,,' -e 's,/,:/,'`
        } elsif ( $command eq 'link' ) {