From: Lukas <Lukas> I used the ignore-paths option to ignore a lot of stuff I don’t need. The ignore pattern works well, but it could and up in empty commits. So just the message without any modifications / changes. The patch below skip a commit if all changes are ignored by the ignore-paths option. In order to use this feature I includes the option to read configuration for ignore-path, include-paths in several lines. So that the user is not limited by the max. char. per line definition. Signed-off-by: Lukas Pupka-Lipinski <lukas.pupkalipinski@xxxxxxxxxxx> --- perl/Git/SVN.pm | 21 +++++++++++++++++++++ perl/Git/SVN/Fetcher.pm | 30 ++++++++++++++++++++++++++++++ perl/Git/SVN/Ra.pm | 2 ++ 3 files changed, 53 insertions(+) diff --git a/perl/Git/SVN.pm b/perl/Git/SVN.pm index 4b28b87784..fa87687306 100644 --- a/perl/Git/SVN.pm +++ b/perl/Git/SVN.pm @@ -1188,6 +1188,22 @@ sub find_parent_branch { return undef; } +############################################################ + +=item do_fetch() + +Fetch an Commit and returns a log entry + +Input: $path - array of strings (Paths) in a commit + $rev - Revision number + +Output: $log_entry if successfull + null if skipped + (die) on fetch error + +=cut + +############################################################ sub do_fetch { my ($self, $paths, $rev) = @_; my $ed; @@ -1212,6 +1228,11 @@ sub do_fetch { } $ed = Git::SVN::Fetcher->new($self); } + my $skip = $ed->is_empty_commit($paths); + if ($skip){ + print "skip commit $rev\n"; + return; + } unless ($self->ra->gs_do_update($last_rev, $rev, $self, $ed)) { die "SVN connection failed somewhere...\n"; } diff --git a/perl/Git/SVN/Fetcher.pm b/perl/Git/SVN/Fetcher.pm index 96b14538b0..c31343b6e6 100644 --- a/perl/Git/SVN/Fetcher.pm +++ b/perl/Git/SVN/Fetcher.pm @@ -139,6 +139,36 @@ sub is_path_ignored { return 0; } +############################################################ + +=item is_empty_commit() + +Return 1 if all given $paths are ignored, so that this commit end up in an empty commit + +Input: $path - array of strings (Paths) in a commit + +Output: { 1 if true, 0 if false } + +=cut + +############################################################ +sub is_empty_commit { + my ( $self, $paths ) = @_; + my $path; + my $ignored; + unless ( defined( $self->{include_regex} ) ) { + return 0; + } + + foreach $path ( keys %$paths ) { + $ignored = $self->is_path_ignored($path); + if ( !$ignored ) { + return 0; + } + } + return 1; +} + sub set_path_strip { my ($self, $path) = @_; $self->{path_strip} = qr/^\Q$path\E(\/|$)/ if length $path; diff --git a/perl/Git/SVN/Ra.pm b/perl/Git/SVN/Ra.pm index 56ad9870bc..63be69dc12 100644 --- a/perl/Git/SVN/Ra.pm +++ b/perl/Git/SVN/Ra.pm @@ -475,6 +475,8 @@ sub gs_fetch_loop_common { my $log_entry = $gs->do_fetch($paths, $r); if ($log_entry) { $gs->do_git_commit($log_entry); + }else{ + next; } $Git::SVN::INDEX_FILES{$gs->{index}} = 1; } -- gitgitgadget