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

📄 svn_all_diffs.pl

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 PL
字号:
#!/usr/bin/perl -w# $HeadURL: https://svn.collab.net/repos/svn/branches/1.4.x/contrib/client-side/svn_all_diffs.pl $# $LastChangedDate: 2006-10-06 12:38:47 -0500 (Fri, 06 Oct 2006) $# $LastChangedBy: dlr $# $LastChangedRevision: 21808 $use strict;use Carp;use Getopt::Long 2.25;# Process the command line options.# Print the log message along with the modifications made in a# particular revision.my $opt_print_log_message;GetOptions('log' => \$opt_print_log_message)  or &usage;&usage("$0: too many arguments") if @ARGV > 1;# If there is no file or directory specified on the command line, use# the current working directory as a default path.my $file_or_dir = @ARGV ? shift : '.';unless (-e $file_or_dir)  {    die "$0: file or directory `$file_or_dir' does not exist.\n";  }# Get the entire log for this file or directory.  Parse the log into# two separate lists.  The first is a list of the revision numbers# when this file or directory was modified.  The second is a hash of# log messages for each revision.my @revisions;my %log_messages;{  my $current_revision;  foreach my $log_line (read_from_process('svn', 'log', $file_or_dir))    {      # Ignore any of the lines containing only -'s.      next if $log_line =~ /^-+$/;      if (my ($r) = $log_line =~ /^r(\d+)/)        {          $current_revision                = $r;          $log_messages{$current_revision} = "";          push(@revisions, $r);        }      if (defined $current_revision)        {          $log_messages{$current_revision} .= "$log_line\n";        }    }}# Run all the diffs.while (@revisions > 1)  {    my $new_rev = shift @revisions;    my $old_rev = $revisions[0];    &print_revision($new_rev);    my @diff = read_from_process('svn', 'diff',                                 "-r$old_rev:$new_rev", $file_or_dir);    if ($opt_print_log_message)      {        print $log_messages{$new_rev};      }    print join("\n", @diff, "\n");  }# Print the log message for the last revision.  There is no diff for# this revision, because according to svn log, the file or directory# did not exist previously.{  my $last_revision = shift @revisions;  if ($opt_print_log_message)    {      &print_revision($last_revision);      print $log_messages{$last_revision};    }}exit 0;sub usage{  warn "@_\n" if @_;  die "usage: $0 [options] [file_or_dir]\n",      "Valid options:\n",      "  -l [--log] : also show the log messages\n";}sub print_revision{  my $revision = shift;  print "\n\n\nRevision $revision\n";}# 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";    }  print "Running @_\n";  my $pid = open(SAFE_READ, '-|');  unless (defined $pid)    {      die "$0: cannot fork: $!\n";    }  unless ($pid)    {      open(STDERR, ">&STDOUT")        or die "$0: cannot dup STDOUT: $!\n";      exec(@_)        or 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)    {      warn "$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)    {      die "$0: @_ failed with this output:\n", join("\n", @output), "\n";    }  else    {      return @output;    }}

⌨️ 快捷键说明

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