patchfs fix for unified diffs



Hello

This patch fixes a bug in MC's patchfs.
Without the patch the linux kernel 2.4.21 patch
(ftp://ftp.kernel.org/pub/linux/kernel/v2.4/patch-2.4.21.gz)
could not be viewed because it contained a few lines which
confused the patchfs parser:

--- Sym = Symetric: both link partners are allowed to send PAUSE frames
--- SymOrRem = SymetricOrRemote: both or only remote partner are allowed
-   to send PAUSE frames

You'd get some dialog saying that the unified diff couldn't
be parsed. This patch fixes that by parsing @@-lines in
the diff and that way counting number of lines in each hunk.
All lines in the hunk are then ignored instead of being parsed.

Regards,

Oskar

diff -u patchfs.v0 patchfs
--- patchfs.v0  2003-10-13 23:03:04.000000000 +0200
+++ patchfs     2003-10-13 23:10:41.000000000 +0200
@@ -82,7 +82,13 @@
            }
        }
 
-       if (($unified && /^--- /) || ($context && /^\*\*\* [^\*]*$/)) {
+       if ($state==1 && $unified && /^@@ -(\d+),(\d+) \+(\d+),(\d+) @@/) {
+           my $lines = $2+$4;
+           while ($lines > 0 && defined ($_ = <I>)) {
+               $lines -= 1 if /^[-+]/;
+               $lines -= 2 if /^ /;
+           }
+       } elsif (($unified && /^--- /) || ($context && /^\*\*\* [^\*]*$/)) {
            # start of new file
            if ($state==1) {
                printf "-rw-r--r-- 1 %s %s %d %s %s%s\n", $uid, $gid, $len, datetime($time), $prefix, $f
@@ -172,7 +178,13 @@
            }
        }
 
-       if (($unified && /^--- /) || ($context && /^\*\*\* [^\*]*$/)) {
+       if ($state==1 && $unified && /^@@ -(\d+),(\d+) \+(\d+),(\d+) @@/) {
+           my $lines = $2+$4;
+           while ($lines > 0 && defined ($_ = <I>)) {
+               $lines -= 1 if /^[-+]/;
+               $lines -= 2 if /^ /;
+           }
+       } elsif (($unified && /^--- /) || ($context && /^\*\*\* [^\*]*$/)) {
            last if ($state==1 && $found);
            $state=1;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]