method diff ( Maybe[Bool] :$patch?,
Maybe[NonEmptySimpleStr] :$parent?,
- Maybe[NonEmptySimpleStr] :$file?
+ Maybe[NonEmptySimpleStr] :$filename?
) {
$parent = $parent
? $parent
? $self->parent_sha1
: '-c';
my @etc = (
- ( $file ? ('--', $file) : () ),
+ ( $filename ? ('--', $filename) : () ),
);
+ # If we're not comparing against something and we have multiple
+ # parents then it's a merge commit so show what was merged.
+ my $sha1 = $parent && $parent eq '-c' && @{[$self->parents]} > 1
+ ? sprintf("%s^1..%s^2", ($self->sha1) x 2)
+ : $self->sha1;
+
my @out = $self->_raw_diff(
( $patch ? '--patch-with-raw' : () ),
( $parent ? $parent : () ),
- $self->sha1, @etc,
+ $sha1, @etc,
);
# XXX Yes, there is much wrongness having _parse_diff_tree be destructive.
$line{sha1} = $line{sha1dst};
$line{is_new} = $line{sha1src} =~ /^0+$/
if $line{sha1src};
- @line{qw/status sim/} = $line{status} =~ /(R)(\d+)/
+ @line{qw/status sim/} = $line{status} =~ /(R)0*(\d+)/
if $line{status} =~ /^R/;
push @ret, \%line;
}
next;
}
- if (/^index (\w+)\.\.(\w+) (\d+)$/) {
+ if (/^index (\w+)\.\.(\w+)(?: (\d+))?$/) {
@{$ret[-1]}{qw(index src dst mode)} = ($_, $1, $2, $3);
next
}