提交 0d821d4d 编写于 作者: H H. Peter Anvin 提交者: Junio C Hamano

[PATCH] git-cvsimport-script: handling of tags

This patch changes git-cvsimport-script so that it creates tag objects
instead of refs to commits, and adds an option, -u, to convert
underscores in branch and tag names to dots (since CVS doesn't allow
dots in branches and tags.)
Signed-off-by: NJunio C Hamano <junkio@cox.net>
上级 89580e3f
...@@ -44,6 +44,9 @@ OPTIONS ...@@ -44,6 +44,9 @@ OPTIONS
to avoid noisy changesets. Highly recommended, but off by default to avoid noisy changesets. Highly recommended, but off by default
to preserve compatibility with early imported trees. to preserve compatibility with early imported trees.
-u::
Convert underscores in tag and branch names to dots.
-o <branch-for-HEAD>:: -o <branch-for-HEAD>::
The 'HEAD' branch from CVS is imported to the 'origin' branch within The 'HEAD' branch from CVS is imported to the 'origin' branch within
the git repository, as 'HEAD' already has a special meaning for git. the git repository, as 'HEAD' already has a special meaning for git.
......
...@@ -24,23 +24,24 @@ use Time::Local; ...@@ -24,23 +24,24 @@ use Time::Local;
use IO::Socket; use IO::Socket;
use IO::Pipe; use IO::Pipe;
use POSIX qw(strftime dup2); use POSIX qw(strftime dup2);
use IPC::Open2;
$SIG{'PIPE'}="IGNORE"; $SIG{'PIPE'}="IGNORE";
$ENV{'TZ'}="UTC"; $ENV{'TZ'}="UTC";
our($opt_h,$opt_o,$opt_v,$opt_k,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_s,$opt_m,$opt_M); our($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_s,$opt_m,$opt_M);
sub usage() { sub usage() {
print STDERR <<END; print STDERR <<END;
Usage: ${\basename $0} # fetch/update GIT from CVS Usage: ${\basename $0} # fetch/update GIT from CVS
[ -o branch-for-HEAD ] [ -h ] [ -v ] [ -d CVSROOT ] [-o branch-for-HEAD] [-h] [-v] [-d CVSROOT]
[ -p opts-for-cvsps ] [ -C GIT_repository ] [ -z fuzz ] [-p opts-for-cvsps] [-C GIT_repository] [-z fuzz]
[ -i ] [ -k ] [-s subst] [ -m ] [ -M regex] [ CVS_module ] [-i] [-k] [-u] [-s subst] [-m] [-M regex] [CVS_module]
END END
exit(1); exit(1);
} }
getopts("hivmko:d:p:C:z:s:M:") or usage(); getopts("hivmkuo:d:p:C:z:s:M:") or usage();
usage if $opt_h; usage if $opt_h;
@ARGV <= 1 or usage(); @ARGV <= 1 or usage();
...@@ -628,13 +629,37 @@ my $commit = sub { ...@@ -628,13 +629,37 @@ my $commit = sub {
or die "Cannot write branch $branch for update: $!\n"; or die "Cannot write branch $branch for update: $!\n";
if($tag) { if($tag) {
open(C,">$git_dir/refs/tags/$tag") my($in, $out) = ('','');
or die "Cannot create tag $tag: $!\n"; my($xtag) = $tag;
print C "$cid\n" $xtag =~ s/\s+\*\*.*$//; # Remove stuff like ** INVALID ** and ** FUNKY **
or die "Cannot write tag $branch: $!\n"; $xtag =~ tr/_/\./ if ( $opt_u );
my $pid = open2($in, $out, 'git-mktag');
print $out "object $cid\n".
"type commit\n".
"tag $xtag\n".
"tagger $author <$author>\n"
or die "Cannot create tag object $xtag: $!\n";
close($out)
or die "Cannot create tag object $xtag: $!\n";
my $tagobj = <$in>;
chomp $tagobj;
if ( !close($in) or waitpid($pid, 0) != $pid or
$? != 0 or $tagobj !~ /^[0123456789abcdef]{40}$/ ) {
die "Cannot create tag object $xtag: $!\n";
}
open(C,">$git_dir/refs/tags/$xtag")
or die "Cannot create tag $xtag: $!\n";
print C "$tagobj\n"
or die "Cannot write tag $xtag: $!\n";
close(C) close(C)
or die "Cannot write tag $branch: $!\n"; or die "Cannot write tag $xtag: $!\n";
print "Created tag '$tag' on '$branch'\n" if $opt_v;
print "Created tag '$xtag' on '$branch'\n" if $opt_v;
} }
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册