- #!perl
- # -*- Perl -*-
- # Copyright 1999 Greg Spencer (greg_spencer@acm.org)
- ######################################################################
- #
- # Argument parsing
- #
- ######################################################################
- use p4Config;
- use p4Util;
- use CGI;
- use LWP::MediaTypes;
- use HTTP::Date;
- sub GetModDate {
- my $file = shift;
- my %filehash = &p4Util::GetFileInfo($file);
- my $modtime = $filehash{$file}{headTime};
- my $date = &time2str($modtime);
- return $date;
- }
- $query = new CGI;
- $input_file=$query->path_info();
- # it's been given as a script argument via the url...
- if (!$input_file) {
- @param_keys = $query->keywords;
- $input_file=$param_keys[0] if !$input_file;
- }
- $input_file =~ s,^//depot,,; # make sure it isn't already there.
- $input_file = "//depot".$input_file; # so we don't have to give the depot...
- $input_file =~ s|/$||; # strip a trailing slash...
- ($file_name = $input_file) =~ s/\[#\@].*$//; # strip off the version number, if any
- $type = guess_media_type($file_name);
- $type = "text/plain" if ($type eq "application/octet-stream");
- if (!open(INPUT,"p4 print \"$input_file\" 2>&1 |")) {
- print "Status: 200 OK\n";
- print "Content-type: text/html\n\n";
- print "<HTML><TITLE>Unable to open file...</TITLE><BODY bgcolor=white>\n";
- print "<H2>$input_file</H2><HR>\n";
- print "<BR><CENTER><B><FONT color=red size=+2>\n";
- print "Unable to run Perforce on server (this shouldn't happen!)\n";
- print "</FONT></B></CENTER><BR>\n";
- print "<HR></BODY></HEAD>\n";
- exit(0);
- }
- my $info = <INPUT>; # strip off the perforce info...
- if ($info =~ m/(no such file|protected namespace)/) {
- print "Status: 200 OK\n";
- print "Content-type: text/html\n\n";
- print "<HTML><TITLE>Unable to open file...</TITLE><BODY bgcolor=white>\n";
- print "<H2>$input_file</H2><HR>\n";
- print "<BR><CENTER><B><FONT color=red size=+2>\n";
- if ($version) {
- print "There is no such revision number...";
- }
- elsif ($changenum) {
- print "There is no such change number...";
- }
- else {
- print "File or Path Doesn't Exist.\n";
- }
- print "</FONT></B></CENTER><BR>\n";
- print "<HR></BODY></HEAD>\n";
- exit(0);
- }
- $modDate = &GetModDate($input_file);
- print "Status: 200 OK\n";
- print "Content-type: $type\n";
- if ($modDate ne "") {
- print "Last-modified: $modDate\n";
- }
- print "\n";
- # keep from loading these files into memory
- # (as they might be BIG binary files)
- while (<INPUT>) { print; }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 80 | Greg Spencer | This adds the file-centric perforce browser to the guest depot. I rewrote it (again) th...is week to split out a simpler, non-javascript version that is easier to install (and doesn't need the CGI package). Both are included here. I still need to rewrite the INSTALL.txt file to reflect this, and update the README. I'd love to have a MakeMaker script to install this, but I haven't done that before, so I've got some trepidation. « |
26 years ago |