Subversion Repositories DevTools

Rev

Rev 1295 | Blame | Compare with Previous | Last modification | View Log | RSS feed

###############################################################################
# Codestriker: Copyright (c) 2001, 2002 David Sitsky.  All rights reserved.
# sits@users.sourceforge.net
#
# This program is free software; you can redistribute it and modify it under
# the terms of the GPL.

# Perforce repository class.

package Codestriker::Repository::Perforce;

use strict;

# Constructor, which takes as a parameter the password, hostname and port.
sub new ($$$$$) {
    my ($type, $user, $password, $hostname, $port) = @_;

    my $self = {};
    $self->{user} = $user;
    $self->{password} = $password;
    $self->{hostname} = $hostname;
    $self->{port} = $port;
    $self->{root} = "perforce:${user}" .
        (defined $password && $password ne '' ? ":${password}" : '') .
        "@" . "${hostname}:${port}";
    bless $self, $type;
}

# Retrieve the data corresponding to $filename and $revision.  Store each line
# into $content_array_ref.
sub retrieve ($$$\$) {
    my ($self, $filename, $revision, $content_array_ref) = @_;

    # Open a pipe to the local CVS repository.
    my $password = $self->{password};
    open(P4, "\"$Codestriker::p4\"" .
         " -p " . $self->{hostname} . ':' . $self->{port} .
         " -u " . $self->{user} .
         (defined $password && $password ne '' ?
          " -P " . $self->{password} : '') .
         " print -q \"$filename\"" . "#" . "$revision |")
        || die "Can't retrieve data using p4: $!";

    # Read the data.
    for (my $i = 1; <P4>; $i++) {
        $_ = Codestriker::decode_topic_text($_);
        chop;
        $$content_array_ref[$i] = $_;
    }
    close P4;
}

# Retrieve the "root" of this repository.
sub getRoot ($) {
    my ($self) = @_;
    return $self->{root};
}

# Return a URL which views the specified file and revision.
sub getViewUrl ($$$) {
    my ($self, $filename, $revision) = @_;

    # Lookup the file viewer from the configuration.
    my $viewer = $Codestriker::file_viewer->{$self->{root}};
    return (defined $viewer) ? $viewer . "/" . $filename : "";
}

# Return a string representation of this repository.
sub toString ($) {
    my ($self) = @_;
    return $self->{root};
}

# Given a start tag, end tag and a module name, store the text into
# the specified file handle.  If the size of the diff goes beyond the
# limit, then return the appropriate error code.
sub getDiff ($$$$$) {
    my ($self, $start_tag, $end_tag, $module_name,
        $stdout_fh, $stderr_fh) = @_;

    return $Codestriker::UNSUPPORTED_OPERATION;
}

1;