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

📄 perforcediff.pm

📁 codestriker is a develop useful tool to review code on web user interface.
💻 PM
字号:
################################################################################ Codestriker: Copyright (c) 2001, 2002, 2003 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.# Parser object for reading the output for a perforce diff command, such# as:## p4 diff -du#package Codestriker::FileParser::PerforceDiff;use strict;use Codestriker::FileParser::UnidiffUtils;sub _make_chunk ($);sub _retrieve_file ($$);# Return the array of filenames, revision number, linenumber, whether its# binary or not, and the diff text.# Return () if the file can't be parsed, meaning it is in another format.sub parse ($$$) {    my ($type, $fh, $repository) = @_;    # Skip initial whitespace.    my $line = <$fh>;    while (defined($line) && $line =~ /^\s*$/) {        $line = <$fh>;    }    # Array of results found.    my @result = ();    # Assume the repository matches this diff, unless we find evidence to    # the contrary.    my $repmatch = 1;    # Now read the actual diff chunks.    while (defined($line)) {        if ($line =~ /^==== (.*)\#(\d+) \- .* ==== \((.*)\)$/) {            my $filename = $1;            my $revision = $2;            my $file_type = $3;            if ($file_type eq "ubinary" || $file_type eq "xbinary" ||                $file_type eq "binary") {                # Binary file, skip the next line and add the record in.                $line = <$fh>;                my $chunk = {};                $chunk->{filename} = $filename;                $chunk->{revision} = $revision;                $chunk->{old_linenumber} = -1;                $chunk->{new_linenumber} = -1;                $chunk->{binary} = 1;                $chunk->{text} = "";                $chunk->{description} = "";                $chunk->{repmatch} = $repmatch;                push @result, $chunk;            } elsif ($file_type eq "text") {                # Note there may be an optional '---' and '+++' lines                # before the chunk.                my $lastpos = tell $fh;                if (<$fh> !~ /^\-\-\-/ || <$fh> !~ /^\+\+\+/) {                    # Move the file pointer back.                    seek $fh, $lastpos, 0;                }                my @file_diffs = Codestriker::FileParser::UnidiffUtils->                  read_unidiff_text($fh, $filename, $revision, $repmatch);                push @result, @file_diffs;            } else {                # Got knows what this is, can't parse it.                return ();            }        } elsif ($line =~ /^==== (.*)\#(\d+) \-/) {            my $filename = $1;            my $revision = $2;            # Now read the entire diff chunk (it may be empty if the            # user hasn't actually modified the file).  Note there            # may be an optional '---' and '+++' lines before the            # chunk.            my $lastpos = tell $fh;            if (<$fh> !~ /^\-\-\-/ || <$fh> !~ /^\+\+\+/) {                # Move the file pointer back.                seek $fh, $lastpos, 0;            }            my @file_diffs = Codestriker::FileParser::UnidiffUtils->              read_unidiff_text($fh, $filename, $revision, $repmatch);            push @result, @file_diffs;        } else {            # Can't parse this file.            return ();        }        # Now read the next chunk.        $line = <$fh> if defined $line;    }    # Return the found diff chunks.    return @result;}1;

⌨️ 快捷键说明

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