⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mirror_dir_through_svn.cgi

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 CGI
字号:
#!/usr/bin/perl -wT# $HeadURL: https://svn.collab.net/repos/svn/trunk/contrib/cgi/mirror_dir_through_svn.cgi $# $LastChangedDate: 2003-08-28 13:03:23 -0500 (Thu, 28 Aug 2003) $# $LastChangedBy: striker $# $LastChangedRevision: 6908 $$| = 1;use strict;use CGI       2.89;use CGI::Carp 1.24 qw(fatalsToBrowser carpout);use vars           qw($query);# Get a CGI object now and send the HTTP headers out immediately so# that anything else printed will appear in the output, including# compile errors.BEGIN {  $query = CGI->new;  print $query->header('text/plain');  carpout(\*STDOUT);}# Protect the PATH environmental variable for safe system calls.$ENV{PATH} = '/usr/bin:/bin';# Configuration settings.# The location of the svn program.my $svn = '/opt/i386-linux/subversion/bin/svn';# The location of the svn_load_dirs.pl script.my $svn_load_dirs = '/export/home2/svn/bin/svn_load_dirs.pl';# The source directory.my $source_dirname = '/export/home2/svn/public_html/www-devel/webdav';# The target directory.my $target_dirname = '/export/home1/apache/htdocs/www';# The URL for the Subversion repository.my $repos_base_uri = 'file:///export/home2/svn/repos-www/trunk';# Verbosity level.my $opt_verbose = 1;my @opt_verbose = $opt_verbose ? (qw(-v)) : ();# Use this version of die instead of Perl's die so that messages are# sent to STDOUT instead of STDERR so that the browser can see them.# Otherwise, messages would be sent to Apache's error_log.sub my_die ($@){  print "@_\n" if @_;  exit 1;}# For permissions information, print my actual and effective UID and# GID.if ($opt_verbose)  {    my $real_uid      = getpwuid($<) || $<;    my $effective_uid = getpwuid($>) || $>;    my $real_gid      = getgrgid($() || $(;    my $effective_gid = getgrgid($)) || $);    print "My real uid is $real_uid and my effective uid is $effective_uid.\n";    print "My real gid is $real_gid and my effective gid is $effective_gid.\n";  }# Check the configuration settings.-e $source_dirname  or my_die "$0: source directory `$source_dirname' does not exist.\n";-d _  or my_die "$0: source directory `$source_dirname' is not a directory.\n";-e $target_dirname  or my_die "$0: target directory `$target_dirname' does not exist.\n";-d _  or my_die "$0: target directory `$target_dirname' is not a directory.\n";# Since the path to svn and svn_load_dirs.pl depends upon the local# installation preferences, check that the required programs exist to# insure that the administrator has set up the script properly.{  my $ok = 1;  foreach my $program ($svn, $svn_load_dirs)    {      if (-e $program)        {          unless (-x $program)            {              print "$0: required program `$program' is not executable, ",                    "edit $0.\n";              $ok = 0;            }        }      else        {          print "$0: required program `$program' does not exist, edit $0.\n";          $ok = 0;        }    }  exit 1 unless $ok;}# Check that the svn base URL works by running svn log on it.&read_from_process($svn, 'log', $repos_base_uri);# Determine the authentication username for commit privileges.# Untaint the REMOTE_USER environmental variable.my $username;if (defined $ENV{REMOTE_USER})  {    ($username) = $ENV{REMOTE_USER} =~ m/(\w+)/;    unless (defined $username and length $username)      {        my_die "$0: REMOTE_USER set to `$ENV{REMOTE_USER}' but no valid ",               "string extracted from it.\n";      }  }else  {    my_die "$0: the REMOTE_USER environmental variable is not set.\n";  }if ($opt_verbose)  {    print "I am logged in as `$username'.\n";  }# Load the source directory into Subversion.print "Now syncing Subversion repository with source directory.\n\n";my_system($svn_load_dirs,          @opt_verbose,          '-no_user_input',          '-svn_username', $username,          '-p', '/opt/i386-linux/installed/svn_load_dirs_property_table.cfg',          $repos_base_uri,          '.',          $source_dirname) == 0  or my_die "$0: system failed.  Quitting.\n";print "\nNow syncing target directory with Subversion repository.\n\n";chdir $target_dirname  or my_die "$0: chdir `$target_dirname' failed: $!\n";my_system($svn, 'update', '.') == 0  or my_die "$0: system failed.  Quitting.\n";print "\nTarget directory sucessfully updated to mirror source directory.\n";exit 0;# Start a child process safely without using /bin/sh.sub safe_read_from_pipe{  unless (@_)    {      croak "$0: safe_read_from_pipe passed no arguments.\n";    }  if ($opt_verbose)    {      print "Running @_\n";    }  my $pid = open(SAFE_READ, '-|');  unless (defined $pid)    {      my_die "$0: cannot fork: $!\n";    }  unless ($pid)    {      open(STDERR, ">&STDOUT")        or my_die "$0: cannot dup STDOUT: $!\n";      exec(@_)        or my_die "$0: cannot exec `@_': $!\n";    }  my @output;  while (<SAFE_READ>)    {      chomp;      push(@output, $_);    }  close(SAFE_READ);  my $result = $?;  my $exit   = $result >> 8;  my $signal = $result & 127;  my $cd     = $result & 128 ? "with core dump" : "";  if ($signal or $cd)    {      print "$0: pipe from `@_' failed $cd: exit=$exit signal=$signal\n";    }  if (wantarray)    {      return ($result, @output);    }  else    {      return $result;    }}# Use safe_read_from_pipe to start a child process safely and exit the# script if the child failed for whatever reason.sub read_from_process  {  unless (@_)    {      croak "$0: read_from_process passed no arguments.\n";    }  my ($status, @output) = &safe_read_from_pipe(@_);  if ($status)    {      my_die "$0: @_ failed with this output:\n", join("\n", @output), "\n";    }  else    {      return @output;    }}# Run system() and print warnings on system's return values.sub my_system{  unless (@_)    {      confess "$0: my_system passed incorrect number of arguments.\n";    }  if ($opt_verbose)    {      print "Running @_\n";    }  my $result = system(@_);  if ($result == -1)    {      print "$0: system(@_) call itself failed: $!\n";    }  elsif ($result)    {      my $exit_value  = $? >> 8;      my $signal_num  = $? & 127;      my $dumped_core = $? & 128;      my $message     = "$0: system(@_) exited with status $exit_value";      if ($signal_num)        {          $message     .= " caught signal $signal_num";        }      if ($dumped_core)        {          $message     .= " and dumped core";        }      print "$message\n";    }  $result;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -