Skip to content

Commit

Permalink
Add -k option to cvsexportcommit to revert expanded CVS keywords in C…
Browse files Browse the repository at this point in the history
…VS working tree before applying commit patch

Depending on how your CVS->GIT conversion went you will have some
unexpanded CVS keywords in your GIT repo. If any of your git commits
touch these lines then the patch application will fail. This patch
addresses that by adding an option that will revert and expanded CVS
keywords to files in the working CVS directory that are affected by
the commit being applied.

Signed-off-by: Alex Bennée <alex@bennee.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Alex Bennée authored and Junio C Hamano committed Jun 18, 2009
1 parent 4f4fa9c commit 907ffe1
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 3 deletions.
4 changes: 4 additions & 0 deletions Documentation/git-cvsexportcommit.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ OPTIONS
-u::
Update affected files from CVS repository before attempting export.

-k::
Reverse CVS keyword expansion (e.g. $Revision: 1.2.3.4$
becomes $Revision$) in working CVS checkout before applying patch.

-w::
Specify the location of the CVS checkout to use for the export. This
option does not require GIT_DIR to be set before execution if the
Expand Down
25 changes: 22 additions & 3 deletions git-cvsexportcommit.perl
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
use File::Spec;
use Git;

our ($opt_h, $opt_P, $opt_p, $opt_v, $opt_c, $opt_f, $opt_a, $opt_m, $opt_d, $opt_u, $opt_w, $opt_W);
our ($opt_h, $opt_P, $opt_p, $opt_v, $opt_c, $opt_f, $opt_a, $opt_m, $opt_d, $opt_u, $opt_w, $opt_W, $opt_k);

getopts('uhPpvcfam:d:w:W');
getopts('uhPpvcfkam:d:w:W');

$opt_h && usage();

Expand Down Expand Up @@ -287,7 +287,26 @@
$dirty = 1;
warn "File $f not up to date but has status '$cvsstat{$f}' in your CVS checkout!\n";
}

# Depending on how your GIT tree got imported from CVS you may
# have a conflict between expanded keywords in your CVS tree and
# unexpanded keywords in the patch about to be applied.
if ($opt_k) {
my $orig_file ="$f.orig";
rename $f, $orig_file;
open(FILTER_IN, "<$orig_file") or die "Cannot open $orig_file\n";
open(FILTER_OUT, ">$f") or die "Cannot open $f\n";
while (<FILTER_IN>)
{
my $line = $_;
$line =~ s/\$([A-Z][a-z]+):[^\$]+\$/\$\1\$/g;
print FILTER_OUT $line;
}
close FILTER_IN;
close FILTER_OUT;
}
}

if ($dirty) {
if ($opt_f) { warn "The tree is not clean -- forced merge\n";
$dirty = 0;
Expand Down Expand Up @@ -391,7 +410,7 @@

sub usage {
print STDERR <<END;
Usage: GIT_DIR=/path/to/.git git cvsexportcommit [-h] [-p] [-v] [-c] [-f] [-u] [-w cvsworkdir] [-m msgprefix] [ parent ] commit
Usage: GIT_DIR=/path/to/.git git cvsexportcommit [-h] [-p] [-v] [-c] [-f] [-u] [-k] [-w cvsworkdir] [-m msgprefix] [ parent ] commit
END
exit(1);
}
Expand Down

0 comments on commit 907ffe1

Please sign in to comment.