Merge branch 'ac/cvsimport-revision-mapping'
* ac/cvsimport-revision-mapping: cvsimport: new -R option: generate .git/cvs-revisions mapping
This commit is contained in:
commit
6954ef2063
@ -13,7 +13,7 @@ SYNOPSIS
|
||||
[-A <author-conv-file>] [-p <options-for-cvsps>] [-P <file>]
|
||||
[-C <git_repository>] [-z <fuzz>] [-i] [-k] [-u] [-s <subst>]
|
||||
[-a] [-m] [-M <regex>] [-S <regex>] [-L <commitlimit>]
|
||||
[-r <remote>] [<CVS_module>]
|
||||
[-r <remote>] [-R] [<CVS_module>]
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
@ -157,6 +157,22 @@ It is not recommended to use this feature if you intend to
|
||||
export changes back to CVS again later with
|
||||
'git cvsexportcommit'.
|
||||
|
||||
-R::
|
||||
Generate a `$GIT_DIR/cvs-revisions` file containing a mapping from CVS
|
||||
revision numbers to newly-created Git commit IDs. The generated file
|
||||
will contain one line for each (filename, revision) pair imported;
|
||||
each line will look like
|
||||
+
|
||||
---------
|
||||
src/widget.c 1.1 1d862f173cdc7325b6fa6d2ae1cfd61fd1b512b7
|
||||
---------
|
||||
+
|
||||
The revision data is appended to the file if it already exists, for use when
|
||||
doing incremental imports.
|
||||
+
|
||||
This option may be useful if you have CVS revision numbers stored in commit
|
||||
messages, bug-tracking systems, email archives, and the like.
|
||||
|
||||
-h::
|
||||
Print a short usage message and exit.
|
||||
|
||||
|
@ -29,7 +29,7 @@ use IPC::Open2;
|
||||
$SIG{'PIPE'}="IGNORE";
|
||||
$ENV{'TZ'}="UTC";
|
||||
|
||||
our ($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_P, $opt_s,$opt_m,@opt_M,$opt_A,$opt_S,$opt_L, $opt_a, $opt_r);
|
||||
our ($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_P, $opt_s,$opt_m,@opt_M,$opt_A,$opt_S,$opt_L, $opt_a, $opt_r, $opt_R);
|
||||
my (%conv_author_name, %conv_author_email);
|
||||
|
||||
sub usage(;$) {
|
||||
@ -40,7 +40,7 @@ Usage: git cvsimport # fetch/update GIT from CVS
|
||||
[-o branch-for-HEAD] [-h] [-v] [-d CVSROOT] [-A author-conv-file]
|
||||
[-p opts-for-cvsps] [-P file] [-C GIT_repository] [-z fuzz] [-i] [-k]
|
||||
[-u] [-s subst] [-a] [-m] [-M regex] [-S regex] [-L commitlimit]
|
||||
[-r remote] [CVS_module]
|
||||
[-r remote] [-R] [CVS_module]
|
||||
END
|
||||
exit(1);
|
||||
}
|
||||
@ -110,7 +110,7 @@ sub read_repo_config {
|
||||
}
|
||||
}
|
||||
|
||||
my $opts = "haivmkuo:d:p:r:C:z:s:M:P:A:S:L:";
|
||||
my $opts = "haivmkuo:d:p:r:C:z:s:M:P:A:S:L:R";
|
||||
read_repo_config($opts);
|
||||
Getopt::Long::Configure( 'no_ignore_case', 'bundling' );
|
||||
|
||||
@ -659,6 +659,11 @@ if ($opt_A) {
|
||||
write_author_info("$git_dir/cvs-authors");
|
||||
}
|
||||
|
||||
# open .git/cvs-revisions, if requested
|
||||
open my $revision_map, '>>', "$git_dir/cvs-revisions"
|
||||
or die "Can't open $git_dir/cvs-revisions for appending: $!\n"
|
||||
if defined $opt_R;
|
||||
|
||||
|
||||
#
|
||||
# run cvsps into a file unless we are getting
|
||||
@ -742,7 +747,7 @@ sub write_tree () {
|
||||
}
|
||||
|
||||
my ($patchset,$date,$author_name,$author_email,$branch,$ancestor,$tag,$logmsg);
|
||||
my (@old,@new,@skipped,%ignorebranch);
|
||||
my (@old,@new,@skipped,%ignorebranch,@commit_revisions);
|
||||
|
||||
# commits that cvsps cannot place anywhere...
|
||||
$ignorebranch{'#CVSPS_NO_BRANCH'} = 1;
|
||||
@ -825,6 +830,11 @@ sub commit {
|
||||
system('git' , 'update-ref', "$remote/$branch", $cid) == 0
|
||||
or die "Cannot write branch $branch for update: $!\n";
|
||||
|
||||
if ($revision_map) {
|
||||
print $revision_map "@$_ $cid\n" for @commit_revisions;
|
||||
}
|
||||
@commit_revisions = ();
|
||||
|
||||
if ($tag) {
|
||||
my ($xtag) = $tag;
|
||||
$xtag =~ s/\s+\*\*.*$//; # Remove stuff like ** INVALID ** and ** FUNKY **
|
||||
@ -959,6 +969,7 @@ while (<CVS>) {
|
||||
push(@skipped, $fn);
|
||||
next;
|
||||
}
|
||||
push @commit_revisions, [$fn, $rev];
|
||||
print "Fetching $fn v $rev\n" if $opt_v;
|
||||
my ($tmpname, $size) = $cvs->file($fn,$rev);
|
||||
if ($size == -1) {
|
||||
@ -981,7 +992,9 @@ while (<CVS>) {
|
||||
unlink($tmpname);
|
||||
} elsif ($state == 9 and /^\s+(.+?):\d+(?:\.\d+)+->(\d+(?:\.\d+)+)\(DEAD\)\s*$/) {
|
||||
my $fn = $1;
|
||||
my $rev = $2;
|
||||
$fn =~ s#^/+##;
|
||||
push @commit_revisions, [$fn, $rev];
|
||||
push(@old,$fn);
|
||||
print "Delete $fn\n" if $opt_v;
|
||||
} elsif ($state == 9 and /^\s*$/) {
|
||||
|
@ -47,13 +47,20 @@ EOF
|
||||
|
||||
test_expect_success 'import a trivial module' '
|
||||
|
||||
git cvsimport -a -z 0 -C module-git module &&
|
||||
git cvsimport -a -R -z 0 -C module-git module &&
|
||||
test_cmp module-cvs/o_fortuna module-git/o_fortuna
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'pack refs' 'cd module-git && git gc && cd ..'
|
||||
|
||||
test_expect_success 'initial import has correct .git/cvs-revisions' '
|
||||
|
||||
(cd module-git &&
|
||||
git log --format="o_fortuna 1.1 %H" -1) > expected &&
|
||||
test_cmp expected module-git/.git/cvs-revisions
|
||||
'
|
||||
|
||||
test_expect_success 'update cvs module' '
|
||||
|
||||
cd module-cvs &&
|
||||
@ -86,13 +93,21 @@ EOF
|
||||
test_expect_success 'update git module' '
|
||||
|
||||
cd module-git &&
|
||||
git cvsimport -a -z 0 module &&
|
||||
git cvsimport -a -R -z 0 module &&
|
||||
git merge origin &&
|
||||
cd .. &&
|
||||
test_cmp module-cvs/o_fortuna module-git/o_fortuna
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'update has correct .git/cvs-revisions' '
|
||||
|
||||
(cd module-git &&
|
||||
git log --format="o_fortuna 1.1 %H" -1 HEAD^ &&
|
||||
git log --format="o_fortuna 1.2 %H" -1 HEAD) > expected &&
|
||||
test_cmp expected module-git/.git/cvs-revisions
|
||||
'
|
||||
|
||||
test_expect_success 'update cvs module' '
|
||||
|
||||
cd module-cvs &&
|
||||
@ -107,13 +122,22 @@ test_expect_success 'cvsimport.module config works' '
|
||||
|
||||
cd module-git &&
|
||||
git config cvsimport.module module &&
|
||||
git cvsimport -a -z0 &&
|
||||
git cvsimport -a -R -z0 &&
|
||||
git merge origin &&
|
||||
cd .. &&
|
||||
test_cmp module-cvs/tick module-git/tick
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'second update has correct .git/cvs-revisions' '
|
||||
|
||||
(cd module-git &&
|
||||
git log --format="o_fortuna 1.1 %H" -1 HEAD^^ &&
|
||||
git log --format="o_fortuna 1.2 %H" -1 HEAD^
|
||||
git log --format="tick 1.1 %H" -1 HEAD) > expected &&
|
||||
test_cmp expected module-git/.git/cvs-revisions
|
||||
'
|
||||
|
||||
test_expect_success 'import from a CVS working tree' '
|
||||
|
||||
$CVS co -d import-from-wt module &&
|
||||
@ -126,6 +150,12 @@ test_expect_success 'import from a CVS working tree' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'no .git/cvs-revisions created by default' '
|
||||
|
||||
! test -e import-from-wt/.git/cvs-revisions
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'test entire HEAD' 'test_cmp_branch_tree master'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user