236
239
sub recent_interesting_rev {
241
my $ra = $self->{repos}{ra};
240
my ($self, $path, $rev) = @_;
242
my $ra = $self->{repos}{ra};
246
$ra->get_log([$path], $rev, 1, 1, 0, 1,
247
sub { @log_result = @_; });
246
$ra->get_log( [ Encode::encode('utf8',$self->rpath($path)) ], $rev, 1, 1, 0, 1, sub { @log_result = @_; } );
249
248
return @log_result if wantarray();
250
return $log_result[1]; # Revision number
249
return $log_result[1]; # Revision number
253
252
=head2 get_revs()
287
286
my $exp_rev = $self->{cgi}->param('rev');
288
287
my $yng_rev = $self->{repos}{ra}->get_latest_revnum();
289
my $act_rev = defined $exp_rev ? $self->recent_interesting_rev($path, $exp_rev) :
290
$self->recent_interesting_rev($path, $yng_rev);
290
? $self->recent_interesting_rev( $path, $exp_rev )
291
: $self->recent_interesting_rev( $path, $yng_rev );
293
if(! defined $exp_rev) {
296
if($exp_rev == $yng_rev) {
300
return($exp_rev, $yng_rev, $act_rev, $at_head);
294
if ( !defined $exp_rev or $exp_rev eq '' ) {
298
if ( $exp_rev == $yng_rev ) {
302
return ( $exp_rev, $yng_rev, $act_rev, $at_head );
303
305
=head2 format_svn_timestamp()
317
319
# Note: Buggy on Solaris
318
320
# my $time = SVN::Core::time_from_cstring($cstring) / 1_000_000;
319
my(@time) = $cstring =~ /^(....)-(..)-(..)T(..):(..):(..)/;
321
my $time = timegm_nocheck($time[5], $time[4], $time[3],
322
$time[2], $time[1] - 1, $time[0]);
324
if($self->{config}->{timezone} eq 'local') {
325
return POSIX::strftime($self->{config}->{timedate_format},
329
if((not defined $tz_offset) and ($self->{config}->{timezone} ne '')) {
330
$tz_offset = Time::Zone::tz_offset($self->{config}->{timezone});
334
return POSIX::strftime($self->{config}->{timedate_format}, gmtime($time));
321
my (@time) = $cstring =~ /^(....)-(..)-(..)T(..):(..):(..)/;
324
timegm_nocheck( $time[5], $time[4], $time[3], $time[2], $time[1] - 1,
327
if ( $self->{config}->{timezone} eq 'local' ) {
328
return POSIX::strftime( $self->{config}->{timedate_format},
332
if ( ( not defined $tz_offset ) and ( $self->{config}->{timezone} ne '' ) )
334
$tz_offset = Time::Zone::tz_offset( $self->{config}->{timezone} );
338
return POSIX::strftime( $self->{config}->{timedate_format}, gmtime($time) );
384
my ( $self, $p ) = @_;
385
my $path = $p || $self->{path};
386
$path =~ s{^/}{} if $path;
390
sub svn_get_node_kind {
391
my ($self, $uri, $peg_revision, $revision, $pool) = @_;
395
my @args = ($self->encode_svn_uri($uri), $peg_revision, $revision, sub { $node_kind = $_[1]->kind() }, 0);
396
push @args, $pool if $pool;
397
$self->{repos}{client}->info(@args);
403
my ($self, $target1, $rev1, $target2, $rev2, $recursive, $pool) = @_;
405
my ( $out_h, $out_fn ) = File::Temp::tempfile();
406
my ( $err_h, $err_fn ) = File::Temp::tempfile();
408
my @args = ([], $self->encode_svn_uri($target1), $rev1, $self->encode_svn_uri($target2), $rev2, $recursive, 1, 0, $out_h, $err_h);
409
push @args, $pool if $pool;
410
$self->{repos}{client}->diff(@args);
416
unlink( $out_fn ); unlink( $err_fn );
417
close( $out_h ); close( $err_h );
423
my ($self, $uri) = splice(@_, 0, 2);
424
return $self->{repos}{client}->ls( $self->encode_svn_uri($uri), @_ );
427
sub ctx_revprop_get {
428
my ($self, $prop_name, $uri, $rev) = splice(@_, 0, 4);
429
return $self->{repos}{client}->revprop_get( $prop_name, $self->encode_svn_uri($uri), $rev, @_ );
433
my ($self, $prop_name, $uri, $rev, $recursive) = splice(@_, 0, 5);
434
return $self->{repos}{client}->propget( $prop_name, $self->encode_svn_uri($uri), $rev, $recursive, @_ );
438
my ($self, $fh, $uri, $rev) = splice(@_, 0, 4);
439
return $self->{repos}{client}->cat( $fh, $self->encode_svn_uri($uri), $rev, @_ );
443
my ($self, $uri, $start_rev, $end_rev, $cb) = splice(@_, 0, 5);
444
return $self->{repos}{client}->blame( $self->encode_svn_uri($uri), $start_rev, $end_rev, $cb, @_ );
448
my $uri = Encode::encode('utf8', $_[1]);
449
# same as in svn_path_uri_encode (see subversion/libsvn_subr/path.c)
450
$uri =~ s#([^\-\!\$\&\'\(\)\*\+\,\.\/\:\=\@\~\_0-9A-Za-z])#sprintf("%%%02X",ord($1))#eg;
455
my ($self, $uri) = @_;
456
$uri =~ s#%([0-9A-Fa-f]{2})#chr(hex($1))#eg;
457
return Encode::decode('utf8', $uri);